【DataGuard】Oracle 11g物理Active Data Guard實時查詢(Real-time query)特性

zhouxianwang發表於2012-10-25
Oracle 11g以前版本中的的Data Guard物理備用資料庫,可以以只讀的方式開啟資料庫,但此時Media Recovery利用日誌進行資料同步的過程就停止了,如果物理備用資料庫處於恢復的過程中資料庫就不能開啟查詢,也就是說日誌應用和只讀開啟兩個狀態是互斥的,而Oracle 11g Active Data Guard功能解決了這個矛盾,在利用日誌恢復資料的同時可以用只讀的方式開啟資料庫,使用者可以在備用資料庫上進行查詢、報表等操作,這類似邏輯Data Guard備用資料庫的功能(查詢功能方面),但是,資料同步的效率更高、對硬體的資源要求更低。這樣可以更大程度地發揮物理備用資料庫的硬體資源的效能。

  以建立表空間、使用者以及表為例體驗一下Oracle 11g物理Active Data Guard實時查詢(Real-time query)特性

1.調整備庫為“READ ONLY WITH APPLY”狀態
  這體現的便是Oracle 11g物理Active Data Guard功能中的“Active”真實含義。
1)檢視備庫當前狀態
ora11gdg@secdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Mar 16 11:54:52 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

sys@ora11gdg@> select open_mode from v$database;

OPEN_MODE
--------------------
MOUNTED

  此時備庫處於MOUNT狀態。

2)取消備庫的自動恢復
sys@ora11gdg@> alter database recover managed standby database cancel;

Database altered.

3)OPEN備庫調整為“READ ONLY”狀態
sys@ora11gdg@> alter database open;

Database altered.

sys@ora11gdg@> select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY

4)在“READ ONLY”狀態下進一步啟動備庫的恢復
sys@ora11gdg@> alter database recover managed standby database using current logfile disconnect;

Database altered.

  選項“USING CURRENT LOGFILE”的含義是當備庫收到日誌後,儘快完成恢復。

sys@ora11gdg@> select open_mode from v$database;

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

  狀態“READ ONLY WITH APPLY”即表示此時備庫處於Read Only狀態的同時可以接受主庫傳過來的日誌進行恢復,以便達到備庫可以即時檢視到主庫變化的目的。

2.體驗實時查詢(Real-time query)特性
1)主庫上建立表空間、使用者以及表並初始化資料
(1)建立表空間並檢視錶空間建立結果和狀態
sys@ora11g> create tablespace secooler_tbs datafile '/u01/app/oracle/oradata/ora11g/secooler_tbs01.dbf' size 10m;

Tablespace created.

sys@ora11g> select * from v$tablespace where name = 'SECOOLER_TBS';

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         8 SECOOLER_TBS                   YES NO  YES

sys@ora11g> select ts#,status,bytes,name from v$datafile where ts# = 8;

       TS# STATUS       BYTES NAME
---------- ------- ---------- ------------------------------
         8 ONLINE    10485760 /u01/app/oracle/oradata/ora11g
                              /secooler_tbs01.dbf

(2)建立使用者並授權
sys@ora11g> create user secooler identified by secooler default tablespace secooler_tbs;

User created.

sys@ora11g> grant dba to secooler;

Grant succeeded.

(3)建立表並初始化資料
sys@ora11g> conn secooler/secooler
Connected.
secooler@ora11g> create table t (x varchar2(8));

Table created.

secooler@ora11g> insert into t values ('Secooler');

1 row created.

secooler@ora11g> commit;

Commit complete.

secooler@ora11g> select * from t;

X
--------
Secooler

2)此時觀察ora11g例項的alert日誌記錄瞭如下資訊
Fri Mar 16 11:56:36 2012
create tablespace secooler_tbs datafile '/u01/app/oracle/oradata/ora11g/secooler_tbs01.dbf' size 10m
Fri Mar 16 11:56:48 2012
Completed: create tablespace secooler_tbs datafile '/u01/app/oracle/oradata/ora11g/secooler_tbs01.dbf' size 10m

3)幾乎與此同時(1秒)備庫ora11gdg例項的警告日誌中記錄瞭如下資訊
Fri Mar 16 11:56:37 2012
Recovery created file /u01/app/oracle/oradata/ora11gdg/secooler_tbs01.dbf
Successfully added datafile 5 to media recovery
Datafile #5: '/u01/app/oracle/oradata/ora11gdg/secooler_tbs01.dbf'

  可見,備庫已經接受到主庫的這個變化,並把這個變化在備庫應用完畢。

4)驗證主庫所建立表空間、使用者以及表並初始化資料是否在備庫應用成功
(1)檢視備庫表空間
sys@ora11gdg> select * from v$tablespace where name = 'SECOOLER_TBS';

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         8 SECOOLER_TBS                   YES NO  YES

sys@ora11gdg> select ts#,status,bytes,name from v$datafile where ts# = 8;

       TS# STATUS       BYTES NAME
---------- ------- ---------- ------------------------------
         8 RECOVER   10485760 /u01/app/oracle/oradata/ora11g
                              dg/secooler_tbs01.dbf

  建立成功,但是此時備庫資料檔案的狀態是“RECOVER”。

(2)檢視備庫使用者及資料是否存在
sys@ora11gdg> conn secooler/secooler
Connected.
secooler@ora11g> set lines 80
secooler@ora11g> desc t;
 Name               Null?    Type
 ------------------ -------- ----------------------------
 X                           VARCHAR2(8)

secoolerdg@ora11g> select * from t;

X
--------
Secooler

  主庫上的變化已經即使的在備庫上得到應用。
  這便是Oracle 11g物理Active Data Guard實時查詢(Real-time query)特性的體現。

3.小結
  本文以實驗的方式體驗了Oracle 11g物理Active Data Guard實時查詢(Real-time query)特性。這項特性非常值得稱讚,備庫在這種特性的支援下,Oracle可以最大限度滿足備庫作為報表庫或者查詢分析型別資料庫的需求。BTW:這項令人激動的特性是收費,也就是說大家想將這個特性用在生產環境下的話需要單獨付費。

Good luck.

secooler
12.03.16

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27036311/viewspace-747190/,如需轉載,請註明出處,否則將追究法律責任。

相關文章