Oracle 11g Release 2 Data Guard (1/5) : 5 minutes pour créer une configuration

Si vous avez eu l’opportunité de regarder les nouvelles fonctionnalités 11g Release 2 d’Oracle Data Guard et de son broker, vous avez découvert une liste de 33 améliorations répertoriées. Cela va du positionnement d’une propriété sur plusieurs bases de données avec dgmgrl à la correction automatique de blocs corrompus, les cruelles ORA-01578, grâce à Oracle Active Data Guard. Cela passe également désormais par la compression de l’ensemble du traffic réseau avec l’option Advanced Compression et par la garantie d’un délai de mise à jour des bases de données standby pour vos requêtes… Un véritable inventaire, à la Prévert, déjà si indispensable qu’on se demande comment on a fait jusqu’à maintenant !
Cela étant, vous m’accorderez que, le fait que ce soit dans la documentation ne signifie ni que ça marche, ni que ce soit simple. J’ai quelques bon contre-exemples sur cette version justement. Enfin, pour Data Guard, c’est une belle histoire et je vous propose donc de partager à travers une série de 5 articles quelques unes des fonctionnalités associées. Le plan que j’ai imaginé est le suivant :

  • Le 1er article (celui-ci), présente comment créer une configuration Data Guard en 5 minutes, en plus du temps de copie de la base de données et comment effectuer une transition des roles des bases de données
  • Le 2nd article, présente comment changer le mode de protection, activer Snapshot Standby et Real Time Query
  • Le 3ème article illustre le fonctionnement de la correction automatique de blocs corrumpus sur la base de données primaire et standby
  • Le 4ème article démontre comment garantir la fraicheur des données sur la standby
  • Le 5ème article illustre l’utilisation du Block Change Tracking File sur la base standby et l’utilisation de la commande recover database noredo pour gérer la perte d’un fichier archivelog

Il me semble qu’il s’agit d’un tour d’horizon assez complet de l’état de l’art de Data Guard en 11g Release 2. Bien sur, si vous avez d’autres idées, n’hésitez pas à les partager en laissant vos commentaires…
J’espère que votre intérêt est aiguisé ! Maintenant, commençons par constituer un environnement pour nos tests en 5 minutes ou à peine plus.

Un environnement de test

Pour faire mes tests, j’ai utilisé Oracle 11g Release 2 sur Linux 32 bits. La base de données primaire et son instance s’appellent BLACK. La base de données standby s’appellera forcément BLACK mais son instance et son db_unique_name s’appelleront WHITE.
A quelques nuances près comme l’utilisation de oradim sur Windows ou OpenVMS, vous pourrez réaliser des configurations tout aussi simplement sur votre système d’exploitation préféré. Sur cet environnement, il y a une seule base de données standby physique; les bases de données primaires et standby sont sur le même serveur. A ce propos, le fait que primaire et standby soient sur le même serveur rend la configuration plutôt plus complexe ! Cela nécessite que (1) vous utilisiez le paramètre db_unique_name et (2) que l’arborescence des fichiers soit différente entre les bases de données primaires et standby.
D’autre part, vous noterez que l’arborescence de la base de données primaire est compatible OFA. Les fichiers de données résident sur un système de fichiers et n’utilisent pas une configuration Oracle Managed Files (OMF). Si, avec une configuration OMF (ou ASM), la configuration est encore plus simple, vous serez attentif à changer l’arborescence de manière pertinente dans le cas où vous n’utilisez pas OFA.

Avant de commencer

Voici quelques notes, en vrac, avant de démarrer :

  • La commande DUPLICATE ... FROM ACTIVE DATABASE permet de créer la base de données standby en 8 lignes. Il faut noter quelques points à ce propos : (1) cette commande ne nécessite pas d’option d’après la lecture d’Oracle® Database Licensing Information, (2) cette commande ne permet pas (au moins d’après ma compréhension !) d’utiliser d’algorithme de compression, ni de paralléliser la copie de la base de données. Ce dernier point en particulier limite l’intérêt de cette approche pour des grosses bases de données. Dans ce cas, il faudra sans doute utiliser une approche en plusieurs étapes avec une commande duplicate depuis une sauvegarde.
  • La syntaxe RMAN startup auxiliary ne fonctionne plus ! Il faut désormais utiliser obligatoirement startup clone
  • Il n’est pas nécessaire d’avoir un fichier d’initialisation init.ora ou spfile pour démarrer la base de données auxiliaire; c’est sûrement vrai depuis 10g mais je l’ai découvert par hasard.
  • La standby physique fonctionne désormais même lorsque le fichier de mot de passe est créé avec ignorecase=n et que le paramètre sec_case_sensitive_logon est positionné à true
  • Le paramètre StaticConnectIdentifier du broker 11g R2 permet de positionner des alias TNS avec des enregistrements statiques de nom d’instance et qui, par conséquent fonctionnement même lorsque les instances sont arrêtées
  • La commande du broker edit configuration set property permet à partir de 11g R2 de changer une propriété de la configuration Data Guard sur l’ensemble des bases de données simultanément.

Service, fichier de mot de passe et configuration réseau

Comme le titre de ce paragraphe le suggère, configurer manuellement une base de données standby nécessite que vous commenciez par configurer le service pour cette nouvelle base de données, le fichier de mot de passe et les listeners et alias TNS. Commencez donc par le service; sur Linux et Unix, cela consiste à alimenter le fichier oratab comme ci-dessous :

$ echo "WHITE:/u01/app/oracle/product/11.2.0/db_1:Y" >> /etc/oratab

L’étape suivante consiste à créer un fichier de mots de passe pour notre nouvelle instance standby. Le mot de passe utilisé, ainsi que la politique de respect de la casse, pour SYS (si vous utilisez SYS) doit être identique à celui de la base de données primaire. Voici comment configurer ce mot de passe sur le serveur de la standby :

. oraenv
WHITE
cd $ORACLE_HOME/dbs
orapwd file=orapwWHITE entries=5

Ensuite, je vous conseille, pour simplifier la mise en oeuvre de la commande duplicate et de la gestion des roles d’effectuer des enregistrements statiques des instances dans les listeners respectifs de BLACK et de WHITE :

. oraenv
BLACK
cd $ORACLE_HOME/network/admin
cat listener.ora
[...]
SID_LIST_LISTENER =
   (SID_LIST =
      (SID_DESC =
         (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
         (SID_NAME = BLACK)
      )
     [...]
  )
lsnrctl reload LISTENER
. oraenv
WHITE
cd $ORACLE_HOME/network/admin
cat listener.ora
[...]
SID_LIST_LISTENER =
   (SID_LIST =
      [...]
      (SID_DESC =
         (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
         (SID_NAME = WHITE)
      )
   )
lsnrctl reload LISTENER

Enfin, sur dans tous les $ORACLE_HOME de vos configurations, ajoutez les alias TNS pour se connecter à BLACK et WHITE. Par exemple, dans mon cas, j’utilise le fichier tnsnames.ora et j’ai ajouté les entrées ci-dessous:

cat tnsnames.ora
BLACK =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = arkzoyd-black)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = BLACK)
    )
  )
WHITE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = arkzoyd-white)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = WHITE)
    )
  )

Créer la base de données standby

Pour créer la base de données standby, il suffit de démarrer l’instance WHITE depuis recovery manager en adaptant le script ci-dessous:

rman
connect target sys/change_on_install@black
connect auxiliary sys/change_on_install@white
startup clone nomount;

Un message comme celui ci-dessous s’affiche :

startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initWHITE.ora'
starting Oracle instance without parameter file for retrieval of spfile
Oracle instance started
Total System Global Area     159019008 bytes
Fixed Size                     1335192 bytes
Variable Size                 75497576 bytes
Database Buffers              75497472 bytes
Redo Buffers                   6688768 bytes

Vous n’avez plus ensuite qu’à créer l’arborescence pour vos fichiers ; visiblement RMAN est capable de créer certains répertoires mais je n’ai pas eu l’opportunité de tester sans créer les répertoires pour les datafiles et archivelogs :

mkdir -p /u01/app/oracle/oradata/WHITE/archivelogs

Lancer enfin la commande duplicate comme ci-dessous; vous remarquerez l’utilisation de seulement 4 paramètres :

DUPLICATE TARGET DATABASE
     FOR STANDBY
     FROM ACTIVE DATABASE
     DB_FILE_NAME_CONVERT 'BLACK','WHITE'
     SPFILE
      PARAMETER_VALUE_CONVERT 'BLACK','WHITE'
      SET LOG_FILE_NAME_CONVERT 'BLACK','WHITE'
      SET DB_UNIQUE_NAME 'WHITE';

