You are on page 1of 25

Oracle 11g - Dataguard

!
Ecole INSTA Paris
! http://www.insta.fr/site/

!
Document et projet ralis le 29/07/2011 par
! Candy Scordia
Dataguard Oracle 11g R2
Kubuntu 11.04 64 bits
!
Tlchargement de Oracle 11g R2 pour linux
! http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
!
Installation de la base de donnes
! http://blog.arkzoyd.com/2011/05/installer-oracle-112-sur-ubuntu-1104.html
!
Cration d'une base de donnes l'aide de l'outil DBCA
! Cette commande se lance dans un terminal
! root$ xhost +
!
root$ su oracle (connexion au compte oracle)
! oracle$ dbca
!
A la douzime tape, demander de gnrer un script et non de crer la base
! Se placer dans le rpertoire o a t gnr le script et excuter
! oracle$ cd /u01/app/oracle/admin/nombase/scripts
!
oracle$ ./nombase.sh
!
Il vous est demand de taper les mots de passe pour les comptes Oracle principaux
! Laisser tourner le script jusqu' la fin
Dataguard Oracle 11g R2
Kubuntu 11.04 64 bits
! Variables d'environnements ( /home/oracle/.bash_profile )
! TMP=/tmp; export TMP

!
TMPDIR=$TMP; export TMPDIR
!
ORACLE_HOSTNAME=scordiac-SATELLITE-U500; export ORACLE_HOSTNAME
!
ORACLE_UNQNAME=INSTA; export ORACLE_UNQNAME
!
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
!
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
!
ORACLE_SID=INSTA; export ORACLE_SID
!
ORACLE_DBS=$ORACLE_HOME/dbs; export ORACLE_DBS
!
ORACLE_TRACE=$ORACLE_BASE/diag/rdbms; export ORACLE_TRACE
!
ORACLE_DATA=$ORACLE_BASE/oradata; export ORACLE_DATA
!
DISPLAY=:0; export DISPLAY

!
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN

!
NLS_LANG=FRENCH_FRANCE.UTF8; export NLS_LANG
!
PATH=/usr/sbin:$PATH; export PATH
!
PATH=$ORACLE_HOME/bin:$PATH; export PATH
!
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
!
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
Cration d'une base de secours physique
sur le mme ordinateur

SOMMAIRE

!
=> ConfigurationdeOracleNet(servicesrseaux)
!
Listener.ora
! Tnsnames.ora

!
Configuration
!
De la base de donnes principale (primaire)
! De la base de donnes de secours (standby)

!
Cration de la base de secours partir de la base principale
Oracle Net

Base de
Listener donnes
1

client
serveur
tnsnames.ora

Base de
donnes
2

Le client demande de se connecter une base de donnes. Oracle vrifie que la chane
de connexion est situe dans le fichier tnsnames.ora.

Le fichier tnsnames.ora dfinit les bases de donnes autorises accder par l'utilisateur.

Le service listener coute les demandes et renvoie la requte du client sur l'instance
autorise demane par le client.

Le listener cre un processus serveur qui va faire la relation entre la base de donnes et le
client.
Configuration du listener
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = INSTA)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
) Dfinitions des
(SID_DESC = instances situes sur
(SID_NAME = INSTADG) le serveur
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
)
)
Configuration rseau
LISTENER =
(DESCRIPTION_LIST = Utilisation du protocole
(DESCRIPTION = TCP
(ADDRESS =
(PROTOCOL = TCP) Nom de la machine ou
(HOST = scordiac-SATELLITE-U500) adresse IP
(PORT = 1521)
) Port utilis
)
)
Configuration du tnsname
INSTAPRI =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP) Configuration du service
(HOST = scordiac-SATELLITE-U500) Correspondant la base primaire
(PORT = 1521) INSTAPRI = nom du service
) SERVICE_NAME = nom de l'instance
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = INSTA)
)
)

INSTADGLOC =
(DESCRIPTION = Configuration du service
(ADDRESS =
(PROTOCOL = TCP)
Correspondant la base de secours
(HOST = scordiac-SATELLITE-U500) INSTADGLOC = nom du service
(PORT = 1521) SERVICE_NAME = nom de l'instance
)
(CONNECT_DATA = (SERVER =
DEDICATED)
(SERVICE_NAME = INSTADG)
)
)
Dmarrage du listener
oracle@scordiac-SATELLITE-U500:~$ lsnrctl

