Oracle 8i - Copie d’une base de données à partir d’une sauvegarde à chaud en mode archivelog

Logo

Introduction

Dans cet article, l’instance OEMD2ORA (base de données OEM2) est rafraîchie à partir d’une sauvegarde à chaud de l’instance OEMD1ORA (base de données OEM). Cette méthodologie permet d’éviter le processus de rafraîchissement par export / import qui peut être long et coûteux.

La méthodologie mise en œuvre dans cet article peut très bien être mise en quotidien pour rafraîchir des bases de développement à partir de bases de données de production.

Clônage d’une instance en mode archivelog

L’instance de destination OEMD2ORA est en mode NOARCHIVELOG.

Préparation du rafraîchissement de OEMD2ORA

Préparation de la commande create controlfile pour l’instance OEMD2ORA

Pour rafraîchir OEMD2ORA à partir des fichiers de données sauvegardés de OEMD1ORA, préparer une commande CREATE CONTROLFILE pour forcer le changement du nom de la base de données OEM en OEM2 et pour forcer également l’option RESETLOGS.

Pour cela, générer la commande CREATE CONTROLFILE de l’instance OEMD1ORA avec la commande ALTER DATABASE BACKUP CONTROLFILE TO TRACE.

OEMD1ORA> ALTER DATABASE BACKUP CONTROLFILE TO TRACE ;

Avec cette commande, un fichier de trace est généré dans le répertoire de trace udump ( pour retrouver le répertoire de trace : select name, value from v$parameter where name='udump' ).

Dans le contexte de notre cas pratique, un fichier ORA02116.TRC a été généré dans le répertoire /Software/oracle/Instances/OEMD1ORA/udump. Dans ce fichier n’extraire que la commande CREATE CONTROLFILE :

CREATE CONTROLFILE REUSE DATABASE "OEM" NORESETLOGS ARCHIVELOG
    MAXLOGFILES 32
    MAXLOGMEMBERS 4
    MAXDATAFILES 254
    MAXINSTANCES 1
    MAXLOGHISTORY 453
LOGFILE
  GROUP 1 (
       '/cgcdb/oracle/OEMD1ORA/redo1_01.log',
       '/cgcdb/oracle/OEMD1ORA/redo1_02.log')   SIZE 1M,
  GROUP 2 (
       '/cgcdb/oracle/OEMD1ORA/redo2_01.log',
       '/cgcdb/oracle/OEMD1ORA/redo2_02.log')   SIZE 1M,
  GROUP 3 (
       '/cgcdb/oracle/OEMD1ORA/redo3_01.log',
       '/cgcdb/oracle/OEMD1ORA/redo3_02.log')   SIZE 1M
DATAFILE
  '/cgcdb/oracle/OEMD1ORA/SYSTEM_01.dbf',
  '/cgcdb/oracle/OEMD1ORA/RBS_01.dbf',
  '/cgcdb/oracle/OEMD1ORA/USERS_01.dbf',
  '/cgcdb/oracle/OEMD1ORA/TEMP_01.dbf',
  '/cgcdb/oracle/OEMD1ORA/USERS_02.dbf',
  '/cgcdb/oracle/OEMD1ORA/INDX_01.dbf'
CHARACTER SET WE8ISO8859P1;

À partir de la commande CREATE CONTROLFILE générée pour l’instance OEMD1ORA, la commande CREATE CONTROLFILE est créée pour l’instance OEMD2ORA :

  • en spécifiant les répertoires de destination des fichiers de données
  • en spécifiant l’option SET DATABASE "OEM2" pour forcer le changement du nom de la base de données de OEM en OEM2.
  • en spécifiant l’option RESETLOGS pour réinitialiser les fichiers de redo log de l’instance OEMD2ORA et ainsi forcer le recovery.
  • en spécifiant l’option NOARCHIVELOG car l’instance OEMD2ORA n’est pas en mode archive log.
