首页 > oracle > DG同步切换日志组

DG同步切换日志组

2022年11月30日 发表评论 阅读评论

最近在巡检数据库时,发现一套线上数据库服务器的redo log和standby log设置不符合最佳实践,所以需要联机修改主备库的 redo log和standby log,修改的具体步骤进行了如下的总结。

(1)在主库上切换日志,查看主备同步状态,查看主备同步是否正常,参考此篇文章(https://blog.csdn.net/weixin_41561862/article/details/104185660)。

alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system checkpoint;
(2)如果主备日志同步正常,先取消备库的实时应用,设置主库和备库的standby_file_management参数为manual。

备库上先取消实时应用:
alter database recover managed standby database cancel;

主备库执行:
alter system set standby_file_management='AUTO';

show parameter standby_file_management;
(3)查看主库redo日志的情况,修改主库redo log。

select GROUP#,THREAD#,STATUS from v$log;

可以删除状态为inactive的redo log

删除日志组
alter database drop logfile group 3;

oracle数据库规定必须要剩下两组redo log,所以可以先添加新的,在进行其他组的删除
alter database add logfile thread 1 group 3 ('/U01/app/oracle/oradata/test/redo03.rdo') size 100M reuse;
(4)主库的redo日志修改完成后,进行standby log的修改,直接删除在添加即可。

alter database drop logfile group 9;
alter database drop logfile group 10;
alter database drop logfile group 11;
alter database drop logfile group 12;
(5)添加standby redo log,以最佳实践为指导,standby log比redo log多一组。

alter database add standby logfile thread 1 group 7 '/U01/app/oracle/oradata/test/standbylog07.log' size 100m reuse;
alter database add standby logfile thread 1 group 8 '/U01/app/oracle/oradata/test/standbylog08.log' size 100m reuse;
alter database add standby logfile thread 1 group 9 '/U01/app/oracle/oradata/test/standbylog09.log' size 100m reuse;
alter database add standby logfile thread 1 group 10 '/U01/app/oracle/oradata/test/standbylog10.log' size 100m reuse;
(6)添加完成后,查看下redo log和standby log是否都修改完成,并且standby log是否比redo log多一组。

set lines 200 pages 9999 LONG 5000
col member for a80
select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$log a,v$logfile b where a.group#=b.group#
union all
select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$standby_log a,v$logfile b where a.group#=b.group#;
(7)修改备库的redo log

备库的redo log直接删除是不行的,需要先设置log_file_name_convert参数。
alter system set log_file_name_convert ='/U01/app/oracle/oradata/test/','/U01/app/oracle/oradata/test/' scope=spfile;

shutdown immediate

关闭主备同步的监听,不让文件进行传输了

startup

此时注意备库的实时应用是否打开,如果打开需要关闭。

备库上先取消实时应用:
alter database recover managed standby database cancel;

查看standby_file_management参数的值是否为manual
show parameter standby_file_management

查看备库的redo log
select group#,status from v$log;

先clear 再drop

alter database clear logfile group 1;

alter database drop logfile group 1;

添加新的redo log
alter database add logfile thread 1 group 4 ('/U01/app/oracle/oradata/test/redo04.rdo') size 100M reuse;

最后会剩下一组redo log是current的,不能删除,需要在主库上进行日志切换,等到状态不是current的时候进行clear,drop操作。

先开启备库的实时应用
alter database recover managed standby database using current logfile disconnect;

确认主备同步正常,在主库上进行日志切换
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;

alter system checkpoint;

等到备库的redo log状态不是current时取消备库的实时应用
alter database recover managed standby database cancel;

先clear再drop
alter database clear logfile group 2;
alter database drop logfile group 2;
(8) 处理备库的standby log

直接删除后重建
alter database drop logfile group 7;
alter database drop logfile group 8;
alter database drop logfile group 9;
alter database drop logfile group 10;

alter database add standby logfile thread 1 group 7 '/U01/app/oracle/oradata/test/standbylog07.log' size 100m reuse;
alter database add standby logfile thread 1 group 8 '/U01/app/oracle/oradata/test/standbylog08.log' size 100m reuse;
alter database add standby logfile thread 1 group 9 '/U01/app/oracle/oradata/test/standbylog09.log' size 100m reuse;
alter database add standby logfile thread 1 group 10 '/U01/app/oracle/oradata/test/standbylog10.log' size 100m reuse;
(9)查看redo和standby log

set lines 200 pages 9999 LONG 5000
col member for a80
select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$log a,v$logfile b where a.group#=b.group#
union all
select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$standby_log a,v$logfile b where a.group#=b.group#;
(10))打开备库的实时应用,设置主备参数standby_file_management。

alter database recover managed standby database using current logfile disconnect;

alter system set standby_file_management='AUTO';
(11)查看日志应用情况和dg的状态是否正常。

在这一次的操作后,dg的状态不对,会提示参数不一致,原因是备库修改了参数log_file_name_convert,但是主库没有修改。

解决方法:
在备库上设置log_file_name_convert参数:
alter system set log_file_name_convert ='' scope=spfile;

应该先备份pfile
create pfile from spfile;

shutdown immediate;

startup 报错,参数文件中log_file_name_convert参数有问题

解决:
因为spfile是二进制,没法打开,可以使用strings命令解析spfile文件然后重定向到一个文件起名pfile.ora

strings spfile >pfile.ora

编辑pfile.ora文件,将里面的格式弄好,并且删除log_file_name_convert这个参数的设置项

sqlplus / as sysdba

startup nomount;

create spfile from pfile='路径/pfile.ora';

startup force

分类: oracle 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.