L'erreur ORA-01113 et les sauvegardes à chaud, alter database end backup (nouveauté 9iR2)


1- Introduction

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.

2- Arrêt propre d'une instance (shutdown immediate) pendant une sauvegarde à chaud

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

3- Arrêt violent d'une instance (shutdown abort) pendant une sauvegarde à chaud

3-1- Cas pratique : shutdown abort sur une instance en cours de sauvegarde à chaud

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

3-2- ALTER DATABASE END BACKUP (9i R2)

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 end 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 »)


Annexe

Historique

Version Date Commentaires
1.0 08/2009 Version initiale

Liens

Oracle 9iR2, What's new in SQL reference (ALTER DATABASE END BACKUP) ?