CREATE CONTROLFILE SET DATABASE "OEM2" REUSE RESETLOGS NOARCHIVELOG
    MAXLOGFILES 32
    MAXLOGMEMBERS 4
    MAXDATAFILES 254
    MAXINSTANCES 1
    MAXLOGHISTORY 453
LOGFILE
 GROUP 1 (
   '/cgcdb/oracle/OEMD2ORA/redo1_01.log',
   '/cgcdb/oracle/OEMD2ORA/redo1_02.log' ) SIZE 1M,
 GROUP 2 (
   '/cgcdb/oracle/OEMD2ORA/redo2_01.log',
   '/cgcdb/oracle/OEMD2ORA/redo2_02.log' ) SIZE 1M,
  GROUP 3 (
   '/cgcdb/oracle/OEMD2ORA/redo3_01.log',
   '/cgcdb/oracle/OEMD2ORA/redo3_02.log' ) SIZE 1M
DATAFILE
  '/cgcdb/oracle/OEMD2ORA/SYSTEM_01.dbf',
  '/cgcdb/oracle/OEMD2ORA/RBS_01.dbf',
  '/cgcdb/oracle/OEMD2ORA/USERS_01.dbf',
  '/cgcdb/oracle/OEMD2ORA/TEMP_01.dbf',
  '/cgcdb/oracle/OEMD2ORA/USERS_02.dbf',
  '/cgcdb/oracle/OEMD2ORA/INDX_01.dbf'
CHARACTER SET WE8ISO8859P1 ;

La commande CREATE CONTROLFILE de l’instance OEMD2ORA est sauvée dans le fichier /Software/oracle/Instances/OEMD2ORA/refresh/controlfile.sql.

Paramètre LOG_ARCHIVE_FORMAT de l’instance OEMD2ORA

Point important, lors du recovery après le rafraîchissement de OEMD2ORA par les fichiers physiques de OEMD1ORA, il est impératif que le paramètre d’initialisation LOG_ARCHIVE_FORMAT soit le même pour les instances OEMD1ORA et OEMD2ORA.

Pour récupérer le paramètre LOG_ARCHIVE_FORMAT de l’instance OEMD1ORA :

select value from v$parameter where name='log_archive_format'

ou bien à partir du fichier d’initialisation initOEMD1ORA.ora de l’instance OEMD1ORA :

initOEMD1ORA.ora
# initOEMD1ORA
log_archive_format = T%t_S%s.arc

Dans ce cas, dans le fichier d’initialisation initOEMD2ORA.ora de l’instance OEMD2ORA, appliquer la même valeur pour le paramètre log_archive_format :

initOEMD2ORA.ora
# initOEMD2ORA
log_archive_format = T%t_S%s.arc

Paramètre LOG_ARCHIVE_DEST de l’instance OEMD2ORA

Même si l’instance OEMD2ORA est en mode non archive log, le paramètre LOG_ARCHIVE_DEST doit être renseigné pour le recovery. C’est dans le répertoire spécifié par le paramètre LOG_ARCHIVE_DEST dans le fichier d’initialisation de l’instance OEMD2ORA que seront copiés les archives des redos logs sauvegardés de l’instance OEMD1ORA pour le recovery.

initOEMD2ORA.ora
# initOEMD2ORA
log_archive_dest = /cgcdb/oracle/OEMD2ORA/archivelog

Rafraîchissement de OEMD2ORA

Plusieurs étapes sont nécessaires pour le rafraîchissement de OEMD2ORA :

Étape 1 : arrêt de l’instance OEMD2ORA

sqlplus "/ as sysdba"

shutdown immediate;

Étape 2 : les fichiers physiques de données sauvegardés de l’instance OEMD1ORA sont copiés dans l’arborescence de l’instance OEMD2ORA

Copie des fichiers de données :

cp -f /cgcdb/oracle/OEMD1ORA/export/SYSTEM_01.dbf      /cgcdb/oracle/OEMD2ORA
cp -f /cgcdb/oracle/OEMD1ORA/export/RBS_01.dbf         /cgcdb/oracle/OEMD2ORA
cp -f /cgcdb/oracle/OEMD1ORA/export/TEMP_01.dbf        /cgcdb/oracle/OEMD2ORA
cp -f /cgcdb/oracle/OEMD1ORA/export/USERS_01.dbf       /cgcdb/oracle/OEMD2ORA
cp -f /cgcdb/oracle/OEMD1ORA/export/USERS_02.dbf       /cgcdb/oracle/OEMD2ORA
cp -f /cgcdb/oracle/OEMD1ORA/export/INDX_01.dbf        /cgcdb/oracle/OEMD2ORA

Copie des archives de redo log sauvegardés de l’instance OEMD1ORA :

cp -f /cgcdb/oracle/OEMD1ORA/export/*.ARC /cgcdb/oracle/OEMD2ORA/archivelog

Étape 3 : Lancer l’instance OEMD2ORA sans monter la base de données et lancer la commande CREATE CONTROLFILE sauvée dans le fichier /Software/oracle/Instances/OEMD2ORA/refresh/controlfile.sql.

sqlplus "/ as sysdba"

startup nomount;

@/Software/oracle/Instances/OEMD2ORA/refresh/controlfile.sql;

Étape 4 : se mettre en mode autorecovery et déclencher le recovery avec la commande recover database using backup controlfile until cancel

set autorecovery on;

recover database using backup controlfile until cancel;

À ce stade, la base de données OEM2 est montée mais non ouverte.

Le mode autorecovery permet d’éviter une interaction avec l’utilisateur et indique à Oracle de rechercher automatiquement les fichiers archivés de redo log de l’instance OEMD1ORA dans le répertoire spécifié par le LOG_ARCHIVE_DEST de l’instance OEMD2ORA.

ORA-00279: change 764326 generated at 02/11/2005 15:01:13 needed for thread 1
ORA-00289: suggestion : /cgcdb/oracle/OEMD2ORA/archivelog/T1_S1512.arc
ORA-00280: change 764326 for thread 1 is in sequence #1512

ORA-00279: change 764336 generated at 02/11/2005 15:31:56 needed for thread 1
ORA-00289: suggestion : /cgcdb/oracle/OEMD2ORA/archivelog/T1_S1513.arc
ORA-00280: change 764336 for thread 1 is in sequence #1513
ORA-00278: log file '/cgcdb/oracle/OEMD2ORA/archivelog/T1_S1512.arc' no
longer needed for this recovery

ORA-00308: cannot open archived log '/cgcdb/oracle/OEMD2ORA/archivelog/T1_S1513.arc'
ORA-27041: unable to open file
OSD-04002: unable to open file

Étape 5 : étape ultime, la base de données est ouverte avec l’option RESETLOGS.

alter database open resetlogs;

Le rafraîchissement est ainsi terminé.

Cas pratique d’un rafraîchissement en échec par absence d’une archive d’un fichier de redo log

Dans ce cas pratique, le fichier archive T1_S1512.arc est absent et empêche le recovery. Un warning ORA-01547 est alors affiché.

sqlplus "/ as sysdba"

startup nomount;

@/Software/oracle/Instances/OEMD2ORA/refresh/controlfile.sql;

set autorecovery on;

recover database using backup controlfile until cancel;
ORA-00279: change 764326 generated at 02/11/2005 15:01:13 needed for
thread 1
ORA-00289: suggestion : /cgcdb/oracle/OEMD2ORA/archivelog/T1_S1512.arc
ORA-00280: change 764326 for thread 1 is in sequence #1512

ORA-00308: cannot open archived log '/cgcdb/oracle/OEMD2ORA/archivelog/T1_S1512.arc'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) Le fichier spicifii est introuvable.

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01195: online backup of file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/cgcdb/oracle/OEMD2ORA/SYSTEM_01.dbf'