21 Février 2018
Hello,
Un environnement dataguard est constitué d'une base primaire et à minima d'une base de secours. Bien souvent cette base de secours est laissé à son rôle principale qui est de prendre le relais si necessaire.
Cependant votre base de secours peut être bien plus. Il peut nous arriver par exemple de vouloir vérifier l'impact d'un nouvel index sans pour autant y a aller directement sur la base de production... Et qu'est ce qui est plus proche d'une base de production que ma standby database... RIEN
Seul hic, ma standby database est en mode READ ONLY.
Pas de soucis ! Oracle a pensé à tout...
Petit rappel de mon configuration : J'utilise le broker (car j'aime bien) mais on pourrait s'en sortir sans;
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 54 seconds ago)
Et comme je le disais plus haut, ma base est en read-only.
SQL> SQL> select database_role,open_mode from v$database; DATABASE_ROLE OPEN_MODE -------------- -------------------- PHYSICAL STANDBY MOUNTED SQL>
Je vais créer un snapshot de ma standby et une fois cela effectué, je pourrai travailler en lecture écriture dessus. Une fois mon test terminé, il me suffira de la reconvertir en standby database. Elle reviendra bien sur à son état avant "tests", et reprendra son role de base de secours.
DGMGRL> DGMGRL> convert database rastastby to SNAPSHOT STANDBY; Converting database "rastastby" to a Snapshot Standby database, please wait... Database "rastastby" converted successfully DGMGRL>
Ceci étant fait...
SQL> SQL> select open_mode,database_role from v$database; OPEN_MODE DATABASE_ROLE ---------- ---------------- READ WRITE SNAPSHOT STANDBY SQL>
Je peux tout à fait maintenant créer une nouvelle table ou faire ce que bon me semble (dans la limite du raisonnable).
SQL> connect lao/***** Connected. SQL> SQL> SQL> create table teste2 as select * from user_objects; Table created.
Une fois mes tests terminés, je n'oublie évidemment pas de reconvertir ma base en physical standby... C'est quand même son objectif premier ;)
DGMGRL> convert database rastastby to physical standby; Converting database "rastastby" to a Physical Standby database, please wait... Operation requires a connection to database "rastadb" Connecting ... Connected to "rastadb" Connected as SYSDBA. Oracle Clusterware is restarting database "rastastby" ... Continuing to convert database "rastastby" ... Database "rastastby" converted successfully DGMGRL>
on peut vérifier que tout s'est bien passé.
SQL> SQL> select open_mode,database_role from v$database; OPEN_MODE DATABASE_ROLE -------------------- ---------------- MOUNTED PHYSICAL STANDBY
Nous sommes de nouveau en mount, et notre base a repris son rôle de physical standby.
Remarque : pour que tout ceci fonctionne, il faut que FLASHBACK DATABASE soit activé.. mais pas d’inquiétude... si ce n'est pas le cas, Oracle se charge de tout pendant la conversion.
Enjoy !