Maison  >  Article  >  base de données  >  Oracle vérifie l'utilisation de l'espace table et résout les problèmes d'instance complète

Oracle vérifie l'utilisation de l'espace table et résout les problèmes d'instance complète

WBOY
WBOYavant
2022-07-29 15:25:544181parcourir

Cet article vous apporte des connaissances pertinentes sur Oracle Le problème le plus courant rencontré dans l'utilisation quotidienne d'oralce est que l'espace table d'oracle est plein, les données ne peuvent pas être écrites et un message d'erreur est signalé. ensemble. J'espère utile à tout le monde.

Oracle vérifie l'utilisation de l'espace table et résout les problèmes d'instance complète

Tutoriel recommandé : "Tutoriel vidéo Oracle"

1. Vérifiez l'utilisation de l'espace table

1. Vérifiez le fichier d'espace table de la base de données :

--查看数据库表空间文件
select * from dba_data_files;

2.
--查看所有表空间的总容量
select dba.TABLESPACE_NAME, sum(bytes)/1024/1024 as MB  
from dba_data_files dba 
group by dba.TABLESPACE_NAME;

3. Vérifiez l'utilisation de l'espace table de la base de données

--查看数据库表空间使用率
select total.tablespace_name,round(total.MB, 2) as Total_MB,round(total.MB - free.MB, 2) as Used_MB,round((1-free.MB / total.MB)* 100, 2) || '%' as Used_Pct 
from (
select tablespace_name, sum(bytes) /1024/1024 as MB 
from dba_free_space group by tablespace_name) free,
(select tablespace_name, sum(bytes) / 1024 / 1024 as MB 
from dba_data_files group by tablespace_name) total     
where free.tablespace_name = total.tablespace_name 
order by used_pct desc;

4.1. Vérifiez la taille totale, l'utilisation et l'espace restant de l'espace table

--查看表空间总大小、使用率、剩余空间
select a.tablespace_name, total, free, total-free as used, substr(free/total * 100, 1, 5) as "FREE%", substr((total - free)/total * 100, 1, 5) as "USED%"
from
(select tablespace_name, sum(bytes)/1024/1024 as total from dba_data_files group by tablespace_name) a,
(select tablespace_name, sum(bytes)/1024/1024 as free from dba_free_space group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
order by a.tablespace_name

4.2. Vérifiez l'utilisation de l'espace table (y compris l'espace table temporaire)

--查看表空间使用率(包含临时表空间)
select * from (
Select a.tablespace_name,
(a.bytes- b.bytes) "表空间使用大小(BYTE)",
a.bytes/(1024*1024*1024) "表空间大小(GB)",
b.bytes/(1024*1024*1024) "表空间剩余大小(GB)",
(a.bytes- b.bytes)/(1024*1024*1024) "表空间使用大小(GB)",
to_char((1 - b.bytes/a.bytes)*100,'99.99999') || '%' "使用率"
from (select tablespace_name,
sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name,
sum(bytes) bytes
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
union all
select c.tablespace_name,
d.bytes_used "表空间使用大小(BYTE)",
c.bytes/(1024*1024*1024) "表空间大小(GB)",
(c.bytes-d.bytes_used)/(1024*1024*1024) "表空间剩余大小(GB)",
d.bytes_used/(1024*1024*1024) "表空间使用大小(GB)",
to_char(d.bytes_used*100/c.bytes,'99.99999') || '%' "使用率"
from
(select tablespace_name,sum(bytes) bytes
from dba_temp_files group by tablespace_name) c,
(select tablespace_name,sum(bytes_cached) bytes_used
from v$temp_extent_pool group by tablespace_name) d
where c.tablespace_name = d.tablespace_name
)
order by tablespace_name

5. . Vérifiez la taille spécifique de la table de l'espace occupé

--查看具体表的占用空间大小
select * from (
select t.tablespace_name,t.owner, t.segment_name, t.segment_type, sum(t.bytes / 1024 / 1024) mb
from dba_segments t
where t.segment_type='TABLE'
group by t.tablespace_name,t.OWNER, t.segment_name, t.segment_type
) t
order by t.mb desc

2. Agrandissez la taille ou ajoutez un fichier d'espace table

1 Modifiez la taille de l'espace alloué au fichier de données dbf de l'espace table

alter database datafile ‘...\system_01.dbf' autoextend on;
alter database datafile ‘...\system_01.dbf' resize 1024M;

2.1 Ajoutez un nouveau fichier de données à. l'espace table (si l'espace table est plein de 32 Go et ne peut pas être étendu, augmentez-le) Fichier d'espace table)

alter tablespace SYSTEM add datafile '/****' size 1000m autoextend on next 100m;

2.2 Si un nouvel espace table est ajouté à une table temporaire temporaire, une erreur sera signalée :

0RA- 03217 : Option non valide pour modifier TEMPORARY TABLESPACE

Solution : Remplacer le fichier de données par tempfile

alter tablespace TEMP01 add tempfile'/****' size 1000m autoextend on next 100m;

Utilisé pour l'espace de table temporaire temporaire. Problème de taux complet

L'objectif principal de l'espace de table temporaire est de fournir un espace de calcul temporaire lorsque la base de données effectue des opérations telles que comme les opérations de tri, la gestion des index et l'accès aux vues. Une fois l'opération terminée, le système le nettoiera automatiquement, mais parfois nous rencontrerons des segments temporaires qui ne sont pas disponibles, l'espace table TEMP est presque entièrement utilisé ;

fait augmenter l'espace de la table temporaire principalement dans les situations suivantes :

1, trier par ou regrouper par (trier les comptes par disque pour la partie principale)

2, création et recréation d'index ; opération distincte ;

4. union et intersection et moins de tri-fusion

5. Analyser l'opération

6.

Solution 1 : utilisez la méthode ci-dessus pour ajouter des fichiers d'espace table à temp

Solution 2 : lorsque l'espace de ressources du serveur est limité, rétablissez un nouvel espace table temporaire pour remplacer l'espace table actuel

--1.查看当前的数据库默认表空间:
select * from database_properties
where property_name='DEFAULT_TEMP_TABLESPACE';

--2.创建新的临时表空间
create temporary tablespace TEMP01 tempfile 
'/home/temp01.dbf' size 31G;

--3.更改默认临时表空间
alter database default temporary tablespace TEMP01;

--4.删除原来的临时表空间
drop tablespace TEMP02 including contents and datafiles;

--如果删除原来临时表空间报错ORA-60100:由于排序段,已阻止删除表空间...
--(说明有语句正在使用原来的临时表空间,需要将其kill掉再删除,此语句多为排序的语句)
--查询语句
Select se.username,se.sid,se.serial#,su.extents,su.blocks*to_number(rtrim(p.value))as Space,
tablespace,segtype,sql_text
from v$sort_usage su,v$parameter p,v$session se,v$sql s
where p.name='db_block_size' and su.session_addr=se.saddr and s.hash_value=su.sqlhash
and s.address=su.sqladdr
order by se.username,se.sid;

--删除对应的'sid,serial#'
alter system kill session 'sid,serial#'

Pièce jointe : afficher la table space Est-il capable d'une expansion automatique

--查看表空间是否具有自动扩展的能力     
SELECT T.TABLESPACE_NAME,D.FILE_NAME,     
D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS     
FROM DBA_TABLESPACES T,DBA_DATA_FILES D     
WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME     
 ORDER BY TABLESPACE_NAME,FILE_NAME;

Tutoriel recommandé : "

Tutoriel vidéo Oracle

"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer