Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog

LAMI DBA

Hello,
Oracle Active Dataguard a été introduit avec la version 11g. Qu'est ce donc ? Tout simplement la possibilité d'avoir sa base standby ouverte tout en continuant à appliquer les transactions provenant de la base primaire.
Très pratique afin d'utiliser sa base de secours par exemple comme base décisionnelle.


Petit problème : Autant Dataguard est inclus dans la licence Enterprise, autant Active Dataguard est soumis à ce que Oracle appelle un "Extra Cost"... Dit autrement ... Faut raquer pour l'utiliser.
Cela n'est ni la première, ni la dernière option payante d'ORacle. Cependant, à moins d'être pointilleux à l'extrême sur l'accès à vos bases, vous n'êtes pas à l'abri qu'une personne (DBA ou pas) décide (ou se trompe) et ouvre la base de secours.... Et la sans même vous en rendre compte vous venez d'activer "Active Dataguard"... Attention à l'audit...

Assez parlé, vous commencez à connaitre mon environnement...

DGMGRL>
DGMGRL> show configuration

Configuration - mapogos

  Protection Mode: MaxPerformance
  Members:
  rastadb   - Primary database
    rastastby - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 42 seconds ago)

DGMGRL>


Et maintenant, je vais regarder plus en détail ma base de secours.

DGMGRL>
DGMGRL> show database rastastby

Database - rastastby

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 4.00 KByte/s
  Real Time Query:    OFF
  Instance(s):
    rastastby

Database Status:
SUCCESS

 

Ca a l'air plutôt normal.
Et maintenant, depuis mon serveur de secours une personne ne pensant pas à mal lance un sqlplus et ...

 

SQL>
SQL> alter database open;

Database altered.

SQL>


Petite cause, grosses conséquences...

DGMGRL>
DGMGRL> show database rastastby

Database - rastastby

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 5.00 KByte/s
  Real Time Query:    ON
  Instance(s):
    rastastby

Database Status:
SUCCESS


La base est toujours en "Apply-On" et le Real Time Query est passé à ON.
Vous doutez encore...

SQL>
SQL>
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY WITH APPLY

SQL>


Sans le savoir (ou pas) vous être en train d'utiliser "Active Dataguard"....
Et si il en reste qui doutent...
Sur ma base primaire (rastadb)

SQL>
SQL> create table active_dg (i number);

Table created.

SQL> insert into active_dg values (6);

1 row created.

SQL> commit;

Commit complete.

SQL>


Et sur mon serveur de secours..

SQL>
SQL>
SQL> select * from active_dg;

         I
----------
         6

SQL>


Plus de doute ! Nous avons vu que cette option peut facilement s'activer et sans pour autant en faire usage volontairement....
Et maintenant...
Certain me diront que j'ai fait un "alter database open" et qu'il suffisait de faire un "Open database read only"..
Oui..je répondrai que dans mon cas la base était également en read-only... et que le problème n'est pas sur le READ ONLY mais sur le "WITH APPLY" :)... Mais bon... je suis dans un bon jour, donc testons.

SQL>
SQL> alter database open read only;

Database altered.

SQL>
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY WITH APPLY

SQL>


Nous en sommes au même point..
Il faut en fait désactiver l'apply avant d'ouvrir la base.

DGMGRL>
DGMGRL> edit database rastastby set state='APPLY-OFF';
Succeeded.
DGMGRL>


Vérifions..

SQL> alter database open;

Database altered.

SQL>
SQL>
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY

SQL>


Une fois ce que l'on a faire, il faut alors repasser la base ne mount et ne pas oublier de repasser l'apply à ON...
Je ne vous cache pas qu'avec ces manipulations, on fait intervenir le risque humain qui est quand même à l'origine de pas mal de soucis..
Au final que faire si je veux être certains de ne pas activer mon option "Active Dataguard"... Ouvrir un ticket chez Oracle.. y en a qui ont essayé...
Il existe cependant un de ces fameux paramètre caché qui peut nous aider. Cependant Oracle vous mettra en garde sur l'utilisation de ce type de paramètre.. Sont bien gentils, mais ils proposent rien d'autres...Ah si.. Sortez le pognon & achetez vous la licence..
Let's go !
Remarque : La modification de ce paramètre nécessite un arrêt / relance de votre instance.

SQL> alter system set "_query_on_physical"=FALSE scope=spfile;

System altered.

SQL>
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup mount;
ORACLE instance started.

Total System Global Area 1241513984 bytes
Fixed Size                  8620176 bytes
Variable Size             452986736 bytes
Database Buffers          771751936 bytes
Redo Buffers                8155136 bytes
Database mounted.
SQL>


En parallèle, j'ai réactivé l'APPLY sur ma standby.

DGMGRL> show database rastastby

Database - rastastby

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 1.00 KByte/s
  Real Time Query:    OFF
  Instance(s):
    rastastby

Database Status:
SUCCESS

DGMGRL>

 

Et maintenant que se passe t-il si j'essaye d'ouvrir ma standby database.

SQL>
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-16669: instance cannot be opened because the Oracle Active Data Guard
option is disabled

SQL>

 

Plus de risque d'ouvrir par erreur ma standby !
Je pourrai toujours l'ouvrir en read  / only mais à la seule condition d'avoir désactiver au préalable l'apply... Je vous laisse tester ;)


Remarque : la modification de ce paramètre caché nécessite un arrêt / relance (je sais, je me repête). Il sera donc facile à mettre en place sur une standby... Mais il faudra garder en mémoire d'effectuer également la modification sur la base primaire... car en cas de switchover... c'est votre base primaire qui deviendra standby ;)

Remarque :  De mon coté, j'aurai tendance à utiliser symptomatiquement la couche grid & Oracle Restart. Et pour stopper / demarrer les instances utiliser srvctl plutôt que sqlplus. Je vous expliquerai pourquoi dans un prochain article...


Enjoy !

 

commentaires

Andres 20/09/2018 14:54

Merci, cela me résoudre pas mal de doutes!!!!!

Articles autour des SGBD Oracle, SQL Server & PostgreSQL

A propos de LAMI-DBA

Le Blog LAMI-DBA est la fusion de deux blogs existants, celui de LAurent (laodba) et celui de MIckael (dbafaq), deux DBA passionnés des sgbd, et particulièrement d'Oracle.

 

Laurent, 47 ans, Expert Oracle & MS SQL Server, Team Leader, dit "Le Taz", Certifié Expert RAC 11G, Exadata Implementation Specialist, OCA 11G, 

Profil Linkdin

 

 

 

Mickael, 37 ans, Expert Oracle, dit "Batman", Certifié Expert RAC 11G, OCP 11G, OCP 10G,

Profil Linkdin      

 

Hébergé par Overblog