1. 程式人生 > >ORACLE 11G DATA GUARD配置之Dataguard基本原理

ORACLE 11G DATA GUARD配置之Dataguard基本原理

1、DATAGUARD原理
DATAGUARD是通過建立一個PRIMARY和STANDBY組來確立其參照關係。

STANDBY一旦建立,DATAGUARD就會通過將主資料庫(PRIMARY)的REDO傳遞給STANDBY資料庫,然後在STANDBY中應用REDO實現資料庫的同步。

有兩種型別的STANDBY:物理STANDBY和邏輯STANDBY
物理STANDBY提供與主資料庫完全一樣的拷貝(塊到塊),資料庫SCHEMA,包括索引都是一樣的。它是直接應用REDO實現同步的。
邏輯STANDBY則不是這樣,在邏輯STANDBY中,邏輯資訊是相同的,但物理組織和資料結構可以不同,它和主庫保持同步的方法是將接收的REDO轉換成SQL語句,然後在STANDBY上執行SQL語句。邏輯STANDBY除災難恢復外還有其它用途,比如用於使用者進行查詢和報表。

DATAGUARD包含三個服務(日誌傳輸、日誌應用、角色轉換)
日誌傳輸服務控制REDO資料的傳輸(傳輸日誌,實施資料庫保護模式)————–STANDBY上通過起用RFS程序接收REDO資料。
日誌應用服務則一方面自動應用日誌,另一方面自動檢測STANDBY缺少的REDO,並從主資料庫或其它STANDBY中自動查詢出丟失的REDO。

DATAGUARD的幾種保護模式:最大保護,最大可用,最大效能
最大保護是指除非REDO在至少一個STANDBY中可用,否則事務不能提交。如果在某個STANDBY中不可用,則主資料庫的操作被停止。通常受制約比較多,在生產環境中不是很常用(價效比不好)。
最大可用是指如果STANDBY不可用,主資料庫仍然可以處理事務,只是在問題被糾正後,STANDBY和主資料庫進行再同步。這樣的一個問題是:當再同步之前有FAILOVER時,有些資料可能會丟失。
最大效能是指主資料庫的提交操作不等待STANDBY。PRIMARY和STANDBY鬆耦合,資料保護級別較低。

物理STANDBY可能的模式:只讀模式(OPEN READONLY)和恢復模式(MANANGED RECOVERY)

2、物理DATAGUARD實施簡要過程
主資料庫的準備工作:FORCE LOGGING,ENABLE ARCHIVING,一個本地歸檔目的地。
建立STANDBY資料庫:
a.關閉主庫,冷備份主庫資料檔案、日誌檔案和密碼檔案,然後啟動主庫,在主庫上建立STANDBY的控制檔案:alter database create standby controlfile as ‘檔名’
b.準備引數檔案,將引數檔案、備份的主庫檔案和STANDBY控制檔案拷貝到STANDBY系統。
需要更改的引數有:standby_archive_dest—–接收的歸檔日誌存放處
db_file_name_convert和log_file_name_convert—–僅當主庫和STANDBY庫在同一系統下時用
log_archive_dest_1—–本地歸檔目的地
log_archive_dest_2=’service=standby’—–歸檔到STANDBY的目的地
standby_file_management=auto
remote_archive_enable=true
fal_server
fal_client
instance_name—–當主庫和STANDBY庫在同一系統下時該引數用於區分主庫
lock_name_space—–當主庫和STANDBY庫在同一系統下時指定STANDBY的例項名和INSTANCE_NAME相同
c.如果是WINDOWS系統,需要建立WINDOWS服務。
d.配置兩臺機器的tnsnames.ora,雙方都能tnsping通
e.在主庫和STANDBY庫上配置監聽
f.起用STANDBY系統上的死連線檢測:sqlnet.ora中設定sqlnet.expire_time=2
g.在STANDBY上建立SPFILE
h.啟動STANDBY:
startup nomount
alter database mount standby database
i.初始化日誌應用服務
alter database recover managed standby database disconnect from session;

