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 deOEM
enOEM2
. - en spécifiant l’option
RESETLOGS
pour réinitialiser les fichiers de redo log de l’instanceOEMD2ORA
et ainsi forcer le recovery. - en spécifiant l’option
NOARCHIVELOG
car l’instanceOEMD2ORA
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'