0

Création d’un Dataguard physique

twitterlinkedinmail

Configuration :
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Oracle 10GR2
PTEST : base primaire
STEST : base standby

Remarque :Toutes les opérations SQL se font connecté en tant que “as sysdba”

1. Configuration des bases en archivelog et force logging

SQL> ALTER DATABASE FORCE LOGGING;
SQL> alter database archivelog ;

2. Créer une sauvegarde de la base primaire

A) Créer les standby controlfile
SQL> alter database create standby controlfile as ‘/u01/app/oracle/TEST/standby1.ctl’;

B) Créer les standby redo log .
SQL> ALTER DATABASE ADD STANDBY LOGFILE ‘/u01/app/oracle/TEST/srl01.log’ SIZE 10M REUSE;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ‘/u01/app/oracle/TEST/srl02.log’ SIZE 10M REUSE;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ‘/u01/app/oracle/TEST/srl03.log’ SIZE 10M REUSE;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ‘/u01/app/oracle/TEST/srl04.log’ SIZE 10M REUSE;

Il est conseillé :

  • de créer un fichier “standby redo log” de plus que les redo log
  • d’avoir une taille des standby redo log >= taille des redo

    log

C) Effectuer une sauvegarde de la base primaire ((il est possible de le faire à chaud par rman)

Arrêter la base primaire

Faire une copie physique dans un répertoire de sauvegarde des types de fichier suivants :
– datafiles
– online redo logs
– standby controlfile
– standby redolog

Redémarrer la base primaire

3. Modification ou création des paramètres d’initialisation des bases primaire et standby

Base ayant le rôle primaire (PTEST) :
log_archive_format=%t_%s_%r.arc
log_archive_dest_2=’service=STEST LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME=STEST’
log_archive_config=’DG_CONFIG=(PTEST,STEST)’
LOG_ARCHIVE_DEST_STATE_2=ENABLE
db_name=TEST
db_unique_name=PTEST
fal_server=STEST
fal_client=PTEST
DB_FILE_NAME_CONVERT=(‘/u01/app/oracle/TESTSTANDBY’,’/u01/app/oracle/TEST’)
LOG_FILE_NAME_CONVERT=(‘/u01/app/oracle/TESTSTANDBY’,’/u01/app/oracle/TEST’)
standby_archive_dest=/u01/app/oracle/flash_recovery_area/STEST/standby_archive
STANDBY_FILE_MANAGEMENT=AUTO

Base ayant le rôle standby (STEST) :
fal_server=PTEST
fal_client=STEST
DB_FILE_NAME_CONVERT=(‘/u01/app/oracle/TEST’,’/u01/app/oracle/TESTSTANDBY’)
LOG_FILE_NAME_CONVERT=(‘/u01/app/oracle/TEST’,’/u01/app/oracle/TESTSTANDBY’)
STANDBY_ARCHIVE_DEST=/u01/app/oracle/flash_recovery_area/STEST/standby_archive
log_archive_format=%t_%s_%r.dbf
STANDBY_FILE_MANAGEMENT=AUTO
log_archive_config=’DG_CONFIG=(PTEST,STEST)’
LOG_ARCHIVE_DEST_2=’service=STEST LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME=PTEST’
LOG_ARCHIVE_DEST_STATE_2=DEFER
CONTROL_FILES=(“/u01/app/oracle/TESTSTANDBY/standby1.ctl”, “/u01/app/oracle/TESTSTANDBY/standby2.ctl”, “/u01/app/oracle/TESTSTANDBY/standby3.ctl”)

4. Configurer le listener, Oracle services names de la base primaire et de la standby

A) Configurer les fichiers $ORACLE_HOME/network/admin/listener.ora pour l’enregistrement statique

listener.ora :

SID_LIST_LISTENER_PRIMARY =
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=TEST)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(SID_NAME=PTEST)
)
)

SID_LIST_LISTENER_STANDBY =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = TEST)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1 )
(SID_NAME = STEST)
)
)

LISTENER_PRIMARY =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = LINUX-ORA10-DATAGUARD-PRIMARY)(PORT = 1521))
)
)

LISTENER_STANDBY =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = LINUX-ORA10-DATAGUARD-PRIMARY)(PORT = 1522))
)
)

B) Configurer les $ORACLE_HOME/network/admin/tnsnames.ora

STEST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = LINUX-ORA10-DATAGUARD-PRIMARY)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =STEST)
)
)

PTEST

=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = LINUX-ORA10-DATAGUARD-PRIMARY)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =PTEST)
)
)

C) Redémarrer les listeners des deux bases.

$ORACLE_HOME/bin/lsnrctl start LISTENER_PRIMARY
$ORACLE_HOME/bin/lsnrctl start LISTENER_STANDBY

5. Copie du fichier de mot de passe ou génération avec $ORACLE_HOME/bin/orapwd

6. Faire un startup mount de la base standby :

SQL> startup mount

7. Démarrer le recovery sur la base standby

A l’aide de la commande suivante :
SQL> alter database recover managed standby database disconnect from session;

  • Dès qu’un archive log est transmis par la base primaire, la base standby commence à effectuer le recovery.
  • L’option “disconnect from session” permet de garder la main sur la session SQL dans laquelle la commande a été exécutée, le process est alors lancé en background.

8. Vérifier le transport des journaux

En forçant la création d’un archive log sur la base primaire :
SQL> alter system archive log current ;
L’archive log est alors transmis vers le répertoire d’archive de la base standby, et cette dernière fait automatiquement un recovery à partir du log transmis.

9. Vérifier que le data Guard fonctionne

