DG日志断档了怎么办?

1、查看两个库之间的通讯,如果设置了fal_server和fal_client,那么等两个库之间的通信恢复好了以后,日志就会自动的传过去;

2、如果主库的归档日志给删除了,出现断档的情况,就可以对主库做一个基于最小scn的增量备份,然后将增量备份传到备库,使备库恢复,具体方法可以见王小俊的共享文档,也可以见下面;



--1. 查询备库的SCN

 

SQL>  select current_scn from v$database;

 

 CURRENT_SCN

 -----------

  1820049562

         

-- 当查询v$datafile scn,database scn,datafile_header scn发现均不一致,这个时候不能使用CURRENT_SCN来作为scn增量备份的起点。

-- 这个时候需要根据缺少日志最小sequence#找出scn,然后作为增量备份的起点.

 

SQL> select a.file#,a.checkpoint_change# CTRL_SCN,b.checkpoint_change# FILE_SCN from v$datafile a,v$datafile_header b where a.file#=b.file#;            

 

     FILE#   CTRL_SCN   FILE_SCN

---------- ---------- ----------

         1 1820049386 1820049563

         2 1820049386 1820049563

         3 1820049386 1820049563

         4 1820049386 1820049563

         5 1820049386 1820049563

         6 1820049386 1820049563

        15 1820049386 1820049563

 

7 rows selected.

 

SQL>  select checkpoint_change#,current_scn from v$database;

 

CHECKPOINT_CHANGE# CURRENT_SCN

------------------ -----------

        1820049385  1820049562

         

--本例中从33号归档开始缺失日志。

SQL> select thread#,sequence#,name,applied,first_change#,next_change# from v$archived_log where thread#=1 and sequence#=33 order by sequence#;

 

   THREAD#  SEQUENCE# NAME                                                         APPLIED   FIRST_CHANGE# NEXT_CHANGE#

---------- ---------- ------------------------------------------------------------ --------- ------------- ------------

         1         33                                                              NO           1820049386   1820049389

         1         33 dg_demo                                                      YES          1820049386   1820049389

 

--所以从 SCN=1820049385开始做增量备份。

 

--2. 确定主库是否添加数据文件

--确定主库在这个scn之后是否有添加数据文件,如果添加文件,需要手工在备库添加

select FILE#,name from v$datafile where CREATION_CHANGE#> =1820049385;      

 

--3. 备库停止日志应用

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

 

Database altered.

 

--4. 主库做增量备份,并传输到备库上。

RMAN> BACKUP INCREMENTAL FROM SCN 1820049385 DATABASE FORMAT '/opt/oracle/11gR2/rmanbak/incre_%U' tag 'INCRE_SCN';

 

Starting backup at 2014/08/25 10:53:17

 

using channel ORA_DISK_1

backup will be obsolete on date 2014/09/01 10:53:18

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=00002 name=+DGDATA/demo/datafile/sysaux.291.853078433

input datafile file number=00001 name=+DGDATA/demo/datafile/system.290.853078487

input datafile file number=00006 name=+DGDATA/demo/datafile/undotbs2.268.853078373

input datafile file number=00003 name=+DGDATA/demo/datafile/undotbs1.293.853078397

input datafile file number=00015 name=+DGDATA/demo/datafile/wxj_tbs1.292.853078399

input datafile file number=00005 name=+DGDATA/demo/datafile/example.263.853078373

input datafile file number=00004 name=+DGDATA/demo/datafile/users.289.853078489

channel ORA_DISK_1: starting piece 1 at 2014/08/25 10:53:18

channel ORA_DISK_1: finished piece 1 at 2014/08/25 10:55:13

piece handle=/opt/oracle/11gR2/rmanbak/incre_0jpgqvku_1_1 tag=INCRE_SCN comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:01:55

 

using channel ORA_DISK_1

backup will be obsolete on date 2014/09/01 10:55:15

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 2014/08/25 10:55:18

channel ORA_DISK_1: finished piece 1 at 2014/08/25 10:55:19

