HA niveau 3 - Standby DataGuard database sur 11g Enterprise Edition
La création d'un base Standby en Enterprise Edition est à peu près identique à celle sur une base Standard Edition, à ceci prêt que c'est une option payante... Et qu'on peut activer la réplication automatique, contrairement à la version gratuite SE.
Contexte :
Primary database :
Host: ocm1.odlabs.net
DB_NAME = PRITST
DB_UNIQUE_NAME=PRITST
Standby database :
Host: ocm2.odlabs.net
DB_NAME = PRITST
DB_UNIQUE_NAME = STDBYTST
Préparation de la réplication
Préparation de la base primaire
Vérifier que la base primaire est bien démarrée et configurée ! Puis effectuer les actions suivantes sur la base primaire pour qu’elle soit capable de communiquer et d’échanger avec la base standby.
Activez la force logging
[ocm1.odlabs.net]$ sqlplus / as sysdba
SQL> alter database force logging;
Ajoutez les standby logfiles
Doubler les REDO LOGS par des STANDBY REDO LOGS de taille identiques, mais créer un groupe de plus que les REDO standards :
SQL> select group#, thread#, bytes/1024/1024 from v$log;
SQL> alter database add standby logfile '/u01/app/oracle/oradata/pritst/stby_redo01.log' size 50M;
SQL> alter database add standby logfile '/u01/app/oracle/oradata/pritst/stby_redo02.log' size 50M;
SQL> alter database add standby logfile '/u01/app/oracle/oradata/pritst/stby_redo03.log' size 50M;
SQL> alter database add standby logfile '/u01/app/oracle/oradata/pritst/stby_redo04.log' size 50M;
Paramètre log_archive_config
Ce paramètre est permet d’activer la fonctionnalité de la data Guard, il accepte en argument les db_unique_name de base primaire et secondaire (standby) :
SQL> alter system set log_archive_config='dg_config=(pritst,stbytst)';
Paramètre log_archive_dest_2
SQL> alter system set log_archive_dest_2='service=OEMR_STBY LGWR async valid_for=(online_logfiles,primary_role) db_unique_name=stbytst';
Paramètre standby_file_management
Ce paramètre apporte automatiquement les modifications sur la base de secours lorsqu’un fichier de données a été ajouté ou supprimé sur la base primaire (fal_server), il permet aussi à la base primaire d’être prête à changer le rôle primaire à standby et vice-et-versa.
SQL> alter system set standby_file_management = AUTO scope=both ;
Paramètre REMOTE_LOGIN_PASSWORDFILE
Vérifiez que le paramètre REMOTE_LOGIN_PASSWORDFILE est positionné à la valeur EXCLUSIVE. Sinon exécuter cette commande :
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
Activez l’archivage
SQL> archive log list ;
-- S'il n'est pas "Enabled" :
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
Ajouter une entrée pour la base standby dans le tnsnames.ora du serveur primaire
STDBYTST=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ocm2.odlabs.net)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PRITST)
)
)
Tester :
[ocm1.odlabs.net]$ tnsping STDBYTST
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm2.odlabs.net)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICTED) (SERVICE_NAME = STDBYST)))
OK (20 msec)
Copier le tnsnames.ora et le fichier passwd vers la base standby
[ocm1.odlabs.net]$ scp orapwpritst oracle@ocm2.odlabs.net:/u01/app/oracle/product/db/11.2.0.3/dbs/
Préparation de la base de secours (standby)
Sur ce serveur on a juste installé le software Oracle 11gR2 et on a que le fichier mot de passe et le tnsnames.ora copiés de la base primaire.
Création de listener dans $ORACLE_HOME/network/admin
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=ocm2.odlabs.net)(PORT=1521)))
)
ADR_BASE_LISTENER = /u01/app/oracle
INBOUND_CONNECT_TIMEOUT_LISTENER=120
DIAG_ADR_ENABLED_LISTENER=OFF
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
# Enregistrement statique auprès de Listener (l’enregistrement dynamique laisse la base inaccessible pendant un certain, d’où la nécessité de forcer l'enregistrement statique)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_NAME = STDBYTST)
(ORACLE_HOME = /u01/app/oracle/product/db/11.2.0.3/)
(SID_NAME = PRITST)
)
)
Tester le bon fonctionnement de tnsnames.ora
[ocm2.odlabs.net]$ tnsping STDBYTST
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm2.odlabs.net)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICTED) (SERVICE_NAME = STDBYTST)))
OK (0 msec)
[ocm2.odlabs.net]$ tnsping PRITST
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm1.odlabs.net)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = PRITST)))
OK (10 msec)
Création des répertoires de données et d’archivage (la structure physique qui va accueillir la base de données)
(A adapter selon l'arborescence du serveur primaire)
[ocm2.odlabs.net]$ mkdir -p /data01/ORADATA/pritst
[ocm2.odlabs.net]$ mkdir -p /archlog_primaire/ORADATA/pritst
[ocm2.odlabs.net]$ cd /u01/app/oracle/admin
[ocm2.odlabs.net]$ mkdir pritst; cd pritst
[ocm2.odlabs.net]$ mkdir pfile adump bdump cdump udump
Création du fichier d'initialisation init.ora pour la base standby
[ocm2.odlabs.net]$ cd $ORACLE_HOME/dbs
[ocm2.odlabs.net]$ echo DB_NAME=pritst> initpritst.ora
Lancer la base de données en mode nomount
[ocm2.odlabs.net]$ su - oracle
[ocm2.odlabs.net]$ sqlplus sys/Passw0rd@STDBYTST as sysdba
SQL> startup nomount pfile='initpritst.ora' ;
Duplication de la base de production par RMAN
Préparation du script RMAN duplicate duplicate_pritst.rman
run {
allocate auxiliary channel stdbytst type disk;
allocate channel pritst_1 device type disk;
allocate channel pritst_2 device type disk;
allocate channel pritst_3 device type disk;
allocate channel pritst_4 device type disk;
duplicate target database for standby from active database NOFILENAMECHECK
spfile
set control_files='/data01/ORADATA/pritst/control01.ctl','/data01/ORADATA/pritst/control02.ctl',
'/data01/ORADATA/pritst/control03.ctl'
set db_unique_name='STDBYTST'
set audit_file_dest='/u01/app/oracle/admin/pritst/adump'
set db_domain=''
set diagnostic_dest='/u01/app/oracle'
set log_archive_max_processes='5'
set fal_client='STDBYTST'
set fal_server='PRITST'
set standby_file_management='AUTO'
set log_archive_config='dg_config=(PRITST,STDBYTST)'
set log_archive_dest_2='service=RMAP LGWR ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) DB_UNIQUE_NAME=PRITST'
;
}
Lancer la duplication
[ocm2.odlabs.net]$ rman target sys/Passw0rd@PRITST auxiliary sys/Passw0rd@STDBYTST
RMAN>@duplicate_pritst.rman
Activation de la réplication
Actions sur la base standby
Démarrage du processus Redo Apply
[ocm2.odlabs.net]$ sqlplus sys/Passw0rd@STDBYTST as sysdba
SQL> alter database recover managed standby database using current logfile disconnect from session;
SQL> select sequence#,first_time,applied from v$archived_log order by 1;
SEQUENCE# FIRST_TI APPLIED
---------- -------- ---------
1446 07/02/13 YES
1447 07/02/13 YES
Vérifier le status de la base standby
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
-------------------- ----------------
MOUNTED PHYSICAL STANDBY
Tester l'application des archives sur la standby
Sur la base primaire :
[ocm1.odlabs.net]$ sqlplus / as sysdba
SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> ALTER SYSTEM SWITCH LOGFILE;
Sur la base standby, vérifier que 2 nouvelles archives ont été appliquées :
[ocm2.odlabs.net]$ sqlplus / as sysdba
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
Post Installation
Le choix du mode de protection
Il y a trois modes de protection de données :
- Maximum Availability
- Maximum Performance
- Maximum Protection
Chaque mode nécessite une configuration particulière pour sa mise en œuvre.
https://docs.oracle.com/database/121/SBYDB/protection.htm#SBYDB02000