有时看到dg不同步,让人捉急,来来来,看看oracle的手段
步骤 1.检查主数据库上远程归档目标的状态
-
SELECT DESTINATION, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE DEST_ID=2;
步骤 2.启停远程存档目标:
-
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;
-
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
步骤 3.在主数据库上执行 2 次日志切换:
-
SQL>ALTER SYSTEM SWITCH LOGFILE;
-
SQL>ALTER SYSTEM SWITCH LOGFILE;
步骤 4.再次检查远程存档目的地的状态
-
SELECT DESTINATION, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE DEST_ID=2;
如果远程存档中没有错误,则远程存档目的地的状态将为“valid”
步骤 5. 使用以下命令检查备用日志是否收到了重做日志:
-
SELECT THREAD#,MAX(SEQUENCE#) FROM V$ARCHIVED_LOG GROUP BY THREAD#;
在主数据库上执行 2 次日志切换
-
ALTER SYSTEM SWITCH LOGFILE;
-
ALTER SYSTEM SWITCH LOGFILE;
(为什么是2次?可能是为了判断是手工触发的sequence#增加,而不是碰巧自动触发,所以3次也行,5次更明显)
检查 SEQUENCE# 是否改变
-
SELECT THREAD#,MAX(SEQUENCE#) FROM V$ARCHIVED_LOG GROUP BY THREAD#;
如果 sequence# 增加,远程归档工作正常。
步骤 6.检查主数据库上 log_archive_max_processes 的值
-
SHOW PARAMETER LOG_ARCHIVE_MAX_PROCESSES
-
-
将 log_archive_max_processes 的值增加到 10(从 10.2 开始,您可以将值增加到 30)
-
强烈建议增加此值以避免出现 GAP 时出现任何问题
-
-
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=10;
步骤 7.为主数据库生成新的 ARC 进程
(这步就有点狠了)
-
ps -ef|grep -i arc| grep $ORACLE_SID
-
kill -9 ...
注意:
1. 杀死 arc 进程不会损害主数据库,因为当你杀死它们时,新的 arc 进程会立即产生。
2. 重新启动主数据库会产生新的 ARC 进程,所以如果您不习惯手动终止进程,那么请重新启动主数据库以产生新的 ARC 进程。
3. 从 11.2 开始,杀死任何空闲/挂起超过 5 分钟(300 秒)的 DG 进程。
参考:
如何解决远程归档中的错误(文档 ID 799353.1)
日志不会传送到物理备用数据库 (Doc ID 1130523.1)
上述是对老环境的处理办法,对于新环境,还得从头检查
有时初始化参数也非常重要,比如log_archive_config被置为空,dg怎么都不会同步的。
阅读(6221) | 评论(0) | 转发(0) |