在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 重要配置参数 http://www.linuxidc.com/Linux/2013-08/88784.htm

基于同一主机配置 Oracle 11g Data Guard http://www.linuxidc.com/Linux/2013-08/88848.htm

探索Oracle之11g DataGuard http://www.linuxidc.com/Linux/2013-08/88692.htm

Oracle Data Guard (RAC+DG) 归档删除策略及脚本 http://www.linuxidc.com/Linux/2013-07/87782.htm

Oracle Data Guard 的角色转换 http://www.linuxidc.com/Linux/2013-06/86190.htm

Oracle Data Guard的日志FAL gap问题 http://www.linuxidc.com/Linux/2013-04/82561.htm

Oracle 11g Data Guard Error 16143 Heartbeat failed to connect to standby 处理方法 http://www.linuxidc.com/Linux/2013-03/82009.htm

--------------------------------------分割线 --------------------------------------

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

删除redo log的方法也比较简单,都是首先终止redo apply过程,之后删除。

SQL> alter database recover managed standby database cancel;

Database altered

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 4239941846 35 YES ACTIVE

5 UNASSIGNED 0 NO UNASSIGNED

6 UNASSIGNED 0 NO UNASSIGNED

注意:这里面我们处理的是非active状态日志。如果是active状态,可能就需要与online redo log的策略相同,进行重建过程。

4、standby redo log usage实验

这里考虑一个问题。在primary和standby工作过程中,redo log entry从Primary的online redo log中传递,传递到standby端的standby redo log等待进行redo apply。

如果apply之后,redo log就进入归档状态了。那么,如果当前日志积压很多,甚至primary端多次进行切换。那么这些日志在哪儿呢?我们通过实验去证明。

在primary端,当前日志编号为38。

(primary)

SQL> select group#, sequence#, archived, status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS

---------- ---------- -------- ----------------

1 36 YES INACTIVE

2 38 NO CURRENT

3 35 YES INACTIVE

7 37 YES INACTIVE

前一个sequence#的编号日志已经传递到standby端。

SQL> select recid, name, sequence#, STANDBY_DEST, ARCHIVED, APPLIED from v$archived_log where sequence#=37;

RECID NAME SEQUENCE# STANDBY_DEST ARCHIVED APPLIED

---------- -------------------------------------------------------------------------------- ---------- ------------ -------- ---------

53 /u01/app/fast_recovery_area/ORA11G/archivelog/2014_05_06/o1_mf_1_37_9pjrr6jg_.ar 37 NO YES NO

54 ora11gsy 37 YES YES NO

注意:57号记录apply状态为NO。standby端,standby redo log的current为38,与Primary相匹配。

SQL> col dbid for a20;

SQL> select group#, dbid, sequence#, archived, status from v$standby_log;

GROUP# DBID SEQUENCE# ARCHIVED STATUS

---------- -------------------- ---------- -------- ----------

4 4239941846 38 YES ACTIVE

5 UNASSIGNED 0 NO UNASSIGNED

6 UNASSIGNED 0 NO UNASSIGNED

同样的37号日志已经在归档空间。

SQL> select recid, name, sequence#, STANDBY_DEST, ARCHIVED, APPLIED from v$archived_log where sequence#=37;

RECID NAME SEQUENCE# STANDBY_DEST ARCHIVED APPLIED

---------- -------------------------------------------------------------------------------- ---------- ------------ -------- ---------

11 /u01/app/fast_recovery_area/ORA11GSY/archivelog/2014_05_06/o1_mf_1_37_9pjrr6y0_. 37 NO YES NO

在Primary端进行多次的switch动作。

SQL> alter system switch logfile;

System altered

(多次切换,篇幅原因,有省略……)

SQL> alter system switch logfile;

System altered

Primary日志情况如下,当前sequence为43。

SQL> select group#, sequence#, archived, status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS

---------- ---------- -------- ----------------

1 40 YES INACTIVE

2 42 YES INACTIVE

3 43 NO CURRENT

7 41 YES INACTIVE

当前为43,进入归档空间。

SQL> select recid, name, sequence#, STANDBY_DEST, ARCHIVED, APPLIED from v$archived_log where sequence#>=37;

RECID NAME SEQUENCE# STANDBY_DEST ARCHIVED APPLIED

---------- -------------------------------------------------------------------------------- ---------- ------------ -------- ---------

(篇幅原因,有省略……)

60 ora11gsy 40 YES YES NO

61 /u01/app/fast_recovery_area/ORA11G/archivelog/2014_05_06/o1_mf_1_41_9pjs7os5_.ar 41 NO YES NO

62 ora11gsy 41 YES YES NO

63 /u01/app/fast_recovery_area/ORA11G/archivelog/2014_05_06/o1_mf_1_42_9pjs7pvn_.ar 42 NO YES NO

64 ora11gsy 42 YES YES NO

12 rows selected

在standby端,standby redo log的切换到sequence#=43。

SQL> select group#, dbid, sequence#, archived, status from v$standby_log;

GROUP# DBID SEQUENCE# ARCHIVED STATUS

---------- -------------------- ---------- -------- ----------

4 4239941846 43 YES ACTIVE

5 UNASSIGNED 0 NO UNASSIGNED

6 UNASSIGNED 0 NO UNASSIGNED

没有被应用的日志,并没有积压在standby redo log中。而是进入archive空间。

SQL> select recid, name, STANDBY_DEST, ARCHIVED, APPLIED from v$archived_log where sequence#>=37;

RECID SEQUENCE# STANDBY_DEST ARCHIVED APPLIED

