4.4 KiB
Executable File
Dataguard configuration
DGMGRL> show configuration
Configuration - asty
Protection Mode: MaxPerformance
Members:
astyprd - Primary database
astydrp - Physical standby database
DGMGRL> show database 'astydrp'
Database - astydrp
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: 803.00 KByte/s
Real Time Query: OFF
Instance(s):
ASTYDRP
Simulate a gap
Stop the standby database.
On primary, switch 3-4 times the archivelog on primary and delete all archived logs:
SQL> alter system archive log current;
RMAN> delete noprompt force archivelog all;
To complicate the situation, add 2 new datafile and create a new tablespace on primary.
SQL> alter tablespace SYSTEM add datafile size 10M autoextend OFF;
SQL> alter tablespace SYSAUX add datafile size 10M autoextend OFF;
SQL> create tablespace NAL_HUTTA datafile size 10M autoextend ON next 10M;
Repeat switch/delete archivelog operation on primary:
SQL> alter system archive log current;
RMAN> delete noprompt force archivelog all;
Start the standby database in MOUNT mode, let it trying to resolve the gap and check the status of the syncronisation.
On primary:
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
set lines 200
select THREAD#, max(SEQUENCE#), max(FIRST_TIME),max(NEXT_TIME),max(COMPLETION_TIME)
from gv$archived_log group by THREAD#;
On standby:
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
set lines 200
select THREAD#, max(SEQUENCE#), max(FIRST_TIME),max(NEXT_TIME),max(COMPLETION_TIME)
from gv$archived_log
where APPLIED='YES' group by THREAD#;
Syncronize the standby
Cancel MRP on standby:
DGMGRL> edit database 'astydrp' set STATE='LOG-APPLY-OFF';
Try to recover the standby and note down the required SCN:
SQL> recover standby database;
Normaly it should be the same as:
SQL> select 1+CURRENT_SCN from v$database;
On primary, identify all datafiles created after this SCN; in my example SCN=5681090
SQL> select FILE#,NAME from v$datafile where CREATION_CHANGE# >= 5681090;
Backup datafiles and generate a new standby controlfile:
run{
set nocfau;
allocate channel ch01 device type disk format '/mnt/yavin4/tmp/_oracle_/orabackup/temp/%d_%U_%s_%t.bck';
allocate channel ch02 device type disk format '/mnt/yavin4/tmp/_oracle_/orabackup/temp/%d_%U_%s_%t.bck';
allocate channel ch03 device type disk format '/mnt/yavin4/tmp/_oracle_/orabackup/temp/%d_%U_%s_%t.bck';
allocate channel ch04 device type disk format '/mnt/yavin4/tmp/_oracle_/orabackup/temp/%d_%U_%s_%t.bck';
backup as compressed backupset datafile 17,18,19;
release channel ch01;
release channel ch02;
release channel ch03;
release channel ch04;
allocate channel ch01 device type disk format '/mnt/yavin4/tmp/_oracle_/orabackup/temp/%d_%U_%s_%t.ctl';
backup current controlfile;
release channel ch01;
}
Restart the standby in mode NOMOUNT and restore the standby controfile:
RMAN> restore standby controlfile from '/mnt/yavin4/tmp/_oracle_/orabackup/temp/ASTY_0l1678fs_21_1_1_21_1113825788.ctl';
Alternatively, you can restore the standby controfile from active database:
RMAN> restore standby controlfile from service ASTYPRD_DGMGRL;
Mount the standby database:
RMAN> alter database mount;
Restore and new datafiles:
RMAN> restore datafile 17,18,19;
Catalog recovery area and old standby datafiles:
RMAN> catalog start with '/data/ASTYDRP' noprompt;
RMAN> catalog start with '/fra/ASTYDRP' noprompt;
At this moment, because of fresh restored controlfile, Oracle see the datafiles as datafile copy:
RMAN> list datafilecopy all;
Switch database to copy:
RMAN> switch database to copy;
To recover standby using from SCN backupset, we can proceed from active database or using physical backupset:
rman auxiliary /
run {
allocate channel pri1 device type DISK;
allocate channel pri2 device type DISK;
allocate channel pri3 device type DISK;
allocate channel pri4 device type DISK;
recover database from service ASTYPRD_DGMGRL using compressed backupset section size 8G;
}
Clear standby redolog:
SQL> select 'ALTER DATABASE CLEAR LOGFILE GROUP '||GROUP#||';' from v$standby_log;
Enable MRP:
DGMGRL> edit database 'astydrp' set STATE='ONLINE';