3.24.2008

Redimensionner/resizer un tablespace temporaire pour oracle

Cette semaine, dans le cadre d'une opération de maintenance d'une BD de production, j'ai dû redimensionner le tablespace temporaire par défaut (default temporary tablespace). Il avait un datafile de 15go alors qu'un petit datafile de 1go auto fait très bien l'affaire. Ce tablespace s'est sans doute agrandi dû à une requête SQL mal construite retournant un flot de données énorme devant être trié.

Toutefois, comme ce tablespace est utilisé par tous les utilisateurs de la BD et qu'il est celui par défaut pour les opérations temporaires (telles un tri), j'ai procédé de la façon suivante:
- J'ai créé un 2e tablespace temporaire (TEMP2);
- J'ai assigné ce tablespace comme tablespace temporaire par défaut;
- J'ai attribué TEMP2 aux utilisateurs;
- J'ai effacé le tablespace TEMP et son datafile de 15go;
- J'ai recréé TEMP avec une taille de 100 mo auto extensible;
- J'ai attribué TEMP aux utilisateurs;
- J'ai effacé TEMP2

Voici ce que cela donne en script SQL. Il est à noté que j'ai roulé ce script hors des heures de production pour éviter les problèmes.


create temporary tablespace TEMP2
tempfile 'YOURPATH\TEMP02.dbf'
size 100M
autoextend on
next 100M maxsize 4096M
extent management local UNIFORM SIZE 5M;


ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP2;

-- On donne aux utilisateurs le tablespace temporaire TEMP2
set heading off
spool c:\travail\alter_user_temp.sql
select 'alter user ' || username || ' TEMPORARY TABLESPACE TEMP2;' from all_users order by username;
spool off
@c:\travail\alter_user_temp.sql

DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;


CREATE TEMPORARY TABLESPACE temp
TEMPFILE 'YOURPATH\TEMP01.dbf' SIZE 100M REUSE
AUTOEXTEND ON NEXT 100M MAXSIZE 8192M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;


ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;

-- On redonne aux utilisateurs le tablespace temporaire TEMP
spool c:\travail\alter_user_temp.sql
select 'alter user ' || username || ' TEMPORARY TABLESPACE TEMP;' from all_users order by username;
spool off
@c:\travail\alter_user_temp.sql


DROP TABLESPACE TEMP2 INCLUDING CONTENTS AND DATAFILES;

Aucun commentaire:

Mes items partagés de Google Reader