Notre client voulait faire un essai de relève qui allait s'approcher le plus possible à une vraie situation de "Disaster Recovery", pour ce faire, un FAILOVER serait forcé pendant les essais mais sans impacter la base de données primaire.
Celle-ci, est une petite bases de données mais cela va vous donner une bonne idée des travaux :
ASM sur Serveur StandBy :
-------------------------
Valider l'espace disponible sur le Dsigroup
ASMCMD> lsdg *MYDB*
State Type ... Total_MB Free_MB ... Name
MOUNTED EXTERN ... 30700 23615 ... FLASMYDBD/
MOUNTED EXTERN ... 102380 66597 ... DATAMYDBD/
StandBy Database :
------------------
SELECT DATABASE_ROLE FROM V$DATABASE ;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
SHOW PARAMETER RECOVERY
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +FLASMYDBD
db_recovery_file_dest_size big integer 15G
Valider la synchronisation de la base de données STANDBY
LOGS TIME SEQUENCE# INCARNATION#
---------------- -------------------- ---------- ------------
LAST APPLIED : 11-FEB-2019 13:40:34 62228 2
LAST RECEIVED : 11-FEB-2019 14:00:32 62229 2
Arrêter l'apply :
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Créer un RESTORE POINT GUARANTEE :
CREATE RESTORE POINT TEST_FAILOVER GUARANTEE FLASHBACK DATABASE;
Vérifier le RESTORE POINT :
COL NAME FORMAT A20
COL SCN FORMAT A15
COL TIME FORMAT A20
SELECT NAME, TO_CHAR(SCN) SCN, TO_CHAR(TIME,'DD/MM/YYYY HH24:MI') TIME, DATABASE_INCARNATION#, GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE/1024/1024 MO
FROM V$RESTORE_POINT
WHERE GUARANTEE_FLASHBACK_DATABASE = 'YES' ;
NAME SCN TIME DATABASE_INCARNATION# GUA MO
-------------------- --------------- -------------------- --------------------- --- ----------
TEST_FAILOVER 9811893079035 11/02/2019 14:20 2 YES 300
Primary Database :
------------------
Créer un décalage des SCN entre la Primaire et la standBy :
ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SYSTEM ARCHIVE LOG CURRENT;
Vérifier la configuration de destination :
SHOW PARAMETER LOG_ARCHIVE_DEST
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest string
log_archive_dest_1 string LOCATION=+FLASMYDBD/...
log_archive_dest_10 string
...
...
log_archive_dest_2 string service="SMYDB", LGWR AS...
...
...
SHOW PARAMETER LOG_ARCHIVE_DEST_STATE_2
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_2 string ENABLE
Empêcher l'envoie des archives vers la StandBy :
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;
SHOW PARAMETER LOG_ARCHIVE_DEST_STATE_2
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_2 string DEFER
StandBy Database :
------------------
Valider le type de controlfile :
SELECT CONTROLFILE_TYPE FROM V$DATABASE;
CONTROL
-------
STANDBY
Convertir la base de données en Bd Primaire :
ALTER DATABASE ACTIVATE STANDBY DATABASE;
Valider que le type de controlfile ait changé :
SELECT CONTROLFILE_TYPE FROM V$DATABASE;
CONTROL
-------
CURRENT
Ouvrir la bases de données :
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
ALTER DATABASE OPEN;
Valider le Rôle de la base de données :
SELECT DATABASE_ROLE FROM V$DATABASE ;
DATABASE_ROLE
----------------
PRIMARY
StandBy Database :
------------------
Procéder aux essais , il faut noter que tous les objets crées ou toutes les modifications vont disparaître après cet essai.
SQL> CREATE TABLE TOTO ( COL1 VARCHAR2 (100));
Table created.
SQL> INSERT INTO TOTO VALUES ( 'Testing Failover - FlashBack');
1 row created.
SQL> commit;
Commit complete.
StandBy Database :
------------------
Une fois les essais terminés, il faut revenir en arrière .
Repartir la base de données :
STARTUP MOUNT FORCE;
Exécuter le Flashback :
FLASHBACK DATABASE TO RESTORE POINT TEST_FAILOVER ;
Valider le type de controlfile :
SELECT CONTROLFILE_TYPE FROM V$DATABASE;
CONTROL
-------
BACKUP
Convertir la base de données à Physical StandBy :
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
STARTUP MOUNT FORCE;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION ;
Valider le type de controlfile :
SELECT CONTROLFILE_TYPE FROM V$DATABASE;
CONTROL
-------
STANDBY
Primary Database :
------------------
Activer l'envoi des archives :
ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
SHOW PARAMETER LOG_ARCHIVE_DEST_STATE_2
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_2 string ENABLE
StandBy Database :
------------------
Ouvrir la base de donnes en Read-only pour confirmer que les objets crééer ont disparus
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE OPEN READ ONLY;
SQL> SELECT * FROM TOTO;
SELECT * FROM TOTO
*
ERROR at line 1:
ORA-00942: table or view does not exist
Réactiver la synchronisation :
STARTUP FORCE MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION ;
S'assurer que la bases de données continue à synchroniser :
LOGS TIME SEQUENCE# INCARNATION# NAME
---------------- -------------------- ---------- ------------
LAST APPLIED : 11-FEB-2019 14:32:25 62238 2
LAST RECEIVED : 11-FEB-2019 14:32:28 62239 2
Supprimer le Restore Point :
COL NAME FORMAT A20
COL SCN FORMAT A15
COL TIME FORMAT A20
SELECT NAME, TO_CHAR(SCN) SCN, TO_CHAR(TIME,'DD/MM/YYYY HH24:MI') TIME, DATABASE_INCARNATION#, GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE/1024/1024 MO
FROM V$RESTORE_POINT
WHERE GUARANTEE_FLASHBACK_DATABASE = 'YES' ;
NAME SCN TIME DATABASE_INCARNATION# GUA MO
-------------------- --------------- -------------------- --------------------- --- ----------
TEST_FAILOVER 9811893079035 11/02/2019 14:20 2 YES 600
DROP RESTORE POINT TEST_FAILOVER ;