---------- ---------- ------------ -------- ---------

11 37 NO YES NO

12 38 NO YES NO

13 39 NO YES NO

14 40 NO YES NO

15 41 NO YES NO

16 42 NO YES NO

6 rows selected

注意,他们的apply状态都是NO。启动standby端的应用之后,查看效果。

SQL> alter database recover managed standby database using current logfile disconnect from session;

Database altered

SQL> select recid, sequence#, STANDBY_DEST, ARCHIVED, APPLIED from v$archived_log where sequence#>=37;

RECID SEQUENCE# STANDBY_DEST ARCHIVED APPLIED

---------- -------------------------------------------------------------------------------- ---------- ------------ -------- ---------

11 37 NO YES YES

12 38 NO YES YES

13 39 NO YES YES

14 40 NO YES YES

15 41 NO YES YES

16 42 NO YES IN-MEMORY

6 rows selected

5、结论

对standby而言,standby redo log就是online redo log。Oracle推荐standby redo log大小要与Primary上redo log size相匹配的。

转载:本文永久更新链接地址http://www.linuxidc.com/Linux/2014-05/101673.htm

Oracle Dataguard Standby Redo Log的两个实验的更多相关文章

  1. Standby Redo Log 的设定原则、创建、删除、查看、归档位置

    设定: 1.每个standby redo log file 至少要和primary database的redo log 一样大,为了方便管理,Oracle 建议主备库的redo log 设置成一样的大 ...

  2. 配置standby redo log

    Data Guard在最大保护和最高可用性模式下,Standby数据库必须配置standby redo log,通过下面的实验展示创建的原则和过程. 1.原则1).standby redo log的文 ...

  3. Oracle logminer 分析redo log(TOAD与PLSQL)

    Oracle logminer 分析redo log Oracle 11g r2 RAC centos 6.5 设置时间格式 select to_char(sysdate,'yyyy-mm-dd hh ...

  4. dataguard 下主备 online redo 与 standby redo log resize 重建

    环境说明: 本实验环境是一个节点的rac + 单节点 asm dg     database 与 grid 版本是 11.2.0.4 .提别提醒 如果是多节点集群,操作时需要特别注意 thread . ...

  5. STANDBY REDO LOG

    SRL Introduce 从">ORACLE9i开始,出现了Standby Redo Logs(SRL),9.1开始只有">physical standby支持SRL ...

  6. 利用rman duplicate重建oracle dataguard standby数据库

    问题背景 适用情况: 操作系统: redhat 6.5 数据库: oracle 11g r2 问题描述: failover后原主库无法恢复和启动或者丢失主备关系 优点 不需要对primary数据库停机 ...

  7. Oracle 11g的Redo Log和Archive Log的分析方法

    自Oracle 11g起,无需设置UTL_FILE_DIR就可以使用LOGMNR对本地数据库的日志进行分析,以下是使用LOGMNR的DICT_FROM_ONLINE_CATALOG分析REDO和归档日 ...

  8. [Oracle][DataGuard]Standby数据库文件有损坏时的处理方法

    需要参考: [Oracle]Recovering the primary database's datafile using the physical standby, and vice versa ...

  9. Oracle Redo Log 机制 小结(转载)

    Oracle 的Redo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要,之前的Blog里也林林散散的写了一些,前些日子看老白日记里也有说明,所以结合老白日记里的内容,对oracle 的 ...

随机推荐

  1. maven设置---Dmaven.multiModuleProjectDirectory system propery is not set.

    设置maven 环境变量: MAVEN_HOME:D:\Java\apache-maven-3.3.3 M2_HOME:D:\Java\apache-maven-3.3.3 path:%MAVEN_H ...

  2. SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete) 一条语句实现两表同步(添加、删除、修改)

    MERGE 目标表 USING 源表 ON 匹配条件 WHEN MATCHED THEN 语句 WHEN NOT MATCHED THEN 语句; http://www.chinaz.com/prog ...

  3. java 输入输出项目

    package hellohe; import java.util.Scanner; /** * * @author Administrator *1.导入java.util.scanner; *2. ...

  4. IntelliJ IDEA自动去掉行尾空格

    Settings→Editor→General 先选中Allow placement of caret after end of line 再修改Strip trailing spaces on Sa ...

  5. NTFS文件系统简介(转载)

    原文地址:http://www.cnblogs.com/watertao/archive/2011/11/28/2266595.html 1.简介 NTFS(New Technology File S ...

  6. 黄聪:WordPress固定链接设置的几种方法

    wordpress固定链接设置的一些参数: %year%:基于文章发布的年份,比如2010: %monthnum%:基于文章发布的月份,比如01: %day%:基于文章发布当日,比如06: %hour ...

  7. 两分钟彻底让你明白Android Activity生命周期(图文)!

    大家好,今天给大家详解一下Android中Activity的生命周期,我在前面也曾经讲过这方面的内容,但是像网上大多数文章一样,基本都是翻译Android API,过于笼统,相信大家看了,会有一点点的 ...

  8. mysql事件

    文章参考自http://blog.163.com/duanpeng3@126/blog/static/8854373520105182123112/在使用这个功能之前必须确保event_schedul ...

  9. RAC_Oracle集群服务安装前期准备Prepare(案例)

    2014-07-08 Created By BaoXinjian

  10. 如何判断TCP包是否发送成功

    1. TCP发送接口:send() TCP发送数据的接口有send,write,sendmsg.在系统内核中这些函数有一个统一的入口,即sock_sendmsg().由于TCP是可靠传输,所以对TCP ...