ADG INTRODUCE
Active Data Guard(ADG)是ORACLE 11g企業版的新特性,需要單獨的License.可以打開Physical standby至read only模式,standby可以用來做報表系統、查詢、排序或Web站點。實時讀寫分離,以此來分擔primary DB的壓力。
ADG可以部署在多種商業應用環境中,如:
·通信行業:Schedules服務,自助查詢服務。
·醫療行業:快速訪問最新的醫療記錄。
·金融管理行業:自助查詢和報表。
·運輸行業:包裹跟蹤,訂單狀態查詢。
·商業網站:目錄瀏覽,訂單狀態,售后產品Reader Farms.
ADG特性:
1.實時查詢特性,可以打開Physical standby值read only模式並實時應用redo data.
2.啟用RMAN block-change tracking。用戶利用RMAN在primary的增量備份恢復到standby,性能最高可提升20倍。
Database只讀模式下允許的操作:
·SELECT操作,包括需要大量臨時段的查詢
·ALTER SESSION,ALTER SYSTEM
·SET ROLE
·調用Procedure
·使用DBLINK寫數據到遠程數據庫
·通過DBLINK調用遠程數據庫的Procedure
·在事務級別讀一致性使用SET TRANSACTION READ ONLY
·執行復雜的查詢,如:GROUPING SET,WITH查詢語句等
Database只讀模式下不允許的操作:
·任何DML或DDL操作
·訪問本地序列的查詢
·對本地臨時表的DML操作
ADG的先決條件:
1.ADG選項的license
2.參數COMPATIBLE>=11.0.0
ADG DETAILS
如何檢查當前是否啟用ADG
SQL> select database_role ,open_mode from v$database;
DATABASE_ROLE OPEN_MODE
------------------ --------------------
PHYSICAL STANDBY READ ONLY WITH APPLY
啟用ADG
SQL> alter database open read only;
SQL> recover managed standby database disconnect using current logfile;
注:AUDIT_TRAIL參數在數據庫打開時可用,read only的standby不支持update,如果AUDIT_TRAIL=DB,則在DB以read only模式打開后,AUDIT_TRAIL參數值會后台轉換為OS.
Standby為RAC時,如果應用redo的實例down掉,為保護數據的一致性,ORACLE會關閉其余OPEN READ ONLY的時候至MOUNT狀態,需要手工啟用另外的實例應用redo.
評估應用是否適合read-only database
參考文檔:
Note:1206774.1 - EVENT: 3177 "enable logging of read-only violations"
ADG LAG
standby由於以下的原因可能產生延遲:
- CPU處理能力不足
- 高網絡延遲
- 帶寬限制
監控LAG:
V$DATAGUARD_STATS
V$STANDBY_EVENT_HISTOGRAM
監控redo apply性能:
V$RECOVERY_PROGRESS
Transport Lag:
SQL> select * from v$dataguard_stats where name='transport lag';
Apply lag:
SQL> select * from v$dataguard_stats where name='apply lag';
查詢SCN實時比較primary和standby的LAG:
SQL> create database link standby connect to system identified by 'oracle' using 'standby';
SQL> select scn_to_timestamp((select current_scn from v$database))-scn_to_timestamp((select current_scn from v$database@standby)) LAG from dual;
STANDBY_MAX_DATA_DELAT參數:
STANDBY_MAX_DATA_DELAT={INTERGE|NONE},默認NONE,單位:秒,用來指定可容忍的LAG限定,參數為會話級,對SYS用戶無效。
如果standby查詢超出指定的時間,拋出ORA-3172 STANDBY_MAX_DATA_DELAY has been exceeded.
創建一個trigger,在用戶登錄時觸發設定該參數:
create or replace trigger adg_logon_trigger after logon on app.schema
begin
if (sys_context('userenv', 'database_role') in ('PHYSICAL STANDBY'))
then
execute immediate 'alter session set standby_max_data_delay=5';
endif;
end;
強制redo apply同步:
SQL> alter session sync with primary;
執行此命令后,將會阻塞應用直到standby與primary同步。
創建一個trigger強制用戶登錄后同步redo apply:
create trigger adg_logon_sync_trigger after logon on user.schema
begin
if (sys_context('userenv','database_role') in ('PHYSICAL STANDBY'))
then
execute immediate 'alter session sync with primary';
end if;
end;
性能提升
11g ADG的性能比10g提升了許多,oracle內部做了一些優化,介質恢復在symmetric multiprocessing (SMP) systems也比之前版本快了許多。
性能提升包括以下幾點:
- 更多的並行
- 更高效的異步redo讀取、解析和應用
- 減少同步點並行應用算法
- redo log介質恢復時不再阻塞應用下一組日志