3、DATAGUARD維護

a.日誌傳送服務
有些情況下,你可能需要在歸檔日誌和應用日誌之間有個時間間隔,此時可以通過在STANDBY上指定引數log_archive_dest_n中指定delay=minutes屬性。
STANDBY上的日誌應該與主庫上的日誌大小相同,另外STANDBY上的日誌組應該比主庫多,因為這樣歸檔操作才有時間完成。也就是RFS(日誌接收)程序在使用STANDBY的日誌前,不用等待該日誌被歸檔。最簡單判斷日誌組是否夠的方法是檢視警告日誌和RFS的TRACE檔案。
增加STANDBY日誌檔案的方法:
alter database 語句中使用add standby logfile子句。相關檢視vstandbylog,vlogfile
增加STANDBY日誌組的方法:
alter database add standby logfile group 10 (‘檔名1’,’檔名2’) size 100M對於多個 STANDBY共享歸檔日誌檔案目的地,有些情況下需要指定log_archive_dest_n引數的dependency屬性,該屬性的作用是說明該目的地依賴於父目的地的成功歸檔。
引數log_archive_dest_n還可以指定reopen、max_failures、sync、async屬性。通過給該引數指定LGWR或者ARCH屬性以選擇是用LGWR還是ARCH程序傳送日誌。
用於日誌接收的幾個程序是:LGWR,ARCH,RFS,FAL。FAL程序用於解決日誌縫。
設定資料保護模式的語句為:alter database set standby database to maximun(protection|availability|performance)

b.日誌應用服務
對於物理STANDBY,日誌應用服務涉及到下面幾個程序:RFS,ARC,MRP。MRP是管理恢復程序。
啟動STANDBY的恢復操作的幾個命令:alter database recover managed standby database(啟動前臺會話);alter database recover managed standby database disconnect from session(啟動後臺會話,也就是說會話可以繼續幹別的事情);alter database recover managed standby database cancel(停止日誌應用).
可以通過查詢檢視v$managed_standby檢視日誌應用情況。

c.資料檔案管理
當主庫新建立資料檔案,可定義引數standby_file_management為auto,讓standby也自動建立資料檔案。如果主庫和standby的資料檔案的目錄結構不一樣,可以設定db_file_name_convert將主庫上的檔名轉換成standby上的檔名。如果standby_file_management設為auto,則不能在standby上重新命名或建立資料檔案、日誌檔案。
每分鐘主庫會詢問standby是否有gap,該行為被稱為heartbeat.
可以查詢檢視varchivedgapGAPstandbystandbyalterdatabaseregisterlogfilefalserver,falclientgapSTANDBYvmanaged_standby,varchiveddeststatus,varchived_log,vlogstatus,vdataguard_status.
可以設定引數log_archive_trace對歸檔進行不同級別的跟蹤。

d.角色轉換
ORACLE支援兩種形式的角色轉換—-switchover和failover
switchover包含兩個步驟,首先主庫被轉換成STANDBY,然後STANDBY被轉換成主庫
switchover的準備工作:完成角色轉換需要改變的引數(必須改變所有STANDBY上的 log_archive_dest_n和log_archive_dest_state_n);確保主庫和所有STANDBY都有連線;確認沒有使用者連線到資料庫;對於RAC環境確保只有一個例項是活動狀態;角色轉換之前,主庫例項應該是OPEN狀態,而STANDBY例項是MOUNT狀態,因為這樣的話,轉換過程中STANDBY資料庫也可以應用歸檔日誌,如果STANDBY為READONLY,切換操作仍然可以進行,只是要花一點額外的時間;如果切換操作包含邏輯STANDBY,那麼,主庫例項和STANDBY例項都必須為OPEN狀態;將要轉換成主庫的STANDBY變成歸檔模式;取消在該STANDBY庫上的日誌延遲。
switchover的步驟:在當前主庫上,首先確認可以執行switchover操作(select switchover_status from vdatabase,TOSTANDBYDATAGUARD)STANDBY(ALTERDATABASECO