Translate

vendredi 24 avril 2015

Oracle Data Guard Broker - DGMGRL - Standby


Bonjour

     Cette configuration vous sera utile dans le cas d'un environnement avec une base de données StandBy. Ceci va vous faciliter la vie énormément et on laissera au Broker de faire presque tout le travail de configuration entre les bases de données,

Une fois créée la base de données qui sera configurée comme StandBy, vous pouvez continuer avec la configuration du Broker, pour ce faire : 

Dans cet exemple :

  • TEST_P  ---­  Base de données Primaire 
  • TEST_S  ---­  Base de données StandBy 


Même si au début vos paramètres ne contiennent pas d'information pour la configuration de la BD StandBy

Sur le serveur où se trouve la bd primaire :

$ sqlplus / as sysdba
...
SQL> SHOW PARAMETER BROKER
NAME                    TYPE        VALUE
----------------------- ----------- ------------------------------
dg_broker_config_file1  string      
dg_broker_config_file2  string      
dg_broker_start         boolean     FALSE

SQL> show parameter log_archive_dest
NAME                    TYPE        VALUE
----------------------- ----------- ------------------------------
....
log_archive_dest_2      string             
....

Il faut s'assurer de modifier le paramètre ci-dessous sur les deux bases de données avant de continuer : 

ALTER SYSTEM SET DG_BROKER_START=TRUE SCOPE=BOTH SID='*' ;

Maintenant, on peut commencer la configuration du Broker :

$ dgmgrl
DGMGRL for Linux: Version 11.2.0.1.0 - 64bit Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
--Faire la connexion sur la BD Primaire
DGMGRL> connect sys@test_p
Password:
Connected.

--Créer la configuration du Broker
DGMGRL> CREATE CONFIGURATION EVTA AS PRIMARY DATABASE IS TEST_P CONNECT IDENTIFIER IS TEST_P ;
Configuration "evta" created with primary database "test_p"

--Ajouter la BD StandBy à la configuration
DGMGRL> ADD DATABASE TEST_S AS CONNECT IDENTIFIER IS TEST_S MAINTAINED AS PHYSICAL ;
Database "test_s" added

--Activer la configuration
DGMGRL> ENABLE CONFIGURATION ;
Enabled.

--Pour voir la configuration existante
DGMGRL> SHOW CONFIGURATION
Configuration - evta

 Protection Mode: MaxPerformance
 Databases:
test_p - Primary database
test_s - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS


Si vous voulez placer votre base de données StandBy en mode Snapshot ...

DGMGRL> CONVERT DATABASE TEST_S TO SNAPSHOT STANDBY ;
Converting database "test_s" to a Snapshot Standby database, please wait...
Database "test_s" converted successfully
 

DGMGRL> SHOW CONFIGURATION
Configuration - evta

 Protection Mode: MaxPerformance
 Databases:
test_p - Primary database
test_s - Snapshot standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS

Et voilà, en plus comme vous pouvez voir maintenant :

SQL> SHOW PARAMETER BROKER
NAME                    TYPE        VALUE
----------------------- ----------- ------------------------------
dg_broker_config_file1  string      /DISK2/oracle/product/11.2.0/d
                                    b_1/dbs/dr1TEST_P.dat
dg_broker_config_file2  string      /DISK2/oracle/product/11.2.0/d
                                    b_1/dbs/dr2TEST_P.dat
dg_broker_start         boolean     TRUE


SQL> show parameter log_archive_dest
NAME                    TYPE        VALUE
----------------------- ----------- ------------------------------
....
log_archive_dest_2      string      service="test_s", LGWR ASYNC N
                                    OAFFIRM delay=0 optional compr
                                    ession=disable max_failure=0 m
                                    ax_connections=1 reopen=300 db
                                    _unique_name="test_s" net_time
                                    out=30, valid_for=(all_logfile
                                    s,primary_role)
....


ORA-17628: Oracle error 19505



Si jamais vous avez ce message d'erreur lors d'un duplicate de base de données avec RMAN 

Ci-dessous j'ai reproduit le problème avec une petite base de données d'essai.


$ rman target sys@test_p auxiliary sys@test_s


Recovery Manager: Release 11.2.0.1.0 - Production on Thu Apr 23 21:36:37 2015
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

target database Password:
connected to target database: TEST (DBID=2174328171)
auxiliary database Password:

connected to auxiliary database: TEST (not mounted)

RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE ;
...
...
...
Starting backup at 23-APR-2015 20:14:38
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
RMAN-00571: =======================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===========
RMAN-00571: =======================================================
RMAN-03002: failure of Duplicate Db command at 04/23/2015 20:14:46
RMAN-03015: error occurred in stored script Memory Script
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 04/23/2015 20:14:46
ORA-17628: Oracle error 19505 returned by remote Oracle server



C'est presque sûr que le problème soit relié à un répertoire manquant.

Dans mon cas, j'ai regardé le spfile utilisé pour la base de données auxiliaire -celle à créer- et j'ai pu constater qu'un des répertoires des controlfile n'existait pas. 


$cat initTEST.ora

*.audit_file_dest='/DISK2/oracle/admin/TEST/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/DISK2/oracle/oradata/TEST/control01.ctl','/DISK2/oracle/flash_recovery_area/TEST/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_flashback_retention_target=1440
*.db_name='TEST'
*.db_recovery_file_dest='/DISK2/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=3145728000
*.db_unique_name='TEST_S'
*.diagnostic_dest='/DISK2/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=TESTXDB)'
*.log_archive_dest_1='LOCATION=/DISK2/oracle/archives/dest1'
*.log_archive_format='%t_%s_%r.arc'
*.memory_target=606076928
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'


Une fois ajouté le répertoire vous pouvez relancer le DUPLICATE et tout devrait bien fonctionner.