Bonjour les admins,

Bon je bosse toujours mais je publie peu ... Surement que l'un à un rapport avec l'autre.
Je me suis dit que j'allais publier un article car j'ai eu à résoudre un petit problème chez un client et assez mal documenté sur internet.

Une erreur ORA-01655 : tablespace SYSTEM plein.

Normalement quand un tablespace est plein, on ajoute un datafile et tout roule, sauf que le tablespace SYSTEM faisait 32Go (taille max autorisée) et que 32Go pour ce tablespace c'était ... inhabituel.

Etape 1 : quelles sont ces si grosses tables qui mangent l'espace du tablespace ?

SQL> select * from (
select owner, segment_name, bytes/1024/1024 Mo
from dba_segments
where segment_type = 'TABLE'
and tablespace_name = 'SYSTEM'
order by bytes/1024/1024 desc
)
where rownum <= 20;

Alors, je récupère les 20 plus grosses tables du tablespace SYSTEM ... et je vois quand même pas mal de "SYS_EXPORT_SCHEMA_xx"

Etape 2 : c'est quoi ces tables SYS_EXPORT_SCHEMA_xx ?

Alors là, on sait ou on sait pas et on utilise google. Ce sont des tables temporaires qui sont générées lors des export datapump. Et quand un export (en tâche planifiée par exemple) est arrêté brusquement (lors d'un shutdown immediate à tout hasard ;)), la table n'est pas supprimée.

Concrêtement, il faut exécuter la requête SQL suivante :

SQL> SELECT owner_name, job_name, operation, job_mode, state, attached_sessions
FROM dba_datapump_jobs;

Et si une(des) table(s) est en STATE = "not running" et ATTACHED_SESSIONS="0" alors c'est qu'il y a un loup ! On va donc passer un bon coup de balais pour supprimer ces tâches d'export qui n'ont rien à faire (parce que je connais mon serveur hein, on ne suppose pas quand on ne sait pas) :

du coup on va juste faire ça : on récupère le owner_name et le job_name et on supprime les tables qui n'ont plus de raison d'être. Exemple (pour moi c'était un job lancé par SYSTEM) :

SQL> drop table SYSTEM.SYS_EXPORT_SCHEMA_...;

et quand on relance la requete de select des jobs, à la fin quand c'est propre il n'y a aucune table not running.

Etape 3 : et maintenant, surprise !!

Comme je vous l'ai dit, il y avait un loup avec autant de tables de sauvegardes non nettoyées, du coup je suis allé voir le répertoire de destination des dumps datapump et là ... il y en a qui se sont fait limoger pour moins que ça ... aucun fichier de sauvegarde exploitable : la base était fermée en plein milieu de la sauvegarde ! Bon, comme je suis gentil, j'ai indiqué comment faire : notamment les logs à vérifier "sucessfully completed" + date du fichier de log ! La base ...

Alors tout est bien qui finira bien (une fois que la sauvegarde que j'ai relancé et avancé l'heure de début) sera terminée et que les logs auront été vérifiés !