Il ne vous reste plus qu’à patienter et le cas échéant, superviser l’avancement de la sauvegarde avec v$rman_status et v$session_longops; si vous n’utilisez qu’une base de test, en moins de 3 minutes, vous aurez constitué la base de données standby; voici un exemple d’exécution de la commande :

Starting Duplicate Db at 28-SEP-09
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=9 device type=DISK
contents of Memory Script:
{
   backup as copy reuse
   targetfile  '/u01/app/oracle/product/11.2.0/db_1/dbs/orapwBLACK' auxiliary format
 '/u01/app/oracle/product/11.2.0/db_1/dbs/orapwWHITE'   targetfile
 '/u01/app/oracle/product/11.2.0/db_1/dbs/spfileBLACK.ora' auxiliary format
 '/u01/app/oracle/product/11.2.0/db_1/dbs/spfileWHITE.ora'   ;
   sql clone "alter system set spfile= ''/u01/app/oracle/product/11.2.0/db_1/dbs/spfileWHITE.ora''";
}
executing Memory Script
Starting backup at 28-SEP-09
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=18 device type=DISK
Finished backup at 28-SEP-09
sql statement: alter system set spfile= ''/u01/app/oracle/product/11.2.0/db_1/dbs/spfileWHITE.ora''
contents of Memory Script:
{
   sql clone "alter system set  audit_file_dest =
 ''/u01/app/oracle/admin/WHITE/adump'' comment=
 '''' scope=spfile";
   sql clone "alter system set  control_files =
 ''/u01/app/oracle/oradata/WHITE/control01.ctl'', ''/u01/app/oracle/flash_recovery_area/WHITE/control02.ctl'' comment=
 '''' scope=spfile";
   sql clone "alter system set  dispatchers =
 ''(PROTOCOL=TCP) (SERVICE=WHITEXDB)'' comment=
 '''' scope=spfile";
   sql clone "alter system set  log_archive_dest_1 =
 ''location=/u01/app/oracle/oradata/WHITE/archivelogs'' comment=
 '''' scope=spfile";
   sql clone "alter system set  LOG_FILE_NAME_CONVERT =
 ''BLACK'', ''WHITE'' comment=
 '''' scope=spfile";
   sql clone "alter system set  db_unique_name =
 ''WHITE'' comment=
 '''' scope=spfile";
   shutdown clone immediate;
   startup clone nomount;
}
executing Memory Script
sql statement: alter system set
   audit_file_dest =  ''/u01/app/oracle/admin/WHITE/adump''
   comment= '''' scope=spfile
sql statement: alter system set
   control_files =  ''/u01/app/oracle/oradata/WHITE/control01.ctl'',
''/u01/app/oracle/flash_recovery_area/WHITE/control02.ctl''
   comment= '''' scope=spfile
sql statement: alter system set
   dispatchers =  ''(PROTOCOL=TCP) (SERVICE=WHITEXDB)''
   comment= '''' scope=spfile
sql statement: alter system set
   log_archive_dest_1 =  ''location=/u01/app/oracle/oradata/WHITE/archivelogs''
   comment= '''' scope=spfile
