ARCHIVE GAP DETECTION AND RESOLUTION IN DG ENVIRONMENT.pdf

April 27, 2017 | Author: G.R.THIYAGU ; Oracle DBA | Category: N/A
Share Embed Donate


Short Description

Download ARCHIVE GAP DETECTION AND RESOLUTION IN DG ENVIRONMENT.pdf...

Description

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

ARCHIVE GAP

An archive gap means, a set of archived redo logs that could not be transmitted to the Standby site from the Primary database. Mostly this problem occurs the network connectivity becomes unavailable between the Primary and Standby site. When the network is available again Data Guard resumes redo data transmission from the Primary to Standby site. Oracle DG provides 2 methods for GAP resolution. They are AUTOMATIC and FAL.  Automatic Gap Resolution

&

FAL Gap Resolution

Let’s consider an extended n/w failure occurred between the Primary and Standby machines which causes the Standby is very far behind the Primary database, then an RMAN INCREMENTAL BACKUP can be used to roll the Standby database forward faster than redo log apply. When the archived logs are missing on the Standby database, simply we can ship missing logs from the Primary to Standby database; (If missing logs are very less count e.g. (below 15). We need to register all Shipped logs in the Standby database so that Gap can be resolved. In this article I will demonstrate how to resolve archive log gaps using following methods.  Manually resolving a Gap (by Shipping logs from Primary to Standby)  To Roll Forward a Standby database using RMAN Incremental backup. DISASTER RECOVERY CONFIGURATION

Primary Database



192.168.222.131



DEV Database Server

Standby Database



192.168.222.132



UAT Database Server

Primary database db_unique_name



crms

Standby database db_unique_name



stbycrms

MANUALLY RESOLVING GAPS # On Primary database SYS> select name, db_unique_name, database_role from v$database; NAME

DB_UNIQUE_NAME

DATABASE_ROLE

--------- ------------------------------ ---------------CRMS

crms

PRIMARY

# On Standby database SYS> select name, db_unique_name, database_role from v$database; NAME

DB_UNIQUE_NAME

DATABASE_ROLE

OPEN_MODE

--------- ------------------------------ ---------------- -----------CRMS

stbycrms

PHYSICAL STANDBY

MOUNTED

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

# On Primary database SYS> select thread#, max(sequence#) from v$archived_log group by thread#; THREAD# MAX(SEQUENCE#) ---------- -------------1 551 # On Standby database SYS> select thread#, max(sequence#) from v$archived_log where applied='YES' group by thread#; THREAD# MAX(SEQUENCE#) ---------- -------------1 551

# Standby database is waiting for SEQ# 552 SYS> select process, sequence#, status from v$managed_standby; PROCESS

SEQUENCE# STATUS

--------- ---------- -----------ARCH

551 CLOSING

ARCH

558 CLOSING

ARCH

0 CONNECTED

ARCH

0 CONNECTED

RFS

0 IDLE

RFS

0 IDLE

RFS

559 IDLE

RFS

0 IDLE

MRP0

552 WAIT_FOR_GAP

9 rows selected.

# Snippet of Standby alert log $ cd /u01/app/oracle/diag/rdbms/stbycrms/stbycrms/trace $ tail -f alert_stbycrms.log Fetching gap sequence in thread 1, gap sequence 552-556 .. ... FAL[client]: Failed to request gap sequence GAP - thread 1 sequence 552-556 DBID 1613387466 branch 913081878 FAL[client]: All defined FAL servers have been attempted.

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

DETECTING GAPS

Oracle Data Guard provide us with a simple view (v$archive_gap) to detect a gap. On Standby database SYS> select * from v$archive_gap; THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# ---------- ------------- -------------1

552

556

Output of Standby database is currently missing log files from sequence# 552 to 556; the Standby database is 5 logs behind the Primary database. ORACLE NOTE: Refer BUG #10072528 V$ARCHIVE_GAP may not detect archive gap when Physical Standby is open read only. FIND ARCHIVE LOGS AT PRIMARY SERVER

After identifying a gap (as shown above), as a DBA you need to query the primary database to locate the archived redo logs on the primary database. I have configured the local archive destination on primary is LOG_ARCHIVE_DEST_1.

# On Primary database (SEQUENCE 552 to 556) SYS> select name FROM v$archived_log WHERE thread# = 1 AND dest_id = 1 AND sequence# BETWEEN 552 and 556; NAME -------------------------------------------------------------------------------------/u01/app/oracle/flash_recovery_area/CRMS/archivelog/2016_06_01/o1_mf_1_552_cnvodqq5_.arc /u01/app/oracle/flash_recovery_area/CRMS/archivelog/2016_06_01/o1_mf_1_553_cnvohcy1_.arc /u01/app/oracle/flash_recovery_area/CRMS/archivelog/2016_06_01/o1_mf_1_554_cnvokk6z_.arc /u01/app/oracle/flash_recovery_area/CRMS/archivelog/2016_06_01/o1_mf_1_555_cnvom1l4_.arc /u01/app/oracle/flash_recovery_area/CRMS/archivelog/2016_06_01/o1_mf_1_556_cnvomxkz_.arc

Copy the above redo log files to the Physical Standby database and register them using the ALTER DATABASE REGISTER LOGFILE ... SQL statement on the Physical Standby database. COPY ARCHIVELOG FILES TO STANDBY

$ ls /u01/app/oracle/flash_recovery_area/CRMS/archivelog/2016_06_01/ o1_mf_1_553_cnvohcy1_.arc

o1_mf_1_555_cnvom1l4_.arc

o1_mf_1_554_cnvokk6z_.arc

o1_mf_1_556_cnvomxkz_.arc

o1_mf_1_552_cnvodqq5_.arc

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

COPY ARCHIVE LOG FILES TO STANDBY

# Example to transfer archive logs to Standby Server $ scp log_file_n.arc oracle@standby:/archive_log_location/log_file_n.arc $ scp o1_mf_1_552_cnvodqq5_.arc o1_mf_1_553_cnvohcy1_.arc o1_mf_1_554_cnvokk6z_.arc o1_mf_1_555_cnvom1l4_.arc o1_mf_1_556_cnvomxkz_.arc [email protected]:/u01/app/oracle/ flash_recovery_area/STBYCRMS/archivelog/2016_06_01/ [email protected]'s password:

o1_mf_1_552_cnvodqq5_.arc

100%

29KB

29.0KB/s

00:00

o1_mf_1_553_cnvohcy1_.arc

100%

73KB

72.5KB/s

00:00

o1_mf_1_554_cnvokk6z_.arc

100%

179KB

179.0KB/s

00:00

o1_mf_1_555_cnvom1l4_.arc

100%

61KB

60.5KB/s

00:00

o1_mf_1_556_cnvomxkz_.arc

100%

19KB

19.0KB/s

00:00

As per above example you need to transfer all archive logs to the Standby Server. REGISTER LOGFILES AT STANDBY SERVER

SQL> alter database register logfile '/directory path/filename'; SYS> alter database register logfile '/u01/app/oracle/flash_recovery_area/STBYCRMS/archive log/2016_06_01/o1_mf_1_552_cnvodqq5_.arc'; Database altered. SYS> alter database register logfile '/u01/app/oracle/flash_recovery_area/STBYCRMS/archive log/2016_06_01/ o1_mf_1_553_cnvohcy1_.arc'; Database altered. .

SYS> alter database register logfile '/u01/app/oracle/flash_recovery_area/STBYCRMS/archive log/2016_06_01/o1_mf_1_554_cnvokk6z_.arc'; Database altered. SYS> alter database register logfile '/u01/app/oracle/flash_recovery_area/STBYCRMS/archive log/2016_06_01/o1_mf_1_555_cnvom1l4_.arc'; Database altered. SYS> alter database register logfile '/u01/app/oracle/flash_recovery_area/STBYCRMS/archive log/2016_06_01/o1_mf_1_556_cnvomxkz_.arc'; Database altered. Recovery process would start automatically or else stop the managed recovery process (MRP) and re-start it once again; that’s it!

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

WHY WE NEED TO REGISTER ARCHIVE LOGS AT STANDBY ? On Primary to Standby Server, archive logs were not transferred by the log transfer service, (but through SCP) so the managed recovery process will not have any info about these logs. Then manually transferred logs need to be registered with the managed recovery process before they applied by the log apply service.

CHECK WITH FOLLOWING QUERIES

SQL> archive log list; SQL> select max(sequence#) from v$archived_log; SQL> select sequence#, archived, applied from v$archived_log where applied='YES' order by 1; This is simple way to handle manually Resolving Gaps.

ROLL FORWARD PHYSICAL STANDBY USING RMAN INCREMENTAL BACKUP The Standby database lags far behind from the Primary database then i noticed that there is a huge sequence mismatch between Primary & Standby database. There could be some reasons.  Network unavailable between Primary and Standby database.  Archive logs deleted/corrupted on Primary database. In cases where a Physical Standby database is out of Sync with Primary database. In case of archive logs are missing/corrupt we have to rebuild the Standby from scratch. If the database size in terabytes again rebuilding the Standby database could be a tedious job; but we a solution to resolve this kind of issues. As a DBA you can go for an RMAN Incremental backup to sync a Physical Standby with the Primary database; using the command RMAN BACKUP INCREMENTAL FROM SCN … create a backup on the Primary database that starts at the standby database’s current SCN, which can then be used to roll the Standby database forward in time. Please assume bunch of archive logs are deleted/corrupted on the Primary database Server before they are transferring to the Standby database Server. In this case, I demonstrate an efficient way to Sync Standby with Primary (an alternative to rebuild the Standby DB)! DISASTER RECOVERY

11g DATABASE SERVER FOR PRIMARY



192.168.222.133



DB_UNIQUE_NAME



CRMS

11g DATABASE SERVER FOR STANDBY



192.168.222.134



DB_UNIQUE_NAME



STBYCRMS

Oracle Database Software Version is 11.2.0.1.0 on OEL(5.5)

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

# On Primary database SYS> select name, db_unique_name, database_role from v$database; NAME

DB_UNIQUE_NAME

DATABASE_ROLE

--------- ------------------------------ ---------------CRMS

crms

PRIMARY

# On Standby database SYS> select name, db_unique_name, database_role, open_mode from v$database; NAME

DB_UNIQUE_NAME

DATABASE_ROLE

OPEN_MODE

--------- ------------------------------ ---------------- -------------------CRMS

stbycrms

PHYSICAL STANDBY MOUNTED

# On Primary database (Capture SYS> select thread#, max(sequence#) from v$archived_log group by thread#; THREAD# MAX(SEQUENCE#) ---------- -------------1

653

# On Standby database SYS> select thread#, max(sequence#) from v$archived_log where applied='YES' group by thread#; THREAD# MAX(SEQUENCE#) ---------- -------------1

558

Note the difference, On Standby last applied SEQUENCE# 558 but on Primary SEQUENCE# 653 # Finding Archive Gap SEQ# at Standby database SYS> select * from v$archive_gap; THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# ---------- ------------- -------------1

559

644

SYS> @archive_gap.sql DB_NAME

HOSTNAME

LOG_ARCHIVED LOG_APPLIED APPLIED_TIME

LOG_GAP

---------- -------------- ------------ ----------- -------------- ------CRMS

OEL5

653

558

01-JUN/04:33

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

95

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

CANCEL MANAGED RECOVERY PROCEES

# On Standby database SYS> alter database recover managed standby database cancel; Database altered.

GET LAST SCN OF THE STANDBY DATABASE

Last SCN of the STANDBY, will be used for the RMAN Incremental backup at Primary DB Server.

# On the Standby database Server (Checking last SCN of the Standby) SYS> select current_scn from v$database; CURRENT_SCN ----------3473651 # On the Primary database Server (Capture current_scn at primary) SYS> select current_scn from v$database; CURRENT_SCN ----------4538393

Note the SCN DIFFERENCE  4538393 – 3473651 = 1064742 (Now the Standby is lag behind). But I want to know how long the Standby database is far behind in terms of (hours/days). To know that I used the scn_to_timestamp function to translate the SCN to timestamp.

# On Primary database SYS> select scn_to_timestamp(4538393) from dual; SCN_TO_TIMESTAMP(4538393) --------------------------------------01-JUN-16 11.12.52.000000000 PM

# I execute following SQL

Statement

at Primary database (NOT workable at Standby)

SYS> select scn_to_timestamp(3473651) from dual; SCN_TO_TIMESTAMP(3473651) -------------------------------------------------01-JUN-16 04.32.44.000000000 AM The Standby database far behind more than 18 hours from the Primary database. NOTE: Query NOT WORKABLE in OPEN READ ONLY MODE or MOUNTED MODE.

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

CHECKING ARCHIVE LOGS AT PRIMARY

$ ls /u01/app/oracle/flash_recovery_area/CRMS/archivelog/2016_06_01/ o1_mf_1_645_cnxo02c4_.arc

o1_mf_1_647_cnxo9ndy_.arc

o1_mf_1_649_cnxoc4d6_.arc

o1_mf_1_651_cnxpl4fd_.arc

o1_mf_1_653_cnxpyh0c_.arc

o1_mf_1_646_cnxo2329_.arc

o1_mf_1_648_cnxob5cl_.arc

o1_mf_1_650_cnxp29x7_.arc

o1_mf_1_652_cnxpyd51_.arc

To Sync Standby with Primary we need archive logs SEQUENCE# 559 to SEQUENCE# 644. But these archives are NOT found at Primary Site; then only choice is RMAN Incremental backup.

# Shutdown the Standby database SYS> shutdown immediate; ...

On the Primary, take an Incremental backup from the SCN# (3473651) of the Standby database. The last recorded SCN# (3473651) of the Standby database. # Connect target as Primary database $ rman target sys/passwd@CRMSDB .. connected to target database: CRMS (DBID=1613387466) RMAN> backup incremental from SCN 3473651 database format '/u03/rman-bkp/stby_%U' TAG='FOR_STBY'; Starting backup at 02-JUN-16 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=52 device type=DISK backup will be obsolete on date 09-JUN-16 archived logs will not be kept or backed up channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00003 name=/u01/app/oracle/oradata/crms/undotbs01.dbf input datafile file number=00004 name=/u01/app/oracle/oradata/crms/users01.dbf input datafile file number=00001 name=/u01/app/oracle/oradata/crms/system01.dbf input datafile file number=00002 name=/u01/app/oracle/oradata/crms/sysaux01.dbf input datafile file number=00005 name=/u01/app/oracle/oradata/crms/example01.dbf input datafile file number=00007 name=/u01/app/oracle/oradata/crms/users02.dbf input datafile file number=00006 name=/u01/app/oracle/oradata/crms/users03.dbf input datafile file number=00008 name=/u01/app/oracle/oradata/crms/mytbs01.dbf channel ORA_DISK_1: starting piece 1 at 02-JUN-16 channel ORA_DISK_1: finished piece 1 at 02-JUN-16

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

piece handle=/u03/rman-bkp/stby_03r73ftc_1_1 tag=FOR_STBY comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:13:13 using channel ORA_DISK_1 backup will be obsolete on date 09-JUN-16 archived logs will not be kept or backed up channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including current control file in backup set channel ORA_DISK_1: starting piece 1 at 02-JUN-16 channel ORA_DISK_1: finished piece 1 at 02-JUN-16 piece handle=/u03/rman-bkp/stby_04r73gm6_1_1 tag=FOR_STBY comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:04 Finished backup at 02-JUN-16

CREATE A NEW STANDBY CONTROLFILE

On the Primary database, create a new Standby control file. We can use (SQL*Plus or RMAN) to create a Standby control file; Anyone method is enough.

SYS> alter database create standby controlfile as '/home/oracle/stdb_ctrl.ctl'; Database altered.

Or

# Connect target as Primary & Create control file backup for Standby database RMAN> backup current controlfile for standby format '/u03/rman-bkp/stdb_ctrl.ctl'; Starting backup at 02-JUN-16 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including standby control file in backup set channel ORA_DISK_1: starting piece 1 at 02-JUN-16 channel ORA_DISK_1: finished piece 1 at 02-JUN-16 piece handle=/u03/rman-bkp/stdb_ctrl.ctl tag=TAG20160602T024937 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 02-JUN-16

LISTING CREATED BACKUP SETS

$ ls -l

/u03/rman-bkp/

total 4707832 -rw-r----- 1 oracle oinstall 4792238080 Jun

2 02:42 stby_03r73ftc_1_1

-rw-r----- 1 oracle oinstall

11927552 Jun

2 02:42 stby_04r73gm6_1_1

-rw-r----- 1 oracle oinstall

11927552 Jun

2 02:49 stdb_ctrl.ctl

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

TRANSFER BACKUP SETS TO STANDBY SERVER

Using OS utility to transfer these backups to the Standby Server from Primary Server.

# SCP all backup sets to the Standby Server at Primary Server $ scp * [email protected]:/u03/bkp/ [email protected]'s password: ****** stby_03r73ftc_1_1

100% 4570MB

2.4MB/s

31:43

stby_04r73gm6_1_1

100%

11MB

5.7MB/s

00:02

stdb_ctrl.ctl

100%

11MB

2.8MB/s

00:04

VERIFY RECEIVED BACKUP SETS ON THE STANDBY SERVER

$ ls -l /u03/bkp/ total 4707832 -rw-r----- 1 oracle oinstall 4792238080 Jun

2 05:40 stby_03r73ftc_1_1

-rw-r----- 1 oracle oinstall

11927552 Jun

2 05:40 stby_04r73gm6_1_1

-rw-r----- 1 oracle oinstall

11927552 Jun

2 05:40 stdb_ctrl.ctl

Note the location of all data files & Control file(s) at the Standby Database Server. SYS> startup mount; SYS> spool datafile_names.txt SYS> set lines 100; SYS> column name format a100; SYS> show parameter control_files; SYS> select count(*) from v$datafile; SYS> select file#, name from v$datafile order by file#; SYS> spool off SYS> shut immediate; SYS> ! cat datafile_names.txt

RELOCATE EXISTING CONTROL FILES

# Renamed old control files at Standby Server $ cd /u01/app/oracle/flash_recovery_area/stbycrms/ $ mv control02.ctl /tmp/control02.ctl.bkp $ cd /u01/app/oracle/oradata/stbycrms/ $ mv control01.ctl /tmp/control01.ctl.bkp

NOTE: If you do not want rename control files, you can remove these files at OS level.

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

BRINGUP THE STANDBY INSTANCE – NOMOUNT PHASE

$ export ORACLE_SID=stbycrms $ rman target / connected to target database (not started) RMAN> startup nomount; Oracle instance started Total System Global Area Fixed Size

912306176 bytes 1340244 bytes

Variable Size

536874156 bytes

Database Buffers

369098752 bytes

Redo Buffers

4993024 bytes

# Restore Standby control files from the backup # Replacing newly created controlfile with old files RMAN> restore standby controlfile from '/u03/bkp/stdb_ctrl.ctl'; Starting restore at 02-JUN-16 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=19 device type=DISK channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:03 output file name=/u01/app/oracle/oradata/stbycrms/control01.ctl output file name=/u01/app/oracle/flash_recovery_area/stbycrms/control02.ctl Finished restore at 02-JUN-16

SHUTDOWN THE STANDBY DATABASE & STARTUP MOUNT

RMAN> shutdown immediate; Oracle instance shut down # Startup the database with new controlfile RMAN> startup mount; connected to target database (not started) Oracle instance started database mounted Total System Global Area .. ...

912306176 bytes

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

CATALOG THE INCREMENTAL BACKUP FILES AT STANDBY

RMAN does not know about these backup sets. We must catalog the new backup sets on the Standby database. I.e. when we register these backup files to the Standby database control file with RMAN CATALOG command, the Standby control file gets updated about these backup files. It helps to recover the Standby using these RMAN backup files. # REGISTERING BACKUP SETS RMAN> catalog start with '/u03/bkp'; Starting implicit crosscheck backup at 02-JUN-16 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=18 device type=DISK Crosschecked 3 objects Finished implicit crosscheck backup at 02-JUN-16 Starting implicit crosscheck copy at 02-JUN-16 using channel ORA_DISK_1 Crosschecked 2 objects Finished implicit crosscheck copy at 02-JUN-16 searching for all files in the recovery area cataloging files... cataloging done List of Cataloged Files ======================= File Name: /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_01/o1_mf_1_646_cnxof4nl_.arc File Name: /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_01/o1_mf_1_647_cnxocnkr_.arc File Name: /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_01/o1_mf_1_652_cnxpz1lz_.arc File Name: /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_01/o1_mf_1_645_cnxodgj5_.arc File Name: /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_01/o1_mf_1_651_cnxodqq5_.arc File Name: /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_01/o1_mf_1_650_cnxp48lh_.arc File Name: /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_01/o1_mf_1_649_cnxoc5oq_.arc File Name: /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_01/o1_mf_1_653_cnxpzpvs_.arc File Name: /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_01/o1_mf_1_648_cnxobwyc_.arc

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

searching for all files that match the pattern /u03/bkp List of Files Unknown to the Database ===================================== File Name: /u03/bkp/stby_04r73gm6_1_1 File Name: /u03/bkp/stby_03r73ftc_1_1 File Name: /u03/bkp/stdb_ctrl.ctl Do you really want to catalog the above files (enter YES or NO)? Y cataloging files... cataloging done List of Cataloged Files ======================= File Name: /u03/bkp/stby_04r73gm6_1_1 File Name: /u03/bkp/stby_03r73ftc_1_1 File Name: /u03/bkp/stdb_ctrl.ctl

APPLY INCREMENTAL BACKUP TO THE STANDBY DATABASE

The recovery process will use cataloged incremental backup sets because we have registered. This backup taken for Physical Standby DB Sync; noredo key word is required. Check here

# Recover the database with Catalog incremental backup sets RMAN> recover database noredo; Starting recover at 02-JUN-16 using channel ORA_DISK_1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 06/02/2016 05:55:09 RMAN-06094: datafile 6 must be restored

If data files have been added to the Primary database during the archive log gap time, they were not included in the incremental backup sets. We need to register newly created files to the Standby database. We can find newly created files using CURRENT_SCN of the Standby.

# Execute the following query at Primary DB - (Last SCN of the Standby database) SYS> select file#, name from v$datafile where creation_change# > 3473651; FILE# NAME ---------- -------------------------------------------6 /u01/app/oracle/oradata/crms/users03.dbf

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

Newly created files should be restored at Standby before recovery operation.

RMAN> run {restore datafile 6;} Starting restore at 02-JUN-16 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00006 to /u01/app/oracle/oradata/stbycrms/users03.dbf channel ORA_DISK_1: reading from backup piece /u03/bkp/stby_03r73ftc_1_1 channel ORA_DISK_1: piece handle=/u03/bkp/stby_03r73ftc_1_1 tag=FOR_STBY channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:08 Finished restore at 02-JUN-16

# Recover the Standby database using Incremental backup

Sets

RMAN> recover database noredo; Starting recover at 02-JUN-16 using channel ORA_DISK_1 channel ORA_DISK_1: starting incremental datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set destination for restore of datafile 00001: /u01/app/oracle/oradata/stbycrms/system01.dbf destination for restore of datafile 00002: /u01/app/oracle/oradata/stbycrms/sysaux01.dbf destination for restore of datafile 00003: /u01/app/oracle/oradata/stbycrms/undotbs01.dbf destination for restore of datafile 00004: /u01/app/oracle/oradata/stbycrms/users01.dbf destination for restore of datafile 00005: /u01/app/oracle/oradata/stbycrms/example01.dbf destination for restore of datafile 00007: /u01/app/oracle/oradata/stbycrms/users02.dbf destination for restore of datafile 00008: /u01/app/oracle/oradata/stbycrms/mytbs01.dbf channel ORA_DISK_1: reading from backup piece /u03/bkp/stby_03r73ftc_1_1 channel ORA_DISK_1: piece handle=/u03/bkp/stby_03r73ftc_1_1 tag=FOR_STBY channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:42:18 Finished recover at 02-JUN-16

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

All changed blocks has been captured in the incremental backup and also updated at the standby database, thus brings the Standby database up to date with the primary database.

# Start MRP at Standby database SYS> alter database recover managed standby database disconnect; Database altered.

# Check CURRENT_SCN of the Standby Database & Primary database SYS> select current_scn from v$database; ... Check the SCN’s in Primary and Standby it should be close to each other. ARCHIVE LOG SEQUENCE DETAILS AT PRIMARY & STANDBY DATABASE

# Maximum generated LOG SEQUENCE# at Primary SYS> select thread#, max(sequence#) from v$archived_log group bythread#; THREAD# MAX(SEQUENCE#) ---------- -------------1

773

# Maximum archive log SEQUENCE# applied at Standby SYS> select thread#, max(sequence#) from v$archived_log where applied='YES' group by thread#; THREAD# MAX(SEQUENCE#) ---------- -------------1

773

SYS> select process, status, thread#, sequence#, block#, blocks from v$managed_standby; ...

Wow! Successfully Standby database

Synced

with Primary database.

Check alert.log and status of processes if any problems;

REFERENCE DOCS :

https://docs.oracle.com/cd/E11882_01/server.112/e41134/rman.htm#SBYDB00759 http://docs.oracle.com/cd/B19306_01/backup.102/b14191/rcmdupdb.htm#sthref955 https://web.stanford.edu/dept/itss/docs/oracle/10gR2/backup.102/b14191/rcmdupdb008.htm

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

BELOW ARE THE STEPS I FOLLOWED FOR A SUCCESSFUL RECOVERY

# Check the archive log gap SEQUENCE# SQL> select * from v$archive_gap; # Find last SCN of the Standby database SQL> select current_scn from v$database; # Cancel the recovery SQL> alter database recover managed standby database cancel; # Shutdown the Standby SQL> shutdown immediate; # Backup the Source (Primary) using from SCN RMAN> backup incremental from SCN XXXXX database format '/bkp_location/stby_U%' # Backup current control file of the Source (Primary database) RMAN> backup current controlfile for standby format '/bkp_location/stby_ctrl.ctl'; # SCP backup

Sets

to the target(Standby) Server from Primary

$ scp /bkp_location/* oracle@standby:/standby_location/ # Startup Standby database at NOMOUNT mode RMAN> startup nomount; # Restore control files from the backup RMAN> restore standby controlfile from '/standby _location'; # Shutdown the Standby database RMAN> shutdown immediate; # Startup the Standby database at MOUNT RMAN> startup mount; # Register backup sets by a process called cataloging RMAN> catalog startwith '/standby _location'; # Perform Recover RMAN> recover database noredo; # Restart MRP at standby SQL> alter database recover managed standby database disconnect from session; # Check SCN of the Primary and Standby database SQL> select current_scn from v$database; These are

Steps

I have done to roll the Standby database forward in time. That’s it!

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

METHODS OF GAP RESOLUTION

 Automatic Gap Resolution  FAL (Fetch Archive Log) Gap Resolution  Manual Gap Resolution  Roll forward using RMAN Incremental Backup (Physical Standby) AUTOMATIC GAP RESOLUTION

If connectivity is lost between the Primary and Standby databases (due to network problems), redo data being generated on the primary database cannot be sent to the Standby database. Once a connection is reestablished, the missing archived redo log files are automatically detected by Data Guard, which then automatically transmits the missing archived redo log files to the Standby databases. The Standby databases are synchronized with the Primary database, without manual intervention by the DBA. How this happens? Let’s dig into deep. Automatic Gap Resolution is performed automatically by the Log Transport Services. Basically the currently transferred Redo is compared with the last received. On Primary ARCH/LGWR to transfer archived redo logs to the Standby. On the Standby RFS process receives archive redo log file. RFS process

Compares

the

Sequence

number of currently being archived file with the sequence

number of previously received archived redo file; (if currently being archived redo file sequence# is greater than the last sequence# received plus one, there is a gap). An archived redo log file is uniquely identified by its sequence number and thread number.  o1_mf_1_648_cnxob5cl_.arc



Last archived log file.

 o1_mf_1_652_cnxpyd51_.arc



Currently being archived file.

Now 3 files are missing. There is a gap between both files, then RFS automatically requests the missing redo log sequence# from the Primary DB again via the ARCH-RFS Heartbeat Ping. The archiver of the Primary then retransmits these missing archived redo files.  o1_mf_1_649_cnxoc4d6_.arc, o1_mf_1_650_cnxp29x7_.arc, o1_mf_1_651_cnxpl4fd_.arc This type of Gap Resolution is using the Primary database

Serving

Service

defined in log_archive_dest_n on the

this Standby database.

SYS> show parameter log_archive_dest_2; NAME

TYPE

VALUE

----------------------- ----------- -------------------------------------------log_archive_dest_2

string

Service=stby_crmsdb

LGWR ASYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stbycrms

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

The archiver process of the Primary database polls the Standby databases every minute (Referred to as heartbeat) to see if there is a gap in the sequence of archived redo logs. If a gap is detected, the ARCH process sends the missing archived redo log files to the Standby databases that reported the gap. Once a gap is resolved then the Transport Process (ARCH/LGWR) is notified about the Resolution of the Gap. FAL GAP RESOLUTION

As I said above, RFS receives an archive log on the Standby database, then the archive logs are registered in the Standby Control file with name and location. Missing log files are typically detected by the Log Apply Services (MRP) on the Standby database. If the archived redo log file is missing/corrupted for any reason (eg. it got deleted). FAL is required to resolve a Gap, to obtain a new copy of the corrupted or deleted file. WHY ESPECIALLY FAL IS REQUIRED ? Since MRP has NO direct communications (LOG TRANSPORT SERVICES) of the primary database; it must use the FAL_SERVER and FAL_CLIENT initialization parameters to resolve the gap. Both of these parameters must be set in the Standby Initialization parameter file. The FAL_CLIENT parameter is no longer required since Oracle 11g R2. In earlier releases, you set the FAL_CLIENT parameter on the Standby database. FAL_SERVER AND FAL_CLIENT

FAL_CLIENT and FAL_SERVER need to be defined in the initialization parameter file of the Standby database(s). They mainly used for GAP RESOLUTION through FAL background process. Using FAL parameters the MRP in the Physical Standby database checks automatically and also Resolving gaps at the time redo is applied. FAL_SERVER = NET_SERVICE_NAME of Primary database.  From where the missing archive log(s) Should be requested. FAL_CLIENT = NET_SERVICE_NAME of Standby database.  The destination where the FAL_SERVER database Should send the archived log(s). SYS> show parameter fal; NAME

# On Standby database TYPE

VALUE

------------------------------------ ----------- -----------------------------fal_client

string

STBY_CRMSDB

fal_server

string

CRMSDB

In earlier release when you set FAL_CLIENT parameter on the Standby database, the Primary database (FAL_SERVER) uses Standby database (NET SERVICE NAME) to connect the Standby DB.

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

The Parameter log_archive_dest_n on FAL_SERVER database which is pointing to the Standby database to resolve the Gap Resolution.. # On Primary database SYS> show parameter log_Archive_dest_2; NAME

TYPE

VALUE

--------------------- ----------- -----------------------------log_archive_dest_2

string

service=stby_crmsdb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stbycrms

FAL_SERVER:

An Oracle NET SERVICE NAME (TNS-Alias or Connect Descriptor). This parameter

must be configured on the Standby database System that points from where the missing archive log(s)

Should

be requested. It’s recommended to set FAL_SERVER on the Primary DB with the

value of the Standby database NET SERVICE NAME thus helps when you do Switch over event. Once the Log Apply Services (MRP) detect an ARCHIVE GAP, then it sends a FAL Request to the FAL_SERVER; Once communication has been established with the Primary database, it passes the Sequence number of archived files (which are causing for the archive gap) to retransmit from the archiver process of the Primary database; and additionally it passes the service name defined by the FAL_CLIENT parameter to the Primary ARCH process. Fetching gap sequence in thread 1, gap sequence 1076-1077 FAL[client]: Trying FAL server: CRMSDB

An ARCH Process on the FAL_SERVER tries to pick up the requested

Sequences

database and sends them to the FAL_CLIENT. I.e. The Primary database ARCH process

from that Ships

the

requested archived logs to the remote archive destination of corresponding service name. # SNIPPET OF STANDBY ALERT.LOG RFS[54]: Opened log for thread 1 sequence 1076 dbid 1613387466 branch 913081878 Media Recovery Log /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_04/o1_mf_1_1076_co5qn3sd_.arc

RFS[55]: Opened log for thread 1 sequence 1077 dbid 1613387466 branch 913081878 Media Recovery Log /u01/app/oracle/flash_recovery_area/STBYCRMS/archivelog/2016_06_04/o1_mf_1_1077_co5qn4db_.arc

In order to successfully complete a Gap Request the requested archive log Sequence(s) must be available on the FAL_SERVER database. When you have multiple Physical Standby databases, the FAL mechanism can automatically retrieve missing archived redo log files from another Physical Standby database.

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

RESOLVING ARCHIVE GAP BETWEEN PRIMARY & STANDBY DATBASE

IF THE FAL_SERVER IS NOT ABLE TO RESOLVE THE GAP? The FAL-Request fails and a corresponding Message will be put in the ALERT.LOG of the Standby database. Example taken for some other SEQUENCE (1078 – 1081).

FAL[client]: Failed to request gap sequence GAP - thread 1 sequence 1078-1081 DBID 1613387466 branch 913081878 FAL[client]: All defined FAL servers have been attempted. -------------------------------------------------------------

Every minute the Primary database polls its Standby databases to see if there are gaps in the sequence of archived redo log files.  The FAL (Client) requests to transfer archived redo log files automatically.  The FAL (Server) services the FAL requests coming from the FAL Client.  A separate FAL server is created for each incoming FAL client. FAL is available since Oracle 9.2.0 for Physical Standby database and Oracle 10.1.0 for Logical Standby databases. In 11g, if you not set FAL_CLIENT parameter, the Primary database will obtain service name from related LOG_ARCHIVE_DEST_n parameter. REFERENCE LINKS

http://flylib.com/books/en/1.145.1.66/1/ https://docs.oracle.com/cd/B19306_01/server.102/b14239/log_transport.htm#i1268294 Oracle Note: Data Guard Gap Detection and Resolution Possibilities [ID 1537316.1]

Oracle DBA Technology Explored by Gunasekaran , Thiyagu

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF