Voir le flux RSS

Fabien Celaia

Volumes et recyclebin

Noter ce billet
par , 31/08/2020 à 12h17 (347 Affichages)
Introduction

Depuis la version 10 d'Oracle, une corbeille bien pratique permet aux développeurs maladroits de récupérer une table qu'ils auraient malencontreusement supprimée. Je vous renvoie à mon article sur le sujet.
Le problème, c'est que la suppression devient alors logique (et pas physique) : l'objet (et ses blocs alloués) ne disparaît pas, mais est juste renommé (les fameux objets BIN$%==$0).
La base de donnée prend donc de l'embonpoint... une couche de gras qu'il convient de maîtriser dans un environnement de production.

Bien sûr, il y a toujours l'option d'inactiver la corbeille (qui nécessite un reboot)... mais c'est une fonctionnalité quand même bien pratique qui évide de fastidieuses restaurations.

Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
alter system set recyclebin=off scope=spfile sid='*' ;

Taille des objets d'une base

Pas trop compliqué : il suffit de requêter sur les segments

Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
select  segment_type,  
case segment_type when 'LOBSEGMENT'  then s.owner||'.'||l.table_name ||'('||l.column_name||')'
                  when 'INDEX'  then i.index_name ||' de '||i.owner||'.'||i.table_name
                  ELSE s.segment_name
                  END OBJ,
s.bytes/1024/1024/1024 Gb 
from dba_segments s
left join dba_lobs l on s.owner=l.owner and s.segment_name=l.segment_name 
left join dba_indexes i on s.owner=i.owner and s.segment_name=i.index_name 
where s.tablespace_name like '%CARI%' 
order by  s.bytes desc
Sentez-vous libre, au besoin, d'ajouter un filtre sur le segment_type... mais il est toujours intéressant de ne pas se limiter au tables. Souvent, ce sont les objets sous-jacents (index, LOB) qui mangent plus de place que ce que l'on s'imagine.

Taille de la recylebin

Assez simple aussi, il suffit d'aller voir dans la vue DBA_RECYCEBIN (select ou SHOW). La colonne SPACE y est spécifiée en bloc.

Nettoyage de la recyclebin

Là aussi, rien de plus simple, en tant que SYS

Au niveau global, on peut le faire, en tant que SYS, via
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
PURGE DBA_RECYCLEBIN ;

On peut aussi se retreindre à des objets particuliers via
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
PURGE recyclebin;
PURGE TABLESPACE monTablespace;
PURGE TABLESPACE monTablespace USER MonSchema;
PURGE UneTable;

L'effet se fait directement sentir sur les tablespaces, mais il reste un souci : impossible souvent de réduire la taille des datafiles puisque le nettoyage des blocs est souvent sous la barre du high watermark.

ORA-03297: le fichier contient des données utilisées au-delà de la valeur RESIZE requise
Réduction d'un tablespace
Il convient de détecter quels sont les objets qui monopolisent le "haut" de l'adressage du tablespace et de les réorganiser afin qu'ils se stockent sur la partie basse. Là, ca devient un peu plus "touchy" car la place physique dans le tablespace doit être trouvée dans DBA_EXTENTS, et cela ne se fait plus au niveau du tablespace, mais bien au niveau (physique) de chaque datafile.

Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
select  e.owner,e.SEGMENT_NAME, max(e.block_id), d.file_name 
from dba_extents e
inner join dba_data_files d on e.FILE_ID = d.file_id 
where e.tablespace_name like '%MonTablespace%' 
group by e.owner,e.SEGMENT_NAME, d.file_name
order by max(e.block_id) desc

Le travail d'administration du DBA reste alors à faire:
  1. reconstruction des tables
  2. reconstruction des LOB
  3. reconstruction des indexes


Une nouvelle fois, je vous renvoie à un article sur la réorganisation

Ensuite la réduction des datafiles devrait pouvoir se faire.

Selon la masse de travail à investir, il convient peut-être de passer par un expdp/impdp (avec l'interruption de service que cela provoquera)... Le datapump a le mérite de travailler au niveau logique... donc il réorganisera automatiquement tous les objets traités, s'il est bien entendu en mode TABLE_EXISTS_ACTION=REPLACE.

Envoyer le billet « Volumes et recyclebin » dans le blog Viadeo Envoyer le billet « Volumes et recyclebin » dans le blog Twitter Envoyer le billet « Volumes et recyclebin » dans le blog Google Envoyer le billet « Volumes et recyclebin » dans le blog Facebook Envoyer le billet « Volumes et recyclebin » dans le blog Digg Envoyer le billet « Volumes et recyclebin » dans le blog Delicious Envoyer le billet « Volumes et recyclebin » dans le blog MySpace Envoyer le billet « Volumes et recyclebin » dans le blog Yahoo

Mis à jour 31/08/2020 à 18h27 par dourouc05

Catégories
SGBD , Oracle

Commentaires