LSNRCTL> START (commande pour dmarrer le listener, STOP pour l'arrter et RELOAD pour le recharger)

Lancement de /u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr: Veuillez patienter...


TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Le fichier de paramtres systme est /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Messages de journalisation crits dans /u01/app/oracle/diag/tnslsnr/scordiac-SATELLITE-U500/listener/alert/log.xml

Ecoute sur : (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=scordiac-SATELLITE-U500)(PORT=1521)))


Connexion (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=scordiac-SATELLITE-U500)(PORT=1521)))
STATUT du PROCESSUS D'ECOUTE
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Date de dpart 28-JUIL.-2011 10:08:10
Dure d'activit 0 jours 0 heures 0 min. 0 sec
Niveau de trace off
Scurit ON: Local OS Authentication
SNMP OFF

Fichier de paramtres du processus d'coute /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora


Fichier journal du processus d'coute /u01/app/oracle/diag/tnslsnr/scordiac-SATELLITE-U500/listener/alert/log.xml
Rcapitulatif d'coute des points d'extrmit...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=scordiac-SATELLITE-U500)(PORT=1521)))
Rcapitulatif services...

Le service "INSTA" comporte 1 instance(s).


L'instance "INSTA", statut UNKNOWN, comporte 1 gestionnaire(s) pour ce service...

Le service "INSTADG" comporte 1 instance(s).


L'instance "INSTADG", statut UNKNOWN, comporte 1 gestionnaire(s) pour ce service...

La commande a russi
Cration d'une base de secours physique
sur le mme ordinateur

SOMMAIRE

!
Configuration de Oracle Net (services rseaux)
!
Listener.ora
! Tnsnames.ora

!
=> Configuration
!
De la base de donnes principale (primaire)
! De la base de donnes de secours (standby)

!
Cration de la base de secours partir de la base principale
Configuration de la base Primaire
Dans le rpertoire dbs situ dans $ORACLE_HOME :
- copier le fichier initINSTATemp.ora (situ dans le rpertoire scripts)

- le renommer en initINSTA.ora

- initialiser des paramtres en les ajoutant dans ce fichier :


control_files='/u01/app/oracle/oradata/INSTA/control01.ctl','/u01/app/oracle/flash_recovery_area/INSTA/control02.ctl'
db_unique_name = INSTA
instance_name='INSTA'

FAL_Client='INSTAPRI'
FAL_Server='INSTADGLOC'

Log_archive_format='INSTA_%t_%s_%r.arc'
Log_archive_config='DG_CONFIG=(INSTA,INSTADG)'

Log_archive_dest_1='Location=/u01/app/oracle/oradata/INSTA/backup VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
db_unique_name=INSTA'

Log_archive_dest_2='Service=INSTADGLOC LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)


db_unique_name=INSTADG delay=1'

Log_archive_dest_state_1='ENABLE'
Log_archive_dest_state_2='ENABLE'

log_file_name_convert='/u01/app/oracle/oradara/INSTADG','/u01/app/oracle/oradata/INSTA'
db_file_name_convert='/u01/app/oracle/oradara/INSTADG','/u01/app/oracle/oradata/INSTA'

remote_login_passwordfile='EXCLUSIVE'
Standby_File_Management='auto'
Configuration de la base Standby

!
dupliquer le fichier initINSTA.ora au mme endroit en l'appelant initINSTADG.ora

!
remplacer le terme INSTA par INSTADG et inversement

!
inverser les termes INSTAPRI et INSTADGLOC qui correspondent aux services
(tnsnames.ora)

!
le rpertoire /u01/app/oracle/admin contient un sous rpertoire INSTA
! dupliquer cette arborescence en INSTADG sans les fichiers
Cration d'une base de secours physique
sur le mme ordinateur

SOMMAIRE

!
Configuration de Oracle Net (services rseaux)
!
Listener.ora
! Tnsnames.ora

!
Configuration
!
De la base de donnes principale (primaire)
! De la base de donnes de secours (standby)