en exécutant la requête suivante sur le primary et sur la standby:
SQL> select max(sequence#) from v$log_history;

Remarques :

Dans notre démarche nous adopterons la dénomination suivante:

PTEST : base primaire

STEST : base standby

Toutes les opérations SQL se font connecté en tant que sys as sysdba

SQL> ALTER DATABASE FORCE LOGGING;

SQL> alter database archivelog ;

Créer les standby controlfile

SQL> alter database create standby controlfile as

‘/u01/app/oracle/TEST/standby1.ctl’;

Créer les standby redo log .

SQL> ALTER DATABASE ADD STANDBY LOGFILE

‘/u01/app/oracle/TEST/srl01.log’ SIZE 10M REUSE;

SQL> ALTER DATABASE ADD STANDBY LOGFILE

‘/u01/app/oracle/TEST/srl02.log’ SIZE 10M REUSE;

SQL> ALTER DATABASE ADD STANDBY LOGFILE

‘/u01/app/oracle/TEST/srl03.log’ SIZE 10M REUSE;

SQL> ALTER DATABASE ADD STANDBY LOGFILE

‘/u01/app/oracle/TEST/srl04.log’ SIZE 10M REUSE;

Il est conseillé de créer un fichier stand by redo log de plus que les redo log afin d’éviter un problème en cas de saturation des redo log

Arrêter la base primaire ((il est possible de le faire à chaud par rman)

Faire une copie physique dans un répertoire de sauvegarde des types de fichier suivants :

datafiles

online redo logs

standby controlfile

standby redolog

Redémarrer la base primaire

Base ayant le rôle primaire (PTEST) :

log_archive_format=%t_%s_%r.arc

log_archive_dest_2=’service=STEST LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME=STEST’

log_archive_config=’DG_CONFIG=(PTEST,STEST)’

LOG_ARCHIVE_DEST_STATE_2=ENABLE

dg_broker_start = TRUE

db_name=TEST

db_unique_name=PTEST

### Primary database standby role parameters ###

fal_server=STEST

fal_client=PTEST

DB_FILE_NAME_CONVERT=(‘/u01/app/oracle/TESTSTANDBY’,’/u01/app/oracle/TEST’)

LOG_FILE_NAME_CONVERT=(‘/u01/app/oracle/TESTSTANDBY’,’/u01/app/oracle/TEST’)

standby_archive_dest=/u01/app/oracle/flash_recovery_area/STEST/standby_archive

STANDBY_FILE_MANAGEMENT=AUTO

Base ayant le rôle standby (STEST) :

### Standby database standby role parameters ###

fal_server=PTEST

fal_client=STEST

DB_FILE_NAME_CONVERT=(‘/u01/app/oracle/TEST’,’/u01/app/oracle/TESTSTANDBY’)

LOG_FILE_NAME_CONVERT=(‘/u01/app/oracle/TEST’,’/u01/app/oracle/TESTSTANDBY’)

STANDBY_ARCHIVE_DEST=/u01/app/oracle/flash_recovery_area/STEST/standby_archive

log_archive_format=%t_%s_%r.dbf

STANDBY_FILE_MANAGEMENT=AUTO

log_archive_config=’DG_CONFIG=(PTEST,STEST)’

### Standby database primary role parameters ###

LOG_ARCHIVE_DEST_2=’service=STEST LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME=PTEST’

LOG_ARCHIVE_DEST_STATE_2=DEFER

Configurer les fichiers listener.ora situés sous $ORACLE_HOME/network/admin

Si le port du listener de l’instance n’est pas 1521, la valeur du paramètre LOCAL_LISTENER doit être renseignée.

Listener.ora

SID_LIST_LISTENER_PRIMARY =

(SID_LIST=

(SID_DESC=

(GLOBAL_DBNAME=TEST)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(SID_NAME=PTEST)

)

)

SID_LIST_LISTENER_STANDBY =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = TEST)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1 )

(SID_NAME = STEST)

)

)

LISTENER_PRIMARY =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

(ADDRESS = (PROTOCOL = TCP)(HOST = LINUX-ORA10-DATAGUARD-PRIMARY)(PORT = 1521))

)

)

LISTENER_STANDBY =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC2))

(ADDRESS = (PROTOCOL = TCP)(HOST = LINUX-ORA10-DATAGUARD-PRIMARY)(PORT = 1522))

)

)

Configurer les tnsnames.ora

STEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = LINUX-ORA10-DATAGUARD-PRIMARY)(PORT = 1522))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME =STEST)

)

)

PTEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = LINUX-ORA10-DATAGUARD-PRIMARY)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME =PTEST)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)

Redémarrer les listeners des deux bases.

>Lsnrctl start LISTENER_PRIMARY

>Lsnrctl start LISTENER_STANDBY

SQL> create spfile from pfile=’/u01/app/oracle/admin/PTEST/pfileinitGUARD2.ora’ ;

Faire un startup nomount de la base standby, puis la monter en mode standby:

SQL> startup nomount

SQL> alter database mount standby database ;

§ A l’aide de la commande suivante :

SQL> alter database recover managed standby database disconnect from session;

§ Dès qu’un archive log est transmis par la base primaire, la base

standby commence à effectuer le recovery.

§ L’option “disconnect from session” permet de garder la main sur la session SQL dans laquelle la commande a été exécutée, le process est alors lancé en background.

§ Démarrer le transport des redo logs en forçant la création d’un archive log sur la base primaire :

SQL> alter system archive log current ;

L’archive log est alors transmis vers le répertoire d’archive de la base standby, et cette dernière fait automatiquement un recovery à partir du log transmis.

§ Vérifier que le dataguard fonctionne en exécutant la requête suivante sur le primary et sur la standby:

SQL> select max(sequence#) from v$log_history;

Continuez votre lecture sur le blog :

twitterlinkedinmail

Benjamin VESAN

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.