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.
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 deOEMenOEM2. - en spécifiant l’option
RESETLOGSpour réinitialiser les fichiers de redo log de l’instanceOEMD2ORAet ainsi forcer le recovery. - en spécifiant l’option
NOARCHIVELOGcar l’instanceOEMD2ORAn’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'