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
版权声明:本文为博主原创文章,未经博主允许不得转载。