有时看到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怎么都不会同步的。
阅读(6005) | 评论(0) | 转发(0) |