par , 26/04/2018 à 10h17 (2270 Affichages)
Introduction
Mon DBA est un peu flemmard... Il ne fait pas de provisionnement d'espace et passe systématiquement nos tablespaces en mode illimité, avec auto-extension...
Résultat des courses : les tablespaces temporaires prennent l’ascenseur (32 Go si ce n'est pas du big file.... sinon... 32 To
) et saturent les volumes sous-jacents... bloquant toute la base...
Le problème
On ne peut réorganiser le tablespace temporaire... et généralement, les blocs les plus hauts ne sont pas libérés... Impossible donc de le réduire, si ce n'est en le recréant.
La démarche
Dans mon cas de figure, j'ai la chance de travailler avec une base Oracle en custer (RAC). Je vais donc pouvoir minimiser l'interruption de service.... encore faut-il le faire proprement.
Renommage de l'ancien tablespace
C'est une tâche optionnelle, mais comme tout DBA psycho-rigide, j'aime bien retrouver, à la fin de l'intervention, les mêmes noms qu'au début...
ALTER TABLESPACE TEMP TO TEMP_A_SUPPRIMER
Création d'un nouveau tablespace temporaire
1 2
| CREATE TEMPORARY TABLESPACE TEMP TEMPFILE
'+ORA_DVP_DAT' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 15G; |
Passage du nouveau en temporaire par défaut
Lors du renommage du tablespace, oracle a précédé à la modification du nom dans tous les paramètres...
- le default temporary tablespace est aussi renommé
1 2 3
| SELECT PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME like 'DEFAULT_TEMP_TABLESPACE'; |
- il a aussi été renommé dans les tables sous-jacentes à dba_users
1 2
| SELECT USERNAME, TEMPORARY_TABLESPACE
FROM DBA_USERS |
Il faut donc marquer le nouveau tablespace par défaut
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP ;
Déplacement des services sur le noeud 1
Malheureusement, les instances ont toujours des pointeurs dans la zone temporaire initiale : il faut passer par un nettoyage de ces pointeurs... et le plus simple est de rebooter les instances.... mais en douceur... Nous sommes pleine journée et en production...
Attention : compte tenu que nous allons déplacer nos services, il est important que vous ayez bien documenté
srvctl relocate service -db DVP -service MONSRVDVP -oldinst DVP2 -newinst DVP1
C'est la syntaxe de la version 12 d'Oracle. Pour les versions ultérieures, corrigez en conséquence
srvctl relocate service -d DVPOLD -s MONSRVDVPOLD -i DVPOLD2 -t DVPOLD1 -f
Arrêt/redémarrage du noeud 2
1 2
| srvctl stop instance -d DVP -i DVP2
srvctl stop instance -d DVP -i DVP2 |
Déplacement des services sur le noeud 2
srvctl relocate service -db DVP -service MONSRVDVP -oldinst DVP1 -newinst DVP2
Arrêt/redémarrage du noeud 1
1 2
| srvctl stop instance -d DVP -i DVP1
srvctl stop instance -d DVP -i DVP1 |
Déplacement des services initialements sur 1
srvctl relocate service -db DVP -service MONSRVDVP -oldinst DVP2 -newinst DVP1
Suppression du tablespace
DROP TABLESPACE TEMP_A_SUPPRIMER INCLUDING CONTENTS AND DATAFILES;
C.Q.F.D.