!
=> Crationdelabasedesecourspartirdelabaseprincipale
Cration de la base Standby (1)
!
Dmarrer l'instance de la base primaire : $ORACLE_SID=INSTA
!
SQLPLUS /nolog
! SQL> connect / as sysdba
! SQL> STARTUP nomount ;
!
Monter la base de donnes
!
SQL> ALTER DATABASE MOUNT ;
!
Mettre la base de donnes en FORCE LOGGING et ARCHIVELOG
!
SQL> ALTER DATABASE FORCE LOGGING ;
! Forcer la journalisation dans les fichiers redo logs
!
SQL> ALTER DATABASE ARCHIVELOG ;
! Sert activer le mode archive
!
Ouvrir la base de donnes primaire
!
SQL> ALTER DATABASE OPEN ;
!
Archiver le redo log courant et activer le suivant
!
SQL> ALTER SYSTEM SWITCH LOGFILE ;
!
Cration du fichier de contrle pour la base standby depuis la primaire
!
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS
'$ORACLE_BASE/oradata/INSTADG/controldg01.ctl' ;
Cration de la base Standby (2)
!
Arrter la base primaire
!
SQL> SHUTDOWN IMMEDIATE
!
Copier froid les fichiers de donnes (.dbf) et les redos logs (.log) de la base primaire
!
/u01/app/oracle/oradata/INSTA
dans le rpertoire ( crer) de la base secondaire
!
/u01/app/oracle/oradara/INSTADG
!
Copier le fichier de contrle frachement cr dans le rpertoire ci-dessus (si celui-ci
t cr un autre endroit) et le dupliquer en controldg02.ctl dans le rpertoire :
!
/u01/app/oracle/flash_recovery_area/INSTADG
ce rpertoire est une duplication du rpertoire
!
/u01/app/oracle/flash_recovery_area/INSTA
avec suppression du fichier de contrle control02.ctl
!
Retourner sur sqlplus et crer le fichier d'initialisation automatique spfile partir du
fichier pfile (initINSTA.ora)
!
SQL> CREATE SPFILE FROM PFILE;
! /!\ l'instance ne doit pas tre dmarre
! De mme pour le spfileINSTADG.ora avec le pfile initINSTADG.ora
Cration de la base Standby (3)
!
SQL> CREATE SPFILE='$ORACLE_HOME/dbs/spfileINSTADG.ora'
FROM PFILE='$ORACLE_HOME/dbs/initINSTADG.ora' ;
! Ouvrir un troisime terminal (la premire tant pour le dmarrage du listener et la
deuxime pour l'ouverture de la base primaire)
! Modifier les variables d'environnement pour se placer sur l'instance de la base de
secours (standby)
!
Export ORACLE_SID=INSTADG
! Export ORACLE_UNQNAME=INSTADG
!
Se connecter sqlplus
!
Sqlplus /nolog
! SQL> connect / as sysdba
!
Dmarrer l'instance
!
SQL> STARTUP NOMOUNT ;
!
Monter la base en standby
!
SQL> ALTER DATABASE MOUNT STANDBY DATABASE
Cration de la base Standby (4)
! Renommer les fichiers de donnes et les redo logs pour qu'ils pointent vers le
rpertoire INSTADG et non INSTA (dans le fichier de contrle)
Placer les commandes ci-dessous dans un fichier .sql et l'excuter dans sqlplus via la
commande '@' ou 'start'
!
SQL> @ /home/oracle/renamefile.sql ;
! ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/INSTA/redo02.log' TO
'/u01/app/oracle/oradata/INSTADG/redo02.log';
! ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/INSTA/system01.dbf' TO
'/u01/app/oracle/oradata/INSTADG/system01.dbf';
! ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/INSTA/undotbs01.dbf' TO
'/u01/app/oracle/oradata/INSTADG/undotbs01.dbf';
! ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/INSTA/redo01.log' TO
'/u01/app/oracle/oradata/INSTADG/redo01.log';
! ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/INSTA/redo03.log' TO
'/u01/app/oracle/oradata/INSTADG/redo03.log';
! ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/INSTA/sysaux01.dbf' TO
'/u01/app/oracle/oradata/INSTADG/sysaux01.dbf';
! ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/INSTA/temp01.dbf' TO
'/u01/app/oracle/oradata/INSTADG/temp01.dbf';
! ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/INSTA/users01.dbf' TO
'/u01/app/oracle/oradata/INSTADG/users01.dbf'
Cration de la base Standby (5)
!
Appliquer les changements effectus dans la base primaire sur la base de secours
!
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT
FROM SESSION ;
!
Vrifier, dans le fichier d'alerte de la base de secours (standby), si la commande ci-
dessus s'est droule avec succs
!
/u01/app/oracle/diag/rdbms/instadg/INSTADG/trace/alter_INSTADG.log
!
Entre temps on peut crer une table dans la base primaire et vrifier que le recover a
termin d'appliquer les changements
! Ensuite il faut annuler (arrter) la rcupration des donnes via la commande
!
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL ;
!
/!\ attention, ne pas utiliser le terme FINISH au lieu de CANCEL, c'est du failover et a
signifie que la base standby est prte tre monte en tant que base primaire
!
Ouvrir la base en lecture seule
!
SQL> ALTER DATABASE OPEN READ ONLY ;
!
Vrifier que la table cre dans la base primaire se situe bien dans la base secondaire
!
SQL> DESC nouvelleTable
Effecuter un switchover

SOMMAIRE

!
=> Dfinitionduswitchover

!
Etapes de ralisation du switchover
Le switchover
!
Action qui consiste transformer la base de donnes primaire en base de
secours (standby) et inversement

!
Opration planifie et gnralement utilise lors d'une maintenance serveur

!
Attention, il est important de passer la base primaire en standby avant de
passer la standby en primaire

!
Attention ne pas utiliser de procdures failover en faisant du switchover
! ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH ;
!
ALTER DATABASE ACTIVATE STANDBY DATABASE ;
Effecuter un switchover

SOMMAIRE

!
Dfinition du switchover

!
=> Etapes de ralisation du switchover
Etape 1 : Rcuprer les donnes sur la base
de secours

!
Nous partons du principe que les bases de donnes (primaires et standby)
sont ouvertes

!
Il faut obligatoirement rcuprer les changements effectus sur la base
primaire et les appliquer la base de secours :
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Base de donnes modifie.

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;


Base de donnes modifie.

!
Une fois cette opration termine, on peut faire passer la base de donnes
primaire en base de secours
Etape 2 : Passage de la base primaire en base
de secours
! On vrifie d'abord que la base primaire est prte passer en base de secours
SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;
Le switchover_status est TO_STANDBY.
!
Si le statut est TO_STANDBY ou SESSION ACTIVE, on dit la base qu'elle peut
passer en STANDBY et on arrte la base
SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
Base de donnes modifie.
SQL>SHUTDOWN IMMEDIATE
Instance ORACLE arrte.
!
Ensuite on monte la base en STANDBY
SQL>STARTUP NOMOUNT
Instance ORACLE lance.
SQL>ALTER DATABASE MOUNT STANDBY DATABASE;
Base de donnes modifie.

!
Puis on change un parametre pour pouvoir passer la base de secours en base
primaire
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;
Systme modifi.
Etape 2 : Passage de la base de secours en
base primaire
! On vrifie d'abord que la base de secours est prte passer en primaire
SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;
Le SWITCHOVER_STATUS est SWITCHOVER PENDING.
!
Si le statut est correct (SWITCHOVER PENDIND) on peut la basculer en primaire et
arrter la base
SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
Base de donnes modifie.

SQL>SHUTDOWN IMMEDIATE
Instance ORACLE arrte.
!
Ensuite on l'ouvre en primaire (normalement) et l'on remodifie le paramtre
chang auparavant
SQL>STARTUP
Instance ORACLE lance.

SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;


Systme modifi.
Etape 2 : Vrification du switchover

!
On peut vrifier dans un premier temps le rle de la base de donnes dans les
deux bases
SQL>SELECT DATABASE_ROLE FROM V$DATABASE;
Le DATABASE_ROLE est PRIMARY.

SQL>SELECT DATABASE_ROLE FROM V$DATABASE;


Le DATABASE_ROLE est PHYSICAL STANDBY.

On peut ensuite crer une table dans la nouvelle base de donnes primaire
Et faire un recover dans la nouvelle base de secours pour rcuprer les
changements.
Si la base de secours voit la nouvelle table, cel signifie que le switchover a
fonctionn.
Fin

Nous vous remercions d'avoir pris le temps de lire ce


document qui explique les diffrentes tapes de cration
de la dataguard.

Vous pouvez nous contacter cette adresse mail :

- candy.scordia@gmail.com

You might also like