Data Guard : Utiliser une sauvegarde incrémentale Rman pour résoudre le problème de « Gap »

Utiliser une sauvegarde incrémentale Rman pour résoudre le problème de « Gap » entre la base de donnée Primaire et la base de standby

Ce problème est dû à une désynchronisation (un gros retard) entre la base primaire et la base de standby :

1er Cas : Si nous avons tous les fichiers archivelog, le retard peut être rattrapé en copiant tous les archivelogs manquants sur le site de standby et en procédant à l’application de ceux-ci (ce qui peut prendre énormément de temps et générer de l’activité sur les deux sites)

2ème Cas : Perte de certains archivelogs non appliqués sur la base de standby

Dans les deux cas, une sauvegarde incrémentale de la base de données primaire contenant des modifications non appliquées sur la base de standby permettrait de rattraper plus rapidement le retard ou encore de corriger le problème d’archivelogs manquants.
Erreur :

$dgmgrl
Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys/welcome1@Primaire
Connected as SYSDBA.
DGMGRL>
DGMGRL> show configuration;
Configuration - cfg_dbprod
Protection Mode: MaxPerformance
Members:
Primaire - Primary database
Error: ORA-16724: cannot resolve gap for one or more standby databases
Standby - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
ERROR (status updated 23 seconds ago)

 

• Se connecter sur la base Primaire et récupérer le SCN

SQL> select current_scn from gv$database;
CURRENT_SCN
-----------
3506794

Nous voyons bien que les Numéros de SCN entre la primaire et la Standby sont différents.
 

• Si le broker est configuré, arrêter le broker

$ dgmgrl
DGMGRL for Linux: Version 12.1.0.2.0 - 64bit Production
Copyright (c) 2000, 2013, Oracle. All rights reserved.
Welcome to DGMGRL, type "help" for information.
DGMGRL>
DGMGRL> connect sys/welcome1@Primaire
Connected as SYSDBA.
DGMGRL>
DGMGRL> disable configuration;
Disabled.

 

• Arrêter le transport des redologs sur la base primaire


DGMGRL> edit database 'standby’ set state='APPLY-OFF';

 

• Se connecter au site de standby et récupérer le SCN

SQL> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
-----------
845325

Nous voyons bien que les Numéros de SCN entre la base Primaire et la Standby sont différents

• Sur la base de standby, arrêter le process MPR (managed recovery process)

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Database altered.

• Avec rman, se connecter à la base de données primaire pour faire un backup incrémental à partir du numéro de scn récupéré précédemment

RMAN>connect target sys/welcome1@Primaire
BACKUP INCREMENTAL FROM SCN 845000 DATABASE FORMAT '/u01/backup/rman/primaire/PrimaireToStandby_%U' tag 'FORSTANDBY';

• Copier tous les fichiers crées sur le site de standby via scp

# cd /u01/backup/rman/primaire
# scp PrimaireToStandby* oracle@srvStandby:'/u01/backup/rman/standby/’

• Se connecter à la base de standby avec rman et cataloguer tous les fichiers de la sauvegarde incrémentale

RMAN> connect target sys/welcome1@standby
CATALOG START WITH '/u01/backup/rman/standby/ PrimaireToStandby’;
using target database control file instead of recovery catalog
searching for all files that match the pattern /u01/backup/rman/standby/PrimaireToStandby
List of Files Unknown to the Database
=====================================
File Name: /u01/backup/rman/standby/PrimaireToStandby_1pr071c5_1_1
File Name: /u01/backup/rman/standby/PrimaireToStandby_1nr071c5_1_1
File Name: /u01/backup/rman/standby/PrimaireToStandby_1or071c5_1_1
File Name: /u01/backup/rman/standby/PrimaireToStandby 1lr071c5_1_1
File Name: /u01/backup/rman/standby/PrimaireToStandby_1mr071c5_1_1
File Name: /u01/backup/rman/standby/PrimaireToStandby_1kr071c4_1_1
Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done
List of Cataloged Files
==================
File Name: /u01/backup/rman/standby/PrimaireToStandby_1pr071c5_1_1
File Name: /u01/backup/rman/standby/PrimaireToStandby_1nr071c5_1_1
File Name: /u01/backup/rman/standby/PrimaireToStandby_1or071c5_1_1
File Name: /u01/backup/rman/standby/PrimaireToStandby 1lr071c5_1_1
File Name: /u01/backup/rman/standby/PrimaireToStandby_1mr071c5_1_1
File Name: /u01/backup/rman/standby/PrimaireToStandby_1kr071c4_1_1

• Faire un recover de la base de standby avec la sauvegarde incrémentale faite

RMAN> RECOVER DATABASE NOREDO;

• Avec rman, se connecter à la base primaire et créer une sauvegarde du standby control file

RMAN> connect target sys/welcome1@primaire
BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/u01/backup/rman/primaire/PrimaryStandbyCtl.bck';



• Copier le fichier crée sur le site de standby

# scp PrimaryStandbyCtl.bck oracle@srvstandby:/u01/backup/rman/standby



• Arrêter la base de standby et la démarrer en « NOMOUNT »

$ sqlplus / as sysdba
SQL> shutdown immediate
SQL> startup nomount

• Se connecter sur la base de standby avec rman, et restaurer le standby control file

oracle@srvStandby ~]$ rman
Recovery Manager: Release 12.1.0.2.0 - Production on Fri Mar 11 11:19:04 2016
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
RMAN> connect target sys/welcome1@standby
connected to target database: standby (DBID=3039550162, not open)

RESTORE STANDBY CONTROLFILE FROM /u01/backup/rman/standby/ PrimaryStandbyCtl.bck’;
 

• Si le répertoire des redologs est identique sur les deux sites, passer cette étape, sinon utiliser les commandes systèmes pour supprimer tous online et standby redologs dans le répertoire redolog du site de standby, puis vérifier que le paramètre LOG_FILE_NAME_CONVERT est bien défini sur la base de standby.

RMAN> CATALOG START WITH '/DATA/STANDBY/DATAFILE/';

RMAN> SWITCH DATABASE TO COPY;

• Sur la base de standby faire un Clear All de tous les groups de redo log

SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 2;
……
SQL> ALTER DATABASE CLEAR LOGFILE GROUP n;



• Sur la base de données de standby, redémarrer le Flashback Database

SQL> ALTER DATABASE FLASHBACK OFF;
SQL> ALTER DATABASE FLASHBACK ON;

• Sur la base de données de standby, redémarrer le Process MPR

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Media recovery complete.

 

• Reconfigurer le broker

DGMGRL> edit database 'standby' set state=‘TRANSPORT-ON’;

• Démarrer le transport des redologs sur la base primaire

DGMGRL> enable configuration;
Enabled.
 

• Vérifier sur la configuration Data Guard qu’il n’y a plus de gap

DGMGRL> connect sys/welcome1@primaire_dgmgrl
Connected as SYSDBA.
DGMGRL> show configuration
Configuration - cfg_dataprod
Protection Mode: MaxPerformance
Members:
Primaire - Primary database
Standby - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 49 seconds ago)