sql statement: alter system set
   LOG_FILE_NAME_CONVERT =  ''BLACK'', ''WHITE''
   comment= '''' scope=spfile
sql statement: alter system set  db_unique_name =  ''WHITE'' comment= '''' scope=spfile
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area    1104814080 bytes
Fixed Size                     1335980 bytes
Variable Size                671092052 bytes
Database Buffers             419430400 bytes
Redo Buffers                  12955648 bytes
contents of Memory Script:
{
   backup as copy current controlfile for standby auxiliary format  '/u01/app/oracle/oradata/WHITE/control01.ctl';
   restore clone controlfile to  '/u01/app/oracle/flash_recovery_area/WHITE/control02.ctl' from
 '/u01/app/oracle/oradata/WHITE/control01.ctl';
}
executing Memory Script
Starting backup at 28-SEP-09
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_BLACK.f tag=TAG20090928T221532 RECID=2 STAMP=698796932
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 28-SEP-09
Starting restore at 28-SEP-09
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=134 device type=DISK
channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 28-SEP-09
contents of Memory Script:
{
   sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script:
{
   set newname for tempfile  1 to
 "/u01/app/oracle/oradata/WHITE/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to
 "/u01/app/oracle/oradata/WHITE/system01.dbf";
   set newname for datafile  2 to
 "/u01/app/oracle/oradata/WHITE/sysaux01.dbf";
   set newname for datafile  3 to
 "/u01/app/oracle/oradata/WHITE/undotbs01.dbf";
   set newname for datafile  4 to
 "/u01/app/oracle/oradata/WHITE/users01.dbf";
   set newname for datafile  5 to
 "/u01/app/oracle/oradata/WHITE/streams_tbs01.dbf";
   set newname for datafile  6 to
 "/u01/app/oracle/oradata/WHITE/x01.dbf";
   backup as copy reuse
   datafile  1 auxiliary format
 "/u01/app/oracle/oradata/WHITE/system01.dbf"   datafile
 2 auxiliary format
 "/u01/app/oracle/oradata/WHITE/sysaux01.dbf"   datafile
 3 auxiliary format
 "/u01/app/oracle/oradata/WHITE/undotbs01.dbf"   datafile
 4 auxiliary format
 "/u01/app/oracle/oradata/WHITE/users01.dbf"   datafile
 5 auxiliary format
 "/u01/app/oracle/oradata/WHITE/streams_tbs01.dbf"   datafile
 6 auxiliary format
 "/u01/app/oracle/oradata/WHITE/x01.dbf"   ;
   sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /u01/app/oracle/oradata/WHITE/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 28-SEP-09
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/BLACK/system01.dbf
output file name=/u01/app/oracle/oradata/WHITE/system01.dbf tag=TAG20090928T221540
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/BLACK/sysaux01.dbf
output file name=/u01/app/oracle/oradata/WHITE/sysaux01.dbf tag=TAG20090928T221540
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/BLACK/undotbs01.dbf
output file name=/u01/app/oracle/oradata/WHITE/undotbs01.dbf tag=TAG20090928T221540
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/u01/app/oracle/oradata/BLACK/x01.dbf
output file name=/u01/app/oracle/oradata/WHITE/x01.dbf tag=TAG20090928T221540
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/u01/app/oracle/oradata/BLACK/streams_tbs01.dbf
output file name=/u01/app/oracle/oradata/WHITE/streams_tbs01.dbf tag=TAG20090928T221540
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/BLACK/users01.dbf
output file name=/u01/app/oracle/oradata/WHITE/users01.dbf tag=TAG20090928T221540
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 28-SEP-09
sql statement: alter system archive log current
contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=2 STAMP=698797010 file name=/u01/app/oracle/oradata/WHITE/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=3 STAMP=698797010 file name=/u01/app/oracle/oradata/WHITE/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=4 STAMP=698797010 file name=/u01/app/oracle/oradata/WHITE/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=5 STAMP=698797010 file name=/u01/app/oracle/oradata/WHITE/users01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=6 STAMP=698797010 file name=/u01/app/oracle/oradata/WHITE/streams_tbs01.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=7 STAMP=698797010 file name=/u01/app/oracle/oradata/WHITE/x01.dbf
Finished Duplicate Db at 28-SEP-09

Démarrer le broker et créer les standby logs

Remarquez qu’on aurait pu commencer par démarrer le broker et les standby logs. Avant ou maintenant, en fait, peu importe ! Démarrer le process dmon sur les 2 instances et créer les fichiers de standby logs en prenant soin de vous assurer que la taille des fichiers est égale ou supérieure à celle des redologs, comme ci-dessous :

sqlplus sys/change_on_install@black as sysdba
alter system set dg_broker_start=true;
set num 15
select group#, thread#, bytes
   from v$log
  order by group#;
alter database add standby logfile thread 1 group 4
   ('/u01/app/oracle/oradata/BLACK/standby04.log') SIZE 52428800;
alter database add standby logfile thread 1 group 5
   ('/u01/app/oracle/oradata/BLACK/standby05.log') SIZE 52428800;
alter database add standby logfile thread 1 group 6
   ('/u01/app/oracle/oradata/BLACK/standby06.log') SIZE 52428800;
exit;
sqlplus sys/change_on_install@white as sysdba
alter system set dg_broker_start=true;
alter database add standby logfile thread 1 group 4
   ('/u01/app/oracle/oradata/WHITE/standby04.log') SIZE 52428800;
alter database add standby logfile thread 1 group 5
   ('/u01/app/oracle/oradata/WHITE/standby05.log') SIZE 52428800;
alter database add standby logfile thread 1 group 6
   ('/u01/app/oracle/oradata/WHITE/standby06.log') SIZE 52428800;
exit;

Créer et activer la configuration Data Guard

Pour terminer la configuration, il suffit de créer la configuration dans le broker et de l’activer; l’ensemble du paramétrage de la « managed » standby sera créé en conséquence :

dgmgrl sys/change_on_install@black
create configuration worldwide as
    primary database is BLACK
    connect identifier is BLACK;
Configuration "worldwide" created with primary database "black"
add database white
    as connect identifier is white
    maintained as physical;
Database "white" added
show configuration
Configuration - worldwide
  Protection Mode: MaxPerformance
  Databases:
    black - Primary database
    white - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
DISABLED
enable configuration;
Enabled.
show configuration verbose;
Configuration - worldwide
  Protection Mode: MaxPerformance
  Databases:
    black - Primary database
    white - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS

Pour terminer, enregistrez les alias TNS statique dans le nouveau paramètre d’Oracle 11g Release 2 StaticConnectIdentifier; cela simplifie la lisibilité de la configuration ainsi que les arrêts/démarrages des instances depuis le broker:

edit database white set property StaticConnectIdentifier='WHITE';
edit database black set property StaticConnectIdentifier='BLACK';

Changer les rôles des bases de données

Vous voulà prêt à tester le changement de rôle des bases de données (et 2 minutes qui font 5 avec les 3 minutes précédentes!); toujours depuis l’interface en ligne de commande du broker :

switchover to WHITE;
Performing switchover NOW, please wait...
New primary database "white" is opening...
Operation requires shutdown of instance "BLACK" on database "black"
Shutting down instance "BLACK"...
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance "BLACK" on database "black"
Starting instance "BLACK"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "white"

Et dans le sens inverse :

switchover to black;
Performing switchover NOW, please wait...
New primary database "black" is opening...
Operation requires shutdown of instance "WHITE" on database "white"
Shutting down instance "WHITE"...
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance "WHITE" on database "white"
Starting instance "WHITE"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "black"
show configuration verbose;
Configuration - worldwide
  Protection Mode: MaxPerformance
  Databases:
    black - Primary database
    white - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS

Conclusion de ce premier article

Après ce premier article, personne ne dira plus jamais que Data Guard et les managed standby sont compliqués ! Après tout, si vous ne gardez que la substance de cette article, il y a, tout au plus, 15 lignes utiles. Et vous verrez bientôt qu’ensuite, c’est encore plus facile ! Est-ce que ça vous intéresse ?

14 réflexions sur “Oracle 11g Release 2 Data Guard (1/5) : 5 minutes pour créer une configuration”

  1. Ping : Oracle Database 11g Release 2 Data Guard (6/5): Créer une standby logique avec le broker | EASYTEAM

  2. Ping : Oracle Database 11g Release 2 Data Guard (6/5): Créer une standby logique avec le broker | EASYTEAM LE BLOG

  3. Ping : Oracle Database 11g Release 2 Data Guard (7/5): Observer et Fast Start Failover « EASYTEAM LE BLOG

  4. Bonjour,
    Je pense que la vrai nouveauté du rman dans cette version 11gr2 est de pouvoir faire un duplicate de la base sans que la cible soit disponible:
    DUPLICATE DATABASE TO WHITE
    BACKUP LOCATION ‘/u02/oradata/backup_WHITE’; – emplacement du backup sur disque.
    Bonne journée

  5. Ping : Active Data Guard 11g Release 2 (5/5) : BCTF et RECOVER NOREDO sur la Standby « EASYTEAM Le BLOG

  6. Ping : Oracle 11g Release 2 Data Guard (3/5) : Automatic Block Media Recovery « EASYTEAM Le BLOG

  7. Ping : Oracle 11g Release 2 Data Guard (2/5) : Compression, Snapshot Standby, Real Time Query, etc « EASYTEAM Le BLOG

  8. A propos de ma 3è suggestion, j’avais effectivement oublié que l’on pouvait avoir une hétérogénéité des OS entre la primary et la standby. A propos, est-ce que Oracle ne conseille pas fortement que la primary et la standby aient le même OS ?
    Concernant ma question, je craignais que les switchovers et les transitions de rôles à l’aide de dgmgrl échouent du fait de l’absence d’une ligne avec global_dbname et le suffixe _DGMGRL. Mais vous avez effectivement montré que les transitions de rôles marchent. Et je me demande si la présence de la primary et de la standby sur la même machine physique n’y est pas pour quelque chose dans cette réussite ou si ce n’est pas le miracle du nouveau paramètre « staticConnectIdentifier ».
    Je vais regarder ce nouveau paramètre mais votre éclairage ne sera pas de trop.
    Cdlt,
    Komlan

  9. Hello,
    Après un lecture attentive de ce premier du riche programme que vous nous avez proposé, je reviens avec trois suggestions et une question :
    – Créer un fichier init.ora minimaliste pour la standby. Il ne devrait contenir qu’une ligne avec « db_name=BLACK ». Je pense que cela éviterait le message « startup failed », dans l’esprit des bonnes pratiques.
    – Créer les standby redologs sur la primaire avant l’exécution de la commande duplicate. Cela éviterait de les créer manuellement deux fois (une fois sur la primaire et une 2è fois sur la standby) par la suite.
    – Copier le fichier des mots de passe de la primaire sur la standby en lui donnant le nom adéquat.
    Ces trois suggestions ont été mises en oeuvre il y a un mois dans un test 11gR1 dont le compte-rendu se trouve sur le blog bd-oracle passion (http://bkomlan.blogspot.com – Création d’une active dataguard, une procédure compacte).
    Pensez-vous qu’avec des SID_DESC simplifiés dans les fichiers listener.ora, vous n’aurez pas de message ORA-12514 lors des switchovers et autres conversions à l’aide de dataguard broker (dgmgrl) ?
    [A ma connaissance, jusqu’à la 11gR1, il fallait à peu près :
    (SID_DESC =
    (GLOBAL_DBNAME = _DGMGRL.)
    (SERVICE_NAME = .)
    (SID_NAME = )
    (ORACLE_HOME = )
    )
    ]
    Encore une fois, merci pour le joli travail qui montre que l’on peut aller encore plus loin que je ne le pensais.
    Cordialement,
    Komlan

    1. Attention (!!!!!)
      L’outil de gestion des commentaires a massacré et rendu incompréhensibles plusieurs lignes de déclaration de service (in listener.ora) contenu dans mon dernier post.
      Webmaster, au secours ! Que dois-je faire ou comment dois-je faire ?
      Je tente une correction bricolée dans l’espoir que ça passe :
      (SID_DESC =
      (GLOBAL_DBNAME = [db_unique_name]_DGMGRL.[db_domain])
      (SERVICE_NAME = [db_unique_name].[db_domain])
      (SID_NAME = [ORACLE_SID])
      (ORACLE_HOME = [ORACLE_HOME])
      )
      Cdlt,
      Komlan

    2. Concernant les 3 remarques :
      1) Tout est une question de rapidité. Je voulais montrer que ça marche même sans init.ora.
      2) D’accord. C’est ce que je voulais dire avec mon commentaire à propos du moment pour créer les standby logs
      3) Est-ce que marche dans tous les cas ? On peut avoir une standby Windows d’une primaire Linux. Il faut s’assurer avec la copie d’avoir les bon droits et faire un scp si les serveurs sont distant. Je préfère la méthode orapwd. Cela dit, on fait comme on veut.
      Je ne comprends pas la question à propos du paramétrage du listener.ora. Quel est le problème qu’on essaie de résoudre ? Il n’y a pas de ORA-12514 dans mon test.
      A propos des messages d’erreurs, ça va vous faire plaisir, toutes les utilisations de crsctl, même avec succès, en 11.2 renvoient un message « CRS-« .

  10. Michel Stevelinck

    Cher Master,
    Ah que oui je suis intéressé ! Je viens tout juste de faire un upgrade de ma certification de OCP 10g vers 11g (histoire de me forcer à étudier la théorie) et j’ai une furieuse envie de tester les nouvelles fonctionalités de la 11gR2 sur Linux (redhat). Vos articles sont appréciés et attendus. Au sein de ma société, on commence tout juste à mettre du 11g en production. Mais les nouvelles fonctionalités sont très intéressantes. Je considère pour ma part que la 11g… c’est de la 10g accomplie. Cela fait du bien d’avoir un explorateur qui nous dit « devinez ce que je viens de trouver sous une pierre … ». Un tout grand merci et on attend la suite avec gourmandise.
    Très cordialement,
    Michel

  11. Bonjour, Brave collègue
    C’est peu de dire que ça nous intéresse.
    J’aurais bien souhaité prendre en charge une partie de ce travail avec vous, car c’est un joli rendez-vous du donner et du recevoir.
    Bref je vous suivrai pas à pas et je ne manquerai pas de vous balancer de temps en temps des mails d’encouragement et quelques petites questions.
    Bon courage !
    Bien cordialement,
    Komlan

Les commentaires sont fermés.