签到成功

知道了

CNDBA社区CNDBA社区

Oracle 12c 新特性 -- DG 默认使用 Real-Time Apply

2016-09-06 01:08 3988 0 原创 Oracle 18c
作者: dave


http://www.cndba.cn/dave/article/213
http://www.cndba.cn/dave/article/213

1    理论说明
    在Oracle 12c 之前的Data Guard 环境中,默认情况下备库apply redo 是从备库的归档文件中读数据的。在Oracle 12c 中,默认的策略改成直接从standby redo log file中读取,采用real-time apply的方式进行。

    这样在failover的时候,可以缩短切换时间,不需要在等redo apply的时间。

    当启动备库后,备库会启动RFS 进程用来接收主库传过来的redo log,并写入到standby redo log file。

    如果我们启动了MRP进程,那么在数据写入到standby redo log 之后,MRP 进程就会立即apply 数据。 当然,如果我们不想使用改特性,也可以手工指定使用归档文件。

语法如下:
SQL> alter database recover managed standby database using archived logfile;



2    实验

2.1     查看主库当前状态http://www.cndba.cn/dave/article/213http://www.cndba.cn/dave/article/213

SQL> show pdbs

    CON_ID CON_NAME              OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     2 PDB$SEED              READ ONLY  NO
     3 PCNDBA              READ WRITE NO
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL>

SQL> SELECT PROTECTION_MODE, PROTECTION_LEVEL, DATABASE_ROLE ROLE, SWITCHOVER_STATUS FROM V$DATABASE;

PROTECTION_MODE      PROTECTION_LEVEL      ROLE           SWITCHOVER_STATUS
-------------------- -------------------- ---------------- --------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY PRIMARY       TO STANDBY

SQL> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#,BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;

PROCESS   STATUS      THREAD#  SEQUENCE#     BLOCK#     BLOCKS
--------- ------------ ---------- ---------- ---------- ----------
ARCH      CLOSING        1      35      36865        943
ARCH      CONNECTED        0       0          0      0
ARCH      CLOSING        1      36          1        763
ARCH      CLOSING        1      37          1        394
LGWR      WRITING        1      38       9387      1

SQL> col dest_name for a20
SQL> col error for a10
SQL> select DEST_NAME,STATUS,PROCESS,ERROR,TRANSMIT_MODE from v$archive_dest WHERE TARGET='STANDBY';

DEST_NAME         STATUS    PROCESS      ERROR      TRANSMIT_MOD
-------------------- --------- ---------- ---------- ------------
LOG_ARCHIVE_DEST_2   VALID     LGWR             PARALLELSYNC

Elapsed: 00:00:00.01




2.2     查看备库当前状态http://www.cndba.cn/dave/article/213http://www.cndba.cn/dave/article/213http://www.cndba.cn/dave/article/213

SQL> show pdbs

    CON_ID CON_NAME              OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     2 PDB$SEED              READ ONLY  NO
     3 PCNDBA              READ ONLY  NO
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL>

SQL> SELECT PROTECTION_MODE, PROTECTION_LEVEL, DATABASE_ROLE ROLE, SWITCHOVER_STATUS FROM V$DATABASE;

PROTECTION_MODE      PROTECTION_LEVEL      ROLE           SWITCHOVER_STATUS
-------------------- -------------------- ---------------- --------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY PHYSICAL STANDBY NOT ALLOWED


SELECT PROCESS, STATUS, THREAD#, SEQUENCE#,BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;


SQL> select process, status, thread#, sequence#,block#, blocks from v$managed_standby;

PROCESS   STATUS      THREAD#  SEQUENCE#     BLOCK#     BLOCKS
--------- ------------ ---------- ---------- ---------- ----------
ARCH      CLOSING        1      37          1        394
ARCH      CONNECTED        0       0          0      0
ARCH      CONNECTED        0       0          0      0
ARCH      CLOSING        1      31      43008       1696
RFS      IDLE            0       0          0      0
RFS      IDLE            1      38       9384      1
RFS      IDLE            0       0          0      0
RFS      IDLE            0       0          0      0

8 rows selected.


SQL> select group#,type,member from v$logfile order by 1;

    GROUP# TYPE    MEMBER
