DG同步切换日志组
最近在巡检数据库时,发现一套线上数据库服务器的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