piece handle=/opt/oracle/11gR2/rmanbak/incre_0kpgqvoj_1_1 tag=INCRE_SCN comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

Finished backup at 2014/08/25 10:55:20

 

oracle@rac1:/opt/oracle/11gR2/rmanbak> ll

total 801808

-rw-r----- 1 oracle asmadmin 800251904 2014-08-25 10:55 incre_0jpgqvku_1_1

-rw-r----- 1 oracle asmadmin  19988480 2014-08-25 10:55 incre_0kpgqvoj_1_1

 

oracle@rac1:/opt/oracle/11gR2/rmanbak> scp * 192.168.52.235:/home/oracle/rmanbak

Password:

incre_0jpgqvku_1_1                                                                                                                                                 100%  763MB  20.6MB/s   00:37   

incre_0kpgqvoj_1_1                                                                                                                                                 100%   19MB  19.1MB/s   00:00   

 

--5. 备库上进行恢复

RMAN> catalog start with '/home/oracle/rmanbak/';

 

searching for all files that match the pattern /home/oracle/rmanbak/

 

List of Files Unknown to the Database

=====================================

File Name: /home/oracle/rmanbak/incre_0jpgqvku_1_1

File Name: /home/oracle/rmanbak/incre_0kpgqvoj_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: /home/oracle/rmanbak/incre_0jpgqvku_1_1

File Name: /home/oracle/rmanbak/incre_0kpgqvoj_1_1

 

--开始执行恢复

RMAN> RECOVER DATABASE NOREDO;

 

Starting recover at 25-AUG-14

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=37 device type=DISK

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: /oradata/demo/datafile/system.256.839340653

destination for restore of datafile 00002: /oradata/demo/datafile/sysaux.257.839340655

destination for restore of datafile 00003: /oradata/demo/datafile/undotbs1.258.839340655

destination for restore of datafile 00004: /oradata/demo/datafile/users.259.839340655

destination for restore of datafile 00005: /oradata/demo/datafile/example.264.839340819

destination for restore of datafile 00006: /oradata/demo/datafile/undotbs2.265.839341139

destination for restore of datafile 00015: /oradata/demo/datafile/wxj_tbs1.278.842085667

channel ORA_DISK_1: reading from backup piece /home/oracle/rmanbak/incre_0jpgqvku_1_1

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of recover command at 08/25/2014 11:02:01

ORA-19870: error while restoring backup piece /home/oracle/rmanbak/incre_0jpgqvku_1_1

ORA-19573: cannot obtain exclusive enqueue for datafile 2

 

--报错ORA-19870,ORA-19573,原因是实例处于open状态。

 

SQL> select status from v$instance;

 

STATUS

------------

OPEN

 

SQL> shut immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

 

SQL> startup mount;

ORACLE instance started.

 

Total System Global Area  217157632 bytes

Fixed Size                  2211928 bytes

Variable Size             159387560 bytes

Database Buffers           50331648 bytes

Redo Buffers                5226496 bytes

Database mounted.

 

--再次执行恢复

RMAN> RECOVER DATABASE NOREDO;

 

Starting recover at 25-AUG-14

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=38 device type=DISK

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: /oradata/demo/datafile/system.256.839340653

destination for restore of datafile 00002: /oradata/demo/datafile/sysaux.257.839340655

destination for restore of datafile 00003: /oradata/demo/datafile/undotbs1.258.839340655

destination for restore of datafile 00004: /oradata/demo/datafile/users.259.839340655

destination for restore of datafile 00005: /oradata/demo/datafile/example.264.839340819

destination for restore of datafile 00006: /oradata/demo/datafile/undotbs2.265.839341139

destination for restore of datafile 00015: /oradata/demo/datafile/wxj_tbs1.278.842085667

channel ORA_DISK_1: reading from backup piece /home/oracle/rmanbak/incre_0jpgqvku_1_1

