Lorsqu'une instance Oracle 9i est indisponible avec l'erreur Oracle ORA-01113 apparaissant dans le fichier de log de l'instance :
ORA-01113: file n needs media recovery ORA-01110: data file n: '<full file name>'
Exemple :
Database mounted. ORA-01113: file 1 needs media recovery ORA-01110: data file 1: '/oem/oracle/OEMD1ORA/system_01.dbf'
avant d'envisager une restauration à partir d'une sauvegarde saine, ou de tenter de lancer la commande recover datafile, il suffit parfois de vérifier tout simplement si l'instance s'est arrêtée violemment durant une sauvegarde à chaud et de lancer ensuite les commandes ALTER DATABASE END BACKUP et ALTER DATABASE OPEN.
Lorsqu'une instance est arrêtée "proprement" avec la commande shutdown immediate ou shutdown alors qu'une sauvegarde à chaud est en cours, l'arrêt de l'instance Oracle est interdit avec le message ORA-01149 car les fichiers ont le statut ACTIVE :
SQL> shutdown immediate;
ORA-01149: cannot shutdown - file 1 has online backup set
ORA-01110: data file 1: '/oem/oracle/OEMD1ORA/system_01.dbf'
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------
1 ACTIVE 49020615 04/08/09
2 ACTIVE 49020619 04/08/09
3 ACTIVE 49020623 04/08/09
4 ACTIVE 49020627 04/08/09
En revanche lorsque l'instance Oracle est arrêtée violemment avec la commande shutdown abort ou bien avec un redémarrage de la machine (init 6 de Solaris...), rien ne peut empêcher l'arrêt de l'instance et les fichiers de données garderont partiellement ou totalement le statut ACTIVE dans V$BACKUP lors du redémarrage.
Au redémarrage de l'instance, l'erreur ORA-01113 est alors remontée dans le fichier de log de l'instance et la base de données est seulement montée et non ouverte :
SQL> startup;
ORACLE instance started.
Total System Global Area 168908404 bytes
Fixed Size 456308 bytes
Variable Size 62914560 bytes
Database Buffers 104857600 bytes
Redo Buffers 679936 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/oem/oracle/OEMD1ORA/system_01.dbf'
Lorsque l'erreur ORA-01113 est rencontrée et que les sauvegardes sont réalisées à chaud, il faut tout d'abord vérifier que l'instance Oracle n'a pas été arrêtée violemment avec la commande shutdown abort ou bien avec un redémarrage de la machine avant d'envisager la remontée d'une sauvegarde saine.
Voici un exemple dans le fichier de log d'une instance d'un arrêt violent de l'instance avec la commande shutdown abort alors que la sauvegarde à chaud est en cours :
Tue Aug 4 14:29:22 2009 alter tablespace OEM_REPOSITORY begin backup Completed: alter tablespace OEM_REPOSITORY begin backup Tue Aug 4 14:29:24 2009 Shutting down instance (abort) License high water mark = 2 Instance terminated by USER, pid = 15478
Lorsque ce cas de figure se présente, la commande ALTER DATABASE END BACKUP permet de corriger très rapidement la situation afin de pouvoir ouvrir la base de données avec la commande ALTER DATABASE OPEN.
La commande ALTER DATABASE END BACKUP est une nouveauté d'Oracle 9i R2 (9.2.x), elle permet de quitter très facilement le mode backup de manière globale pour tous les fichiers de données (mise au statut INACTIVE dans V$BACKUP des fichiers de données) :
alter database end backup;
Pour les versions antérieures à Oracle 9iR2, malheureusement il faut encore lancer la commande begin backup pour chaque tablespace.
alter tablespace <tblspacename> end backup;
SHELL > cat alert<INSTANCE>.log
Tue Aug 4 14:34:02 2009 alter database end backup Tue Aug 4 14:34:02 2009 Completed: alter database end backup
La base de données peut alors être ouverte avec la commande ALTER DATABASE OPEN
alter database open;
Attention, si les fichiers du tablespace temporaire de l'instance Oracle sont en RAM et qu'il s'agit d'un redémarrage de la machine, il faut recréer ces fichiers après la commande ALTER DATABASE OPEN (cf : Mise en RAM du tablespace temporaire d'une instance Oracle »)
| Version | Date | Commentaires |
|---|---|---|
| 1.0 | 08/2009 | Version initiale |
Oracle 9iR2, What's new in SQL reference (ALTER DATABASE END BACKUP) ?