---------- ------- ------------------------------------------------------------------------------------------
     1 ONLINE  /home/ora12c/app/oracle/oradata/CNDBA_S/onlinelog/o1_mf_1_9y493jfy_.log
     1 ONLINE  /home/ora12c/app/oracle/fast_recovery_area/CNDBA_S/onlinelog/o1_mf_1_9y493jpr_.log
     2 ONLINE  /home/ora12c/app/oracle/oradata/CNDBA_S/onlinelog/o1_mf_2_9y493qfg_.log
     2 ONLINE  /home/ora12c/app/oracle/fast_recovery_area/CNDBA_S/onlinelog/o1_mf_2_9y493qlk_.log
     3 ONLINE  /home/ora12c/app/oracle/oradata/CNDBA_S/onlinelog/o1_mf_3_9y493xf1_.log
     3 ONLINE  /home/ora12c/app/oracle/fast_recovery_area/CNDBA_S/onlinelog/o1_mf_3_9y493xj9_.log
     4 STANDBY /home/ora12c/app/oracle/oradata/CNDBA_S/onlinelog/o1_mf_4_9y4942x0_.log
     4 STANDBY /home/ora12c/app/oracle/fast_recovery_area/CNDBA_S/onlinelog/o1_mf_4_9y49431g_.log
     5 STANDBY /home/ora12c/app/oracle/fast_recovery_area/CNDBA_S/onlinelog/o1_mf_5_9y4948hs_.log
     5 STANDBY /home/ora12c/app/oracle/oradata/CNDBA_S/onlinelog/o1_mf_5_9y4948cv_.log
     6 STANDBY /home/ora12c/app/oracle/oradata/CNDBA_S/onlinelog/o1_mf_6_9y494fr7_.log
     6 STANDBY /home/ora12c/app/oracle/fast_recovery_area/CNDBA_S/onlinelog/o1_mf_6_9y494fw3_.log
     7 STANDBY /home/ora12c/app/oracle/oradata/CNDBA_S/onlinelog/o1_mf_7_9y494mc4_.log
     7 STANDBY /home/ora12c/app/oracle/fast_recovery_area/CNDBA_S/onlinelog/o1_mf_7_9y494mgj_.log

14 rows selected.



注意,我的测试环境是使用ADG来搭建,这里自动给我们生成了standby redo log,并不是我们手工添加的。

2.3     启动备库MRP 进程

http://www.cndba.cn/dave/article/213

SQL> alter database recover managed standby database disconnect;

Database altered.

SQL>  select process, status, thread#, sequence#,block#, blocks from v$managed_standby;

PROCESS   STATUS      THREAD#  SEQUENCE#     BLOCK#     BLOCKS
--------- ------------ ---------- ---------- ---------- ----------
ARCH      CLOSING        1      40          1     68
ARCH      CLOSING        1      41          1     22
ARCH      CONNECTED        0       0          0      0
ARCH      CLOSING        1      38      12288        819
RFS      IDLE            0       0          0      0
RFS      IDLE            0       0          0      0
RFS      IDLE            0       0          0      0
RFS      IDLE            1      42       1411      1
MRP0      APPLYING_LOG        1      33      50772      78287

9 rows selected.

SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY WITH APPLY



2.4     测试http://www.cndba.cn/dave/article/213http://www.cndba.cn/dave/article/213

--主库创建表:
SQL>  create table dave as select * from all_users;
Table created.

Elapsed: 00:00:00.59

--备库立马就能查询到:
SQL> select count(1) from dave;
  COUNT(1)
----------
    35



2.5     强制使用12c 之前的策略

SQL> alter database recover managed standby database cancel;
Database altered.

SQL> alter database recover managed standby database using archived logfile disconnect from session;
Database altered.

SQL> select process, status, thread#, sequence#,block#, blocks from v$managed_standby;

PROCESS   STATUS      THREAD#  SEQUENCE#     BLOCK#     BLOCKS
--------- ------------ ---------- ---------- ---------- ----------
ARCH      CLOSING        1      40          1     68
ARCH      CLOSING        1      41          1     22
ARCH      CONNECTED        0       0          0      0
ARCH      CLOSING        1      38      12288        819
RFS      IDLE            0       0          0      0
RFS      IDLE            0       0          0      0
RFS      IDLE            0       0          0      0
RFS      IDLE            1      42       7717      1
MRP0      WAIT_FOR_LOG        1      42          0      0

9 rows selected.


注意这里MRP 进程的状态,和默认是不一样的。

区别如下:
WAIT_FOR_LOG: Process is waiting for the archived redo log to be completed
APPLYING_LOG : Process is actively applying the archived redo log to the standby database


版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2261
    原创
  • 3
    翻译
  • 578
    转载
  • 191
    评论
  • 访问:7968885次
  • 积分:4346
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