channel ORA_DISK_1: piece handle=/home/oracle/rmanbak/incre_0jpgqvku_1_1 tag=INCRE_SCN

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete, elapsed time: 00:00:35

 

Finished recover at 25-AUG-14

  

--恢复完成以后,控制文件中的SCN都没有发生变化。数据文件的SCN增大。

SQL> select a.file#,a.checkpoint_change# CTRL_SCN,b.checkpoint_change# FILE_SCN from v$datafile a,v$datafile_header b where a.file#=b.file#;            

 

     FILE#   CTRL_SCN   FILE_SCN

---------- ---------- ----------

         1 1820049386 1828164808

         2 1820049386 1828164808

         3 1820049386 1828164808

         4 1820049386 1828164808

         5 1820049386 1828164808

         6 1820049386 1828164808

        15 1820049386 1828164808

 

7 rows selected.

 

SQL>  select checkpoint_change#,current_scn from v$database;

 

CHECKPOINT_CHANGE# CURRENT_SCN

------------------ -----------

        1820049385  1820049562

         

--6. 恢复备库的控制文件

 

--主库上生成备库的控制文件

alter database create standby controlfile as '/tmp/control01.ctl';

 

--将控制文件拷贝到备库,并重启备库到mount状态(过程省)

 

--此刻查看文件头的SCN发现都是0

SQL>  select a.file#,a.checkpoint_change# CTRL_SCN,b.checkpoint_change# FILE_SCN from v$datafile a,v$datafile_header b where a.file#=b.file#;     

 

     FILE#   CTRL_SCN   FILE_SCN

---------- ---------- ----------

         1 1828169639          0

         2 1828169639          0

         3 1828169639          0

         4 1828169639          0

         5 1828169639          0

         6 1828169639          0

        15 1828169639          0

 

7 rows selected.

 

SQL> select checkpoint_change#,current_scn from v$database;

 

CHECKPOINT_CHANGE# CURRENT_SCN

------------------ -----------

        1828169639  1828170741

 

--7. 在备库开启恢复管理模式,即启动MRP进程:

alter database recover managed standby database disconnect from session;

 

--查看日志报错

Errors in file /opt/oracle/11gR2/diag/rdbms/dg_demo/dg_demo/trace/dg_demo_mrp0_1795.trc:

ORA-01110: data file 1: '/oradata/demo/datafile/system.290.853078487'

ORA-01157: cannot identify/lock data file 1 - see DBWR trace file

ORA-01110: data file 1: '/oradata/demo/datafile/system.290.853078487'

MRP0: Background Media Recovery process shutdown (dg_demo)

Completed: alter database recover managed standby database disconnect from session

 

--查看视图v$managed_standby,没有发现MRP0进程。

select process,status from v$managed_standby;

 

-------查找原因-----------

 

SQL> select name from v$datafile;

 

NAME

-------------------------------------------------------

/oradata/demo/datafile/system.290.853078487

/oradata/demo/datafile/sysaux.291.853078433

/oradata/demo/datafile/undotbs1.293.853078397

/oradata/demo/datafile/users.289.853078489

/oradata/demo/datafile/example.263.853078373

/oradata/demo/datafile/undotbs2.268.853078373

/oradata/demo/datafile/wxj_tbs1.292.853078399

 

7 rows selected.

                 

oracle@test-rac-dg:/oradata/demo/datafile> ll

total 3414224

drwxr-x--- 3 oracle oinstall       4096 2014-07-14 07:07 DG_DEMO

-rw-r----- 1 oracle oinstall  104865792 2014-08-25 11:26 example.264.839340819

-rw-r----- 1 oracle oinstall 1153441792 2014-08-25 11:26 sysaux.257.839340655

-rw-r----- 1 oracle oinstall  734011392 2014-08-25 11:26 system.256.839340653

-rw-r----- 1 oracle oinstall   80748544 2014-07-16 14:00 temp.263.839340809

-rw-r----- 1 oracle oinstall  529539072 2014-08-25 11:26 undotbs1.258.839340655

