在data guard环境中,standby redo log是一个比较特殊的日志类型。从最新的dg安装指导中,都推荐在primary和standby端,都配置st
在data guard环境中,standby redo log是一个比较特殊的日志类型。从最新的dg安装指导中,都推荐在primary和standby端,都配置standby redo log。
简单的说,standby redo log就是在standby端应用传递redo log过程中,逐步执行的online redo log。standby端虽然也有online redo log,但是在redo apply应用的过程中,是不使用online redo log的。即使是11g active data guard支持apply中读取standby数据,这个操作也是read-only的,并不涉及当前实例redo log的生成(注意是生成)。所以,如果一直是在standby角色,online redo log是不需要的。
primary传递过来的redo log信息,是存放在standby redo log组内进行apply的。并且随着主库primary日志的切换动作而切换。这也就是为什么推荐standby redo log的大小和primary online redo log的大小保持一致的原因。
下面会从维护角度,讨论standby redo log维护过程中的方法。
--------------------------------------分割线 --------------------------------------
相关参考:
oracle data guard 重要配置参数
基于同一主机配置 oracle 11g data guard
探索oracle之11g dataguard
oracle data guard (rac+dg) 归档删除策略及脚本
oracle data guard 的角色转换
oracle data guard的日志fal gap问题
oracle 11g data guard error 16143 heartbeat failed to connect to standby 处理方法
--------------------------------------分割线 --------------------------------------
1、环境介绍
数据库版本为11.2.0.4,已经构建好dg环境。primary数据库实例名ora11g。
sql> select name, database_role from v$database;
name database_role
--------- ----------------
ora11g primary
primary上也是需要配置standby redo log的。但是,这个redo log和standby端的online redo log一样,都是在角色switch/failover之后,才会发挥作用。
sql> col dbid for a20;
sql> select group#, dbid, sequence#, archived, status from v$standby_log;
group# dbid sequence# archived status
---------- -------------------- ---------- -------- ----------
4 unassigned 0 yes unassigned
5 unassigned 0 yes unassigned
6 unassigned 0 yes unassigned
文件自动管理参数设置为auto。
sql> show parameter standby_file
name type value
------------------------------------ ----------- ------------------------------
standby_file_management string auto
2、primary端standby redo log配置
primary角色下,standby redo log是不使用的。原则上也没有什么特殊的用途。所以,我们查看v$standby_log视图时查看到的primary端状态都是unsigned,也就是没有使用。
在primary正常read write状态下,,我们是可以添加standby log group的。
sql> alter database add standby logfile group 8 size 100m;
database altered
sql> select group#, dbid, sequence#, archived, status from v$standby_log;
group# dbid sequence# archived status
---------- -------------------- ---------- -------- ----------
4 unassigned 0 yes unassigned
5 unassigned 0 yes unassigned
6 unassigned 0 yes unassigned
8 unassigned 0 yes unassigned
在v$logfile中,可以看到对应的添加文件。由于使用的omf特性,创建成员组为两个,在recovery area中有对应镜像。
sql> select group#, type, member from v$logfile;
group# type member
---------- ------- --------------------------------------------------------------------------------
(篇幅原因,有省略……)
7 online /u01/app/fast_recovery_area/ora11g/onlinelog/o1_mf_7_9pclt1lt_.log
8 standby /u01/app/oradata/ora11g/onlinelog/o1_mf_8_9pgqt9hg_.log
8 standby /u01/app/fast_recovery_area/ora11g/onlinelog/o1_mf_8_9pgqtcgj_.log
16 rows selected
在standby端,我们查看是否有对应standby redo log自动添加。
sql> select group#, sequence#, dbid,status from v$standby_log;
group# sequence# dbid status
---------- ---------- -------------------- ----------
4 34 4239941846 active
5 0 unassigned unassigned
6 0 unassigned unassigned
primary端删除standby redo log。
sql> alter database drop standby logfile group 8;
database altered
sql> select group#, dbid, sequence#, archived, status from v$standby_log;
group# dbid sequence# archived status
---------- -------------------- ---------- -------- ----------
4 unassigned 0 yes unassigned
5 unassigned 0 yes unassigned
6 unassigned 0 yes unassigned
从实验情况看:在primary端,我们进行standby redo log的管理是比较方便的。没有过多的限制。
3、standby端standby redo log维护
当前primary端的online redo log情况。
sql> select group#, sequence#, bytes, status from v$log;
group# sequence# bytes status
---------- ---------- ---------- ----------------
1 32 104857600 inactive
2 34 52428800 inactive
3 35 52428800 current
7 33 10485760 inactive
此时,standby端的standby redo log情况如下:
sql> select group#, sequence#, dbid,status from v$standby_log;
group# sequence# dbid status
---------- ---------- -------------------- ----------
4 35 4239941846 active
5 0 unassigned unassigned
6 0 unassigned unassigned
standby redo log对应的是当前primary的online current redo log。反映在sequence#相同。我们尝试直接添加standby日志。
sql> alter database add standby logfile group 8 size 100m;
alter database add standby logfile group 8 size 100m
ora-01156: 进行中的恢复或闪回可能需要访问文件
当前standby处在apply过程,终止apply动作。
sql> alter database recover managed standby database cancel;
database altered
sql> alter database add standby logfile group 8 size 100m;
database altered
standby redo log日志情况。
sql> select group#, dbid, sequence#, archived, status from v$standby_log;
group# dbid sequence# archived status
---------- -------------------- ---------- -------- ----------
4 4239941846 35 yes active
5 unassigned 0 no unassigned
6 unassigned 0 no unassigned
8 unassigned 0 yes unassigned
之后可以启动redo apply过程。
sql> alter database recover managed standby database using current logfile disconnect from session;
database altered
更多详情见请继续阅读下一页的精彩内容: