Maison  >  Article  >  base de données  >  Opérations de tri, de recyclage et de libération des espaces table de base de données Oracle

Opérations de tri, de recyclage et de libération des espaces table de base de données Oracle

WBOY
WBOYavant
2022-07-18 14:16:505659parcourir

Cet article vous apporte des connaissances pertinentes sur Oracle, qui introduit principalement les problèmes liés aux opérations de tri, de recyclage et de libération de l'espace table de la base de données, notamment l'abaissement du niveau d'eau élevé de l'espace table, la libération lors de la suppression, etc. ensemble, j'espère que cela sera utile à tout le monde.

Opérations de tri, de recyclage et de libération des espaces table de base de données Oracle

Tutoriel recommandé : "Tutoriel vidéo Oracle"

Lors de l'utilisation d'Oracle pour les tests d'entrée, nous créerons de nombreuses données de test, et après la suppression, le niveau d'eau élevé de l'espace table ne peut toujours pas être automatiquement abaissé , entraînant une occurrence d'espace table. L'apparition de données vides affecte les performances de l'espace table et occupe également trop d'espace de stockage.

1. Réduisez le niveau d'eau élevé de l'espace table

1. Affichez l'espace table et le nom du fichier physique correspondant

Le code est le suivant :

select 
b.file_id 物理文件号,
b.file_name 物理文件名,
b.tablespace_name 表空间,
b.bytes/1024/1024 大小M,
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024  已使用M,
substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5)  利用率 
from dba_free_space a,dba_data_files b 
where a.file_id=b.file_id 
group by b.tablespace_name,b.file_id,b.file_name,b.bytes 
order by b.tablespace_name

En fonction du taux d'utilisation, vous pouvez déterminer intuitivement quels espaces table peuvent être libéré.

2. Videz la corbeille

Le code est le suivant :

-- 清除用户回收站
purge recyclebin;
-- 清除全库回收站
purge dba_recyclebin;

Effacez les données laissées lors du processus de suppression.

3. Organisez l'espace table

Le code est le suivant :

alter tablespace tablespace_name coalesce;

Intégrez les fragments de l'espace table pour augmenter la continuité de l'espace table

4 Générez le code RESIZE

Le code est le suivant :

select a.file#,a.name,a.bytes/1024/1024 CurrentMB,
ceil(HWM * a.block_size)/1024/1024 ResizeTo,
(a.bytes - HWM * a.block_size)/1024/1024 ReleaseMB,
'alter database datafile '''||a.name||''' resize '||
ceil(HWM * a.block_size/1024/1024) || 'M;' ResizeCMD
from v$datafile a,
(select file_id,max(block_id+blocks-1) HWM
from dba_extents where file_id in
(select b.file# From v$tablespace a ,v$datafile b
where a.ts#=b.ts# and a.name='tablespace_name')
group by file_id) b
where a.file# = b.file_id(+)
and (a.bytes - HWM *block_size)>0
order by 5

Une fois le code ci-dessus exécuté, une réponse correspondante peut être générée. Code SQL de RESIZE de l'espace table, exécutez simplement le code SQL correspondant à ce moment.

2. Libérer lors de la suppression

1. Effacez les données de la table et libérez l'espace de la table

Le code est le suivant :

-- 清空表数据
truncate table table_name;
-- 释放表空间
alter table table_name deallocate UNUSED KEEP 0;

Effacez d'abord les données de la table pour le moment, la table n'existe toujours pas. rollback et ne peut pas tronquer une bande. Si vous souhaitez supprimer une table avec une clé étrangère, vous devez d'abord annuler la clé étrangère puis la supprimer
Notez que si KEEP 0 n'est pas ajouté, l'espace table ne sera pas libéré ;

2. Migrer les données de la table

Lorsque les erreurs suivantes se produisent, nous pouvons non seulement les résoudre en organisant l'espace table ou en vidant la corbeille, mais nous pouvons également libérer de l'espace en migrant toutes les données de la table dans l'espace table. à libérer vers d'autres espaces table. Ensuite, migrez-le vers l'espace table d'origine.

	--需移动的表数据
   select DISTINCT 'alter table '|| owner||'.'||segment_name || ' move tablespace user_test;' from dba_extents where segment_type='TABLE' and file_id=4;
	--需移动的索引数据
   select DISTINCT 'alter index '|| owner||'.'|| segment_name || ' rebuild tablespace user_test;' from dba_extents where segment_type='INDEX' and file_id=4;
   --需移动的分区表数据
   select DISTINCT 'alter table '|| owner||'.'|| segment_name || ' move partition '|| partition_name || ' tablespace user_test;' from dba_extents where segment_type='TABLE PARTITION' and file_id=4;
   --需移动的分区表索引数据
   select DISTINCT 'alter index '|| owner||'.'|| segment_name || ' rebuild partition '|| partition_name || ' tablespace user_test;' from dba_extents where segment_type='INDEX PARTITION' and file_id=4;

Le file_id dans le code ci-dessus peut être comparé et modifié en affichant l'espace table. Une fois le code ci-dessus exécuté, le code SQL généré automatiquement correspondant peut être obtenu à ce moment, le code SQL correspondant peut être exécuté pour migrer. les données du tableau

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