dataguard环境下修改redo log和standby log

最近在巡检数据库时,发现一套线上数据库服务器的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='manual';

(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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#慧#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值