Monday, September 07, 2009

CREATION D'UNE ACTIVE DATA GUARD
(UNE PROCEDURE COMPACTE)


I - Introduction
Comme il est indiqué dans le titre de cet article, les tests dont nous vous livrons le compte-rendu, ne sont possibles que sur Oracle Database 11g. Nous avons utilisé la release 11.1.0.6.
Ce sont les nombreuses améliorations apportées par Oracle avec Oracle Database 11g qui ont facilité et simplifié la tâche et permis de rendre la procédure (et en particulier le script rman de création de la standby) aussi compacte.

II - Pré-requis
i) Les bases de données de production (primaire) et standby doivent s'exécuter dans la même release d'Oracle Database 11g, Enterprise Edition
ii) L'option Oracle Active Data Guard doit être installée (Elle est payante et pas présente dans la vue v$option)
iii) La base de données primaire doit être en mode archive log.

III - Configuration de tests
BD primaire BD standby
Serveur bund01 bund02
Base de données prod stdby


IV - Les étapes

Etape 1 : Activer l'option "force logging" sur la base de données primaire
SQL> alter database force logging ;
Database altered.

Etape 2 : S'assurer que la base de données primaire utilise un fichier spfile
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA/prod/spfileprod.ora

Etape 3 : Créer des standby redo logs sur la base de données primaire avec des numéros de groupes dans la continuité du dernier numéro de groupe des redo logs
SQL> col member for a40
SQL> select GROUP#, MEMBER from v$logfile ;
GROUP# MEMBER
---------- ------------------------------------------------------------
3 +DATA/prod/onlinelog/group_3.266.696684409
3 +DATA/prod/onlinelog/group_3.267.696684415
2 +DATA/prod/onlinelog/group_2.264.696684397
2 +DATA/prod/onlinelog/group_2.265.696684403
1 +DATA/prod/onlinelog/group_1.262.696684385
1 +DATA/prod/onlinelog/group_1.263.696684391

SQL> alter database add standby logfile group 4 ('+DATA/prod/sby_log01_01.rdo','+DATA/sby_log01_02.rdo') size 50M;
Database altered.

SQL> alter database add standby logfile group 5 ('+DATA/prod/sby_log02_01.rdo','+DATA/sby_log02_02.rdo') size 50M;
Database altered.

SQL> alter database add standby logfile group 6 ('+DATA/prod/sby_log03_01.rdo','+DATA/sby_log03_02.rdo') size 50M;
Database altered.

Attention : il est possible de placer les standby redo logs directement dans le répertoire +DATA. Cependant cela entraîne des conflits comme le montrent les messages suivants que nous avons expérimentés :
RMAN-05536: auxiliary logfile name +DATA/sby_log01_01.rdo conflicts with a file used by the target database
RMAN-05536: auxiliary logfile name +DATA/sby_log01_02.rdo conflicts with a file used by the target database
RMAN-05536: auxiliary logfile name +DATA/sby_log02_01.rdo conflicts with a file used by the target database
RMAN-05536: auxiliary logfile name +DATA/sby_log02_02.rdo conflicts with a file used by the target database
RMAN-05536: auxiliary logfile name +DATA/sby_log03_01.rdo conflicts with a file used by the target database
RMAN-05536: auxiliary logfile name +DATA/sby_log03_02.rdo conflicts with a file used by the target database


Etape 4 : Mettre à jour le fichier tnsnames du serveur primaire
Il s'agit d'ajouter les lignes suivantes :
STDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = bund02 )(PORT = 1521))
(CONNECT_DATA =
(SID = stdby)
)
)

Etape 5 : Copier le fichier de mots de passe de la base de données primaire dans le répertoire $ORACLE_HOME/dbs de la standby en lui donnant le nom orapwstdby.
[oracle@bund01 dbs]$ scp -P22 orapwprod oracle@bund02:/u01/app/oracle/product/11.1.0/db_1/dbs/orapwstdby
The authenticity of host 'bund02 (192.168.1.130)' can't be established.
RSA key fingerprint is a3:55:7e:58:c4:66:9d:2f:77:f3:20:2b:c9:75:f5:c7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'bund02,192.168.1.130' (RSA) to the list of known hosts.
oracle@bund02's password:
orapwprod
[oracle@bund01 dbs]$

Etape 6 : Mettre à jour les fichiers listener.ora et tnsnames.ora du serveur standby
Il faut leur ajouter les lignes suivantes.
Listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(global_dbname = stdby)
(oracle_home = /u01/app/oracle/product/11.1.0/db_1)
(sid_name = stdby)
)
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/11.1.0/db_1)
(PROGRAM = extproc)
)
)

