暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

解决一起复杂的Dataguard不同步问题

科学家的炼丹房 2017-07-05
1195

快中午的时候接到同事电话,说公司的mis系统好像从库查询和主库的数据有点不一致。Ok,很明显应该是主从不同步的问题,在处理过程中以为和往常一样很简单,哪儿晓得遇到了好几个坑,特此记录一下。




一、照往常一样查看dataguard的日志同步三板斧

Primary:查询主库的最大日志 

SQL> select max(sequence#) from v$archived_log;

SQL> select max(sequence#) from v$archived_log where applied='YES'; 

 

standby:查询备库的最大日志

SQL> select max(sequence#) from v$archived_log;

SQL> select max(sequence#) from v$archived_log where applied='YES';


查询主库日志与备库是否一致

SQL> select sequence# from v$archived_log  where recid = (select max(recid) from v$archived_log) and applied = 'YES';

SQL> select sequence#  from v$archived_log where recid = (select max(recid) from v$archived_log);


备库接收到的日志和应用的日志是否一致

select max(lh.SEQUENCE#) ,max(al.SEQUENCE#)  fromv$log_history lh,v$archived_log al;


查看有没有MRP进程:

SQL> select process,status from v$managed_standby;

PROCESS STATUS

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

ARCH CONNECTED

ARCH CONNECTED

MRP0 WAIT_FOR_LOG

RFS RECEIVING


没有MRP进程,说明你的备库没有处于恢复状态。可以使用  

alter database recover managed standby database disconnect from session ;

打开standby的同步。


原本以为就搞定了,结果查看了一下alert日志,发现报错:

ORA-00600: internal error code, arguments: [2619], [81304], [], [], [], [], [], [], [], [], [], []

MRP0: Background Media Recovery process shutdown (amldb)


这个600错误是备库在执行恢复的过程中,发现81304这个归档日志有问题或者找不到。

查了下主库,这个81304号的归档日志已经早删除了。。(如果没有删的话,可以直接传一份到备库重新应用即可)




二、为了让主备库的数据一致,在不重建备库的情况下,可以采用通过主库增量备份的方式来完成重新同步了。

步骤:

1.在备库上取消日志应用

alter database recover managedstandby database cancel;


2.查看备库scn

select current_scn from v$database;


3.根据scn,在主库上进行rman增量备份

获取增量数据

backup incremental from scn xxxx database format '/u01/archivelog/temp/20170705_%U.bak' tag 'forstandby';


备份控制文件

backup current controlfile forstandby format '/u01/archivelog/temp/controlfile.bak';


4.将增量备份传到备库


5.将备库启动到mount状态

shutdown immediate

startup nomount

alter database mount standby database;


6.用rman进行恢复增量备份

rman target nocatalog

RMAN> catalog start with '/u01/archivelog/temp/';

RMAN> recover database noredo;


7.用rman恢复控制文件

RMAN> shutdown;

RMAN> startup nomount;

RMAN> restore standby controlfile from '/u01/archivelog/temp/controlfile.bak';


8.启动备库到mount状态

RMAN> shutdown

SQL> startup nomount;

SQL> alter database mount standby database;


9.因为恢复了控制文件,所以需要重新添加新的standby redo log file

alter database add standby logfile group 11('/u01/app/oracle/sid/oradata/stdbyredo01.log') size 100m; 

...

alter database add standby logfile group 17('/u01/app/oracle/sid/oradata/stdbyredo07.log') size 100m; 


10.启动备库同步

SQL> alter database open read only;

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


11.查看归档日志应用

select max(lh.SEQUENCE#) ,max(al.SEQUENCE#)  fromv$log_history lh,v$archived_log al;




三、原本以为搞定了,然后查看alert日志,发现又报错了。。

这次报的错是DG备库报错ORA-00313、ORA-00312、ORA-27037

意思说redo日志不存在。去相对应的目录看,果然备库的redo不存在。

肿么办呢?只有用clear的方式把redo清除了

步骤:

1.在备库上取消日志应用

alter database recover managed standby database cancel; 


2.执行如下命令重建备库上所有的日志组

SQL> select group#,sequence#,archived,status from v$log;


    GROUP#  SEQUENCE# ARCHIVED STATUS 

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

         1          1 YES      INACTIVE 

         2          2 YES      INACTIVE 

         3          3 NO       CURRENT 


对于已经归档和状态为inactive的组可以用下面的命令来重建

alter database clear logfile group X;


redo:

alter database drop logfile group X;

alter database add logfile group X ('路径') size 100m;


standby redo:

alter database drop standby logfile group X;

alter database add standby logfile group X ('路径') size 100m;


3.在clear的过程又遇到一个报错:ORA-19527和ORA-00312

这个和备库的LOG_FILE_NAME_CONVERT有关,需要设置这个spfile的参数才行,修改完后重启数据库,执行clear成功。


4.对于状态为active的日志组,则需要先做一下日志的切换才行,而做日志的切换又需要先把数据库open,切完后再startup到mount状态


5.启动备库并检查

做完以上后:

shutdown immediate

startup mount  #查看alert日志没有错误后再执行下面的

alter database open read only

alter database recover managedstandby database disconnect from session using current logfile;

select max(lh.SEQUENCE#) ,max(al.SEQUENCE#)  fromv$log_history lh,v$archived_log al;


参考:

(1) 官方文档:Database Backup and Recovery Advanced User's Guide

(2) 1138913.1: ORA-600[2619] During Physical Standby Recovery


文章转载自科学家的炼丹房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论