周末不忘写一篇文档!
DG出现故障基本上有两个方法,一个是全量备份恢复,一个是增量备份恢复,这里我们测试增量备份恢复方法。
- 一、环境描述
- Oracle 12c ASM
- RHEL 7.0
- 单实例到单实例的DataGuard
- 二、问题描述
- 出现GAP
- sql> select * from v$archive_gap;
- THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# CON_ID
- ---------- ------------- -------------- ----------
- 1 223 225 1
- sql>
- sql> select message from v$dataguard_status;
- MESSAGE
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ARC0: Archival started
- ARC1: Archival started
- ARC2: Archival started
- ARC1: Becoming the 'no FAL' ARCH
- ARC2: Becoming the heartbeat ARCH
- ARC2: Becoming the active heartbeat ARCH
- ARC3: Archival started
- Attempt to start background Managed Standby Recovery process
- MRP0: Background Managed Standby Recovery process started
- Primary database is in MAXIMUM PERFORMANCE mode
- RFS[1]: Assigned to RFS process (PID:3973)
- MESSAGE
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- RFS[2]: Assigned to RFS process (PID:3984)
- RFS[3]: Assigned to RFS process (PID:3986)
- ARC3: Beginning to archive thread 1 sequence 222 (7930074-7930162)
- RFS[4]: Assigned to RFS process (PID:3988)
- ARC3: Completed archiving thread 1 sequence 222 (0-0)
- Managed Standby Recovery starting Real Time Apply
- Media Recovery Log +DATADG/arch/log_1_222_961866198_585bafa7.arc
- Media Recovery Waiting for thread 1 sequence 223
- Fetching gap sequence in thread 1,gap sequence 223-225
- 20 rows selected.
- sql>
- sql> select name,value from v$dataguard_stats;
- NAME VALUE
- -------------------------------- ----------------------------------------------------------------
- transport lag +00 00:07:57
- apply lag
- apply finish time
- estimated startup time 16
- sql>
- 三、处理过程
- 1、备库执行,查看最新scn,取最小值
- sql> col current_scn for 999999999
- sql> select current_scn from v$database;
- CURRENT_SCN
- -----------
- 7930161
- sql> select min(f.checkpoint_change#) from v$datafile_header f,v$datafile d where f.file# =d.file# and d.enabled != 'READ ONLY' ;
- MIN(F.CHECKPOINT_CHANGE#)
- -------------------------
- 2.主库执行
- --查看是否有新创建的数据文件
- sql> select FILE#,to_char(CREATION_TIME,'yyyy-mm-dd hh24:mi:ss') CREATION_TIME,STATUS,LAST_TIME,name from v$datafile where CREATION_CHANGE#>7930161;
- no rows selected
- 3.主库增量备份数据文件和控制文件
- run
- {
- allocate channel t1 type disk;
- allocate channel t2 type disk;
- BACKUP as compressed backupset INCREMENTAL FROM SCN 7930161 DATABASE FORMAT '/home/oracle/dg_%U' tag 'FORSTANDBY';
- release channel t1;
- release channel t2;
- }
- ALTER DATABASE CREATE standby controlfile AS '/home/oracle/standby_20171217.ctl';
- RMAN>
- RMAN> run
- 2> {
- 3> allocate channel t1 type disk;
- 4> allocate channel t2 type disk;
- 5> BACKUP as compressed backupset INCREMENTAL FROM SCN 7930161 DATABASE FORMAT '/home/oracle/dg_%U' tag 'FORSTANDBY';
- 6> release channel t1;
- 7> release channel t2;
- 8> }
- allocated channel: t1
- channel t1: SID=76 device type=DISK
- allocated channel: t2
- channel t2: SID=56 device type=DISK
- Starting backup at 17-DEC-2017 08:07:54
- channel t1: starting compressed full datafile backup set
- channel t1: specifying datafile(s) in backup set
- input datafile file number=00001 name=+DATADG/ORCL/DATAFILE/system.258.954622821
- input datafile file number=00006 name=+DATADG/ORCL/DATAFILE/users.259.954622957
- channel t1: starting piece 1 at 17-DEC-2017 08:07:55
- channel t2: starting compressed full datafile backup set
- channel t2: specifying datafile(s) in backup set
- input datafile file number=00003 name=+DATADG/ORCL/DATAFILE/sysaux.257.954622639
- input datafile file number=00004 name=+DATADG/ORCL/DATAFILE/undotbs1.260.954622959
- channel t2: starting piece 1 at 17-DEC-2017 08:07:55
- channel t2: finished piece 1 at 17-DEC-2017 08:08:10
- piece handle=/home/oracle/dg_0msmb3ur_1_1 tag=FORSTANDBY comment=NONE
- channel t2: backup set complete,elapsed time: 00:00:15
- channel t2: starting compressed full datafile backup set
- channel t2: specifying datafile(s) in backup set
- including current control file in backup set
- channel t2: starting piece 1 at 17-DEC-2017 08:08:13
- channel t2: finished piece 1 at 17-DEC-2017 08:08:14
- piece handle=/home/oracle/dg_0nsmb3va_1_1 tag=FORSTANDBY comment=NONE
- channel t2: backup set complete,elapsed time: 00:00:01
- channel t1: finished piece 1 at 17-DEC-2017 08:08:38
- piece handle=/home/oracle/dg_0lsmb3ur_1_1 tag=FORSTANDBY comment=NONE
- channel t1: backup set complete,elapsed time: 00:00:43
- Finished backup at 17-DEC-2017 08:08:38
- released channel: t1
- released channel: t2
- RMAN> ALTER DATABASE CREATE standby controlfile AS '/home/oracle/standby_20171217.ctl';
- Statement processed
- RMAN> exit
- Recovery Manager complete.
- <roidb01:orcl:/home/oracle>$ls
- dg_0lsmb3ur_1_1 dg_0msmb3ur_1_1 dg_0nsmb3va_1_1 standby_20171217.ctl
- <roidb01:orcl:/home/oracle>$scp /home/oracle/* oracle@192.168.1.112:/home/oracle
- dg_0lsmb3ur_1_1 100% 472KB 472.0KB/s 00:00
- dg_0msmb3ur_1_1 100% 1640KB 1.6MB/s 00:00
- dg_0nsmb3va_1_1 100% 1136KB 1.1MB/s 00:00
- standby_20171217.ctl 100% 11MB 11.1MB/s 00:00
- <roidb01:orcl:/home/oracle>$
- 4.备库执行恢复数据库
- sqlplus / as sysdba
- startup mount;
- RMAN> backup current controlfile format '/home/oracle/standby_1217.ctl';
- Starting backup at 17-DEC-2017 08:52:45
- 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 current control file in backup set
- channel ORA_DISK_1: starting piece 1 at 17-DEC-2017 08:52:46
- channel ORA_DISK_1: finished piece 1 at 17-DEC-2017 08:52:47
- piece handle=/home/oracle/standby_1217.ctl tag=TAG20171217T085245 comment=NONE
- channel ORA_DISK_1: backup set complete,elapsed time: 00:00:01
- Finished backup at 17-DEC-2017 08:52:47
- RMAN> catalog start with '/home/oracle';
- searching for all files that match the pattern /home/oracle
- ....省略...........
- 报错
- RMAN> recover database noredo;
- Starting recover at 17-DEC-2017 08:57:40
- 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: +DATADG/ORCLDG/DATAFILE/system.258.954626559
- destination for restore of datafile 00006: +DATADG/ORCLDG/DATAFILE/users.261.954626717
- channel ORA_DISK_1: reading from backup piece /home/oracle/dg_0lsmb3ur_1_1
- RMAN-00571: ===========================================================
- RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
- RMAN-00571: ===========================================================
- RMAN-03002: failure of recover command at 12/17/2017 08:57:41
- ORA-19870: error while restoring backup piece /home/oracle/dg_0lsmb3ur_1_1
- ORA-19573: cannot obtain exclusive enqueue for datafile 1
- 解决
- --备库取消实时同步进程
- sql> alter database recover managed standby database cancel;
- Database altered.
- 重新执行恢复
- RMAN> recover database noredo;
- Starting recover at 17-DEC-2017 08:58:23
- 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: +DATADG/ORCLDG/DATAFILE/system.258.954626559
- destination for restore of datafile 00006: +DATADG/ORCLDG/DATAFILE/users.261.954626717
- channel ORA_DISK_1: reading from backup piece /home/oracle/dg_0lsmb3ur_1_1
- channel ORA_DISK_1: piece handle=/home/oracle/dg_0lsmb3ur_1_1 tag=FORSTANDBY
- channel ORA_DISK_1: restored backup piece 1
- channel ORA_DISK_1: restore complete,elapsed time: 00:00:01
- 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 00003: +DATADG/ORCLDG/DATAFILE/sysaux.259.954626615
- destination for restore of datafile 00004: +DATADG/ORCLDG/DATAFILE/undotbs1.260.954626701
- channel ORA_DISK_1: reading from backup piece /home/oracle/dg_0msmb3ur_1_1
- channel ORA_DISK_1: piece handle=/home/oracle/dg_0msmb3ur_1_1 tag=FORSTANDBY
- channel ORA_DISK_1: restored backup piece 1
- channel ORA_DISK_1: restore complete,elapsed time: 00:00:01
- Finished recover at 17-DEC-2017 08:58:26
- RMAN>
- 备库恢复完数据库后,备库使用当前的控制文件收集备库的数据文件路径信息
- sql> col name for a50
- sql> select file#,name from v$datafile;
- FILE# NAME
- ---------- --------------------------------------------------
- 1 +DATADG/ORCLDG/DATAFILE/system.258.954626559
- 3 +DATADG/ORCLDG/DATAFILE/sysaux.259.954626615
- 4 +DATADG/ORCLDG/DATAFILE/undotbs1.260.954626701
- 6 +DATADG/ORCLDG/DATAFILE/users.261.954626717
- sql>
- 恢复控制文件
- RMAN> shutdown immediate;
- database dismounted
- Oracle instance shut down
- RMAN> exit
- Recovery Manager complete.
- <roidb02:orcldg:/home/oracle>$ls
- dg_0lsmb3ur_1_1 dg_0msmb3ur_1_1 dg_0nsmb3va_1_1 standby_1217.ctl standby_20171217.ctl
- <roidb02:orcldg:/home/oracle>$ls -l
- total 25056
- -rw-r----- 1 oracle oinstall 483328 Dec 17 08:09 dg_0lsmb3ur_1_1
- -rw-r----- 1 oracle oinstall 1679360 Dec 17 08:09 dg_0msmb3ur_1_1
- -rw-r----- 1 oracle oinstall 1163264 Dec 17 08:09 dg_0nsmb3va_1_1
- -rw-r----- 1 oracle asmadmin 10682368 Dec 17 08:52 standby_1217.ctl
- -rw-r----- 1 oracle oinstall 11649024 Dec 17 08:09 standby_20171217.ctl
- <roidb02:orcldg:/home/oracle>$rman target /
- Recovery Manager: Release 12.1.0.2.0 - Production on Sun Dec 17 09:06:25 2017
- Copyright (c) 1982,2014,Oracle and/or its affiliates. All rights reserved.
- connected to target database (not started)
- RMAN> startup nomount;
- Oracle instance started
- Total System Global Area 1241513984 bytes
- Fixed Size 2923872 bytes
- Variable Size 452985504 bytes
- Database Buffers 771751936 bytes
- Redo Buffers 13852672 bytes
- --恢复控制文件
- RMAN> restore controlfile from '/home/oracle/standby_20171217.ctl';
- Starting restore at 17-DEC-2017 09:07:06
- using target database control file instead of recovery catalog
- allocated channel: ORA_DISK_1
- channel ORA_DISK_1: SID=1 device type=DISK
- channel ORA_DISK_1: copied control file copy
- output file name=+DATADG/orcldg/standby.ctl
- Finished restore at 17-DEC-2017 09:07:07
- --加载控制文件
- RMAN> alter database mount;
- Statement processed
- released channel: ORA_DISK_1
- RMAN>
- --注册数据文件
- RMAN> catalog start with '+DATADG/ORCLDG/DATAFILE/';
- Starting implicit crosscheck backup at 17-DEC-2017 09:09:16
- allocated channel: ORA_DISK_1
- channel ORA_DISK_1: SID=46 device type=DISK
- Crosschecked 11 objects
- Finished implicit crosscheck backup at 17-DEC-2017 09:09:17
- Starting implicit crosscheck copy at 17-DEC-2017 09:09:17
- using channel ORA_DISK_1
- Finished implicit crosscheck copy at 17-DEC-2017 09:09:17
- searching for all files in the recovery area
- cataloging files...
- cataloging done
- List of Cataloged Files
- =======================
- ...省略.....
- File Name: +DATADG/ORCLDG/ARCHIVELOG/2017_11_29/thread_1_seq_273.314.961336961
- File Name: +DATADG/ORCLDG/DATAFILE/system.258.954626559
- File Name: +DATADG/ORCLDG/DATAFILE/sysaux.259.954626615
- File Name: +DATADG/ORCLDG/DATAFILE/undotbs1.260.954626701
- File Name: +DATADG/ORCLDG/DATAFILE/users.261.954626717
- searching for all files that match the pattern +DATADG/ORCLDG/DATAFILE/
- no files found to be unknown to the database
- RMAN> SWITCH DATABASE TO COPY;
- datafile 1 switched to datafile copy "+DATADG/ORCLDG/DATAFILE/system.258.954626559"
- datafile 3 switched to datafile copy "+DATADG/ORCLDG/DATAFILE/sysaux.259.954626615"
- datafile 4 switched to datafile copy "+DATADG/ORCLDG/DATAFILE/undotbs1.260.954626701"
- datafile 6 switched to datafile copy "+DATADG/ORCLDG/DATAFILE/users.261.954626717"
- RMAN>
- RMAN> alter database recover managed standby database using current logfile disconnect from session;
- Statement processed
- 日志有报错
- Errors in file /u01/app/oracle/diag/rdbms/orcldg/orcldg/trace/orcldg_ora_22731.trc:
- ORA-00313: open Failed for members of log group 14 of thread 1
- ORA-00312: online log 14 thread 1: '+DATADG/ORCL/ONLINELOG/group_14.270.954625683'
- ORA-17503: ksfdopn:2 Failed to open file +DATADG/ORCL/ONLINELOG/group_14.270.954625683
- ORA-15173: entry 'ORCL' does not exist in directory '/'
- 2017-12-17 11:45:52.647000 +08:00
- Completed: alter database clear logfile group 14
- 2017-12-17 11:46:02.748000 +08:00
- alter database clear logfile group 15
- 处理过程
- sql> select group# from v$standby_log;
- GROUP#
- ----------
- 11
- 12
- 13
- 14
- --初始化standby redo log
- sql> alter database recover managed standby database cancel;
- Database altered.
- sql> alter database clear logfile group 11;
- Database altered.
- sql> alter database clear logfile group 12;
- Database altered.
- sql> alter database clear logfile group 13;
- Database altered.
- sql> alter database clear logfile group 14;
- Database altered.
- --启动实时应用
- sql> alter database recover managed standby database using current logfile disconnect from session;
- Database altered.
- 5.验证
- DGMGRL> show configuration;
- Configuration - dg_config
- Protection Mode: MaxPerformance
- Members:
- orcl - Primary database
- orcldg - Physical standby database
- Fast-Start Failover: DISABLED
- Configuration Status:
- SUCCESS (status updated 57 seconds ago)
- DGMGRL>