-rw-r----- 1 oracle oinstall  629153792 2014-08-25 11:26 undotbs2.265.839341139

-rw-r----- 1 oracle oinstall    5251072 2014-08-25 11:26 users.259.839340655

-rw-r----- 1 oracle oinstall  325066752 2014-08-25 11:26 wxj_tbs1.278.842085667    

 

--发现控制文件中的文件名和物理文件名不一致。

--导致这种情况发生的原因是,备库使用自动管理模式,主库使用ASM管理。主库上的数据文件以一串数字结尾,同步到备库上时,这串数字会改变,也就是文件名发生了变化。

--这也是导致备库启动到mount后,查询数据文件头的SCN都是0的原因。

 

--通过改变文件名来解决此问题:

alter database rename file '/oradata/demo/datafile/system.290.853078487' to '/oradata/demo/datafile/system.256.839340653';

alter database rename file '/oradata/demo/datafile/sysaux.291.853078433' to '/oradata/demo/datafile/sysaux.257.839340655';

alter database rename file '/oradata/demo/datafile/undotbs1.293.853078397' to '/oradata/demo/datafile/undotbs1.258.839340655';

alter database rename file '/oradata/demo/datafile/users.289.853078489' to '/oradata/demo/datafile/users.259.839340655';

alter database rename file '/oradata/demo/datafile/example.263.853078373' to '/oradata/demo/datafile/example.264.839340819';

alter database rename file '/oradata/demo/datafile/undotbs2.268.853078373' to '/oradata/demo/datafile/undotbs2.265.839341139';

alter database rename file '/oradata/demo/datafile/wxj_tbs1.292.853078399' to '/oradata/demo/datafile/wxj_tbs1.278.842085667';

 

--------ok----------------

 

--再次打开恢复管理模式,成功。

SQL> alter database recover managed standby database disconnect from session;

 

Database altered.

 

--查看主库

SQL> select * from v$log;

 

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME

---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ -------------------

         1          1        163   52428800        512          1 NO  CURRENT             1828191449 2014/08/25 14:30:09   2.8147E+14

         2          1        162   52428800        512          1 YES INACTIVE            1828189975 2014/08/25 14:13:15   1828191449 2014/08/25 14:30:09

         3          2        150   52428800        512          1 NO  CURRENT             1828191445 2014/08/25 14:30:07   2.8147E+14

         4          2        149   52428800        512          1 YES INACTIVE            1828189978 2014/08/25 14:13:15   1828191445 2014/08/25 14:30:07

 

--查看备库

SQL> select thread#,sequence#,name,applied from v$archived_log where thread#=1 order by sequence#;

 

   THREAD#  SEQUENCE# NAME                                                    APPLIED

---------- ---------- ------------------------------------------------------- ---------

         1        159 /oradata/demo/archivelog/1_159_852911140.arc            YES

         1        160 /oradata/demo/archivelog/1_160_852911140.arc            YES

         1        161 /oradata/demo/archivelog/1_161_852911140.arc            YES

         1        162 /oradata/demo/archivelog/1_162_852911140.arc            NO

 

SQL> select thread#,sequence#,name,applied from v$archived_log where thread#=2 order by sequence#;

 

   THREAD#  SEQUENCE# NAME                                                    APPLIED

---------- ---------- ------------------------------------------------------- ---------

         2        145 /oradata/demo/archivelog/2_145_852911140.arc            YES

         2        146 /oradata/demo/archivelog/2_146_852911140.arc            YES

         2        147 /oradata/demo/archivelog/2_147_852911140.arc            YES

         2        148 /oradata/demo/archivelog/2_148_852911140.arc            YES

         2        149 /oradata/demo/archivelog/2_149_852911140.arc            YES

 

 

--8. 打开数据库

SQL> alter database recover managed standby database cancel;

 

SQL> alter database open;

 

Database altered.

 

SQL> alter database recover managed standby database using current logfile disconnect from session;

 

Database altered.