tnsnames.ora
STDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = bund02.knmc.local )(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = stdby)
)
)

PROD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = bund01.knmc.local )(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = prod)
)
)

Etape 7 : Créer le fichier initstdby.ora sur le serveur standby (bund02)
Le fichier doit être stocké dans le répertoire $ORACLE_HOME/dbs et ne contient qu'une seule ligne avec le paramètre db_name. Il faut bien noter que le db_name de la standby est le même que pour la primaire.
db_name=prod

Etape 8 : Sur la standby, créer les répertoires et sous-répertoires devant contenir les fichiers de trace d'audit
Ces créations doivent être faites dans le répertoire $ORACLE_BASE/admin. Les répertoires et sous-répertoires sont : $ORACLE_BASE/admin/stdby, $ORACLE_BASE/admin/stdby/adump

[oracle@bund02 admin]$ mkdir –p stdby/adump

Etape 9 : Sur la primaire, créer le fichier rman de création de la standby.
[oracle@bund01 db_1]$ cat create_stdby.rman
connect target sys/oracleMdp@prod
connect auxiliary sys/ oracleMdp @stdby
run {
allocate channel p1 type disk ;
allocate auxiliary channel s1 type disk ;
duplicate target database for standby from active database
spfile
parameter_value_convert 'prod','stdby'
set db_unique_name='stdby'
set db_file_name_convert='/prod/','/stdby/'
set log_file_name_convert='/prod/','/stdby/'
set control_files='+DATA/stdby/control01.ctl','+DATA/stdby/control02.ctl'
set log_archive_max_processes='5'
set fal_client='stdby'
set fal_server='prod'
set standby_file_management='AUTO'
set log_archive_config='dg_config=(prod,stdby)'
set log_archive_dest_2='service=prod lgwr async valid_for=(online_logfiles, primary_role) db_unique_name=stdby'
set log_archive_dest_state_2='enable'
set log_archive_format='stdby_%t_%s_%r.arc'
;
sql channel p1 "alter system set log_archive_config=' 'dg_config=(prod,stdby' '";
sql channel p1 "alter system set log_archive_dest_2=' 'service=stdby lgwr async valid_for=(online_logfiles, primary_role) db_unique_name=prod' '";
sql channel p1 "alter system set log_archive_max_processes=5";
sql channel p1 "alter system set fal_client=''prod' '" ;
sql channel p1 "alter system set fal_server=''stdby' '";
sql channel p1 "alter system set standby_file_management=AUTO";
sql channel p1 "alter system set log_archive_dest_state_2=enable"
sql channel p1 "alter system archive log current" ;
sql channel s1 "alter database recover managed standby database using current logfile disconnect" ;
}


Etape 10 : Sur le serveur standby, mettre à jour les variables d'environnements et démarrer la standby avec l'option nomount
[oracle@bund02 db_1]$ export ORACLE_SID=stdby
[oracle@bund02 db_1]$ export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
[oracle@bund02 db_1]$ sqlplus / as sysdba
SQL> startup nomount

Etape 11 : Sur le serveur primaire, exécuter le script rman
[oracle@bund01 db_1]$ rman cmdfile=create_stdby.rman log=create_stdby.log

Notes
i) Le script de création effectue les actions suivantes :
- Arrêter la base standby et la re-démarrer avec le fichier spfile nouvellement créé
- Créer un fichier standby controlfile sur le serveur primaire et la copier sur le serveur standby
- Créer une base de données clone sur le serveur standby à l'aide d'Oracle RMAN cloning
- Convertir la base de données clonée en base de données standby physique.

ii) Le processus de creation de la standby physique peut prendre un certain temps, fonction de la taille de la base de données primaire.
iii) le fichier de log se termine par un message d'erreur que l'on peut ignorer
sql statement: alter system archive log current

released channel: p1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql command at 09/06/2009 03:11:04
RMAN-06033: channel s1 not allocated


Recovery Manager complete.

iv) Pour une raison que nous n'avons pas pu déterminer, la standby n'est pas mise en mode "récupération managée".

Etape 12 : Paramétrer Active Data Guard sur le serveur standby
Voir notre précédent post.

Et voilà la simplification que les nombreuses améliorations apportées par Oracle 11g dans Oracle Data Guard ont rendu possible. Mais il y a une autre simplification tout aussi importante. Elle concerne l'utilisation de Dataguard pour le rafraîchissement des environnements de pré-production, de tests et de développement. Cette simplification est portée par une nouvelle fonctionnalité qui porte le nom de snapshot standby. Nous traiterons ce sujet dans notre prochain post.
A bientôt donc …

Labels: , ,

0 Comments:

Post a Comment

<< Home