一、準備工作
不管物理standby還是邏輯standby,其初始創建都是要依賴primary數據庫,因爲這個準備工作中最重要的一部分,就是對primary數據庫的配置。
1、打開Forced Logging模式
將primary數據庫置爲FORCE LOGGING模式。通過下列語句:
SQL> alter database force logging;
提示:關於FORCE LOGGING
想必大家知道有一些DDL語句可以通過指定NOLOGGING子句的方式避免寫redo log(目的是提高速度,某些時候確實有效),指定數據庫爲FORCE LOGGING模式後,數據庫將會記錄除臨時表空間或臨時回滾段外所有的操作而忽略類似NOLOGGING之類的指定參數。如果在執行force logging時有nologging之類的語句在執行,則force logging會等待直到這類語句全部執行。FORCE LOGGING是做爲固定參數保存在控制文件中,因此其不受重啓之類操作的影響(只執行一次即可),如果想取消,可以通過alter database no force logging語句關閉強制記錄。
2、創建密碼文件(如果不存在的話)
需要注意的是,同一個Data Guard配置中所有數據庫必須都擁有獨立的密碼文件,並且必須保證同一個Data Guard配置中所有數據庫服務器的SYS用戶擁有相同密碼以保證redo數據的順利傳輸,因爲redo傳輸服務通過認證的網絡會話來傳輸redo數據,而會話使用包含在密碼文件中的SYS用戶密碼來認證。
3、配置Standby Redo Log
對於最大保護和最高可用性模式,Standby數據庫必須配置standby redo log,並且oracle推薦所有數據庫都使用LGWR ASYNC模式傳輸,當然你現在可能還不知道LGWR ASYNC是什麼問題,沒關係,你很快就會知道了。
Oracle建議你在創建standby時就考慮standby redolog配置的問題。standby redologs與online redologs非常類似,應該說兩者只是服務對象不同,其它參數屬性甚至操作的命令格式幾乎都一樣,你在設計standby redologs的時候完全可以借鑑創建online redologs的思路,比如多個文件組啦,每組多個文件冗餘之類的。除些之外呢,oracle提供了一些標準的建議如下:
l 確保standby redo log的文件大小與primary數據庫online redo log文件大小相同。
這個很好理解的吧,就是爲了接收和應用方便嘛。
l 創建適當的日誌組
一般而言,standby redo日誌文件組數要比primary數據庫的online redo日誌文件組數至少多一個。推薦standby redo日誌組數量基於primary數據庫的線程數(這裏的線程數可以理解爲rac結構中的rac節點數)。
有一個推薦的公式可以做參考:(每線程的日誌組數+1)*最大線程數
例如primary數據庫有兩個線程,每個線程分配兩組日誌,則standby日誌組數建議爲6組,使用這個公式可以降低primary數據庫實例LGWR進程鎖住的可能性。
提示:邏輯standby數據庫有可能需要視工作量增加更多的standby redo log文件(或增加歸檔進程),因爲邏輯standby需要同時寫online redo log文件。
Standby redo log的操作方式與online redo log幾乎一模一樣,只不過在創建或刪除時需要多指定一個standby關鍵字,例如添加:
SQL> alter database add standby logfile group 4 ('e:/ora10g/oradata/jsspdg/STANDBYRD01.LOG') size 20M;
刪除也同樣簡單:
SQL> alter database drop standby logfile group 4;
另外,從可靠性方面考慮,建議在primary數據庫也創建standby redologs,這樣一旦發生切換,不會影響primary做爲standby的正常運行。
驗證standby redo log文件組是否成功創建
例如:
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
4、設置初始化參數
對於primary數據庫,需要定義幾個primary角色的初始化參數控制redo傳輸服務,還有幾個附加的standby角色的參數需要添加以控制接收redo數據庫並應用(switchover/failover後primary/standby角色可能互換,所以建議對於兩類角色相關的初始化參數都進行配置)。
下列參數爲primary角色相關的初始化參數: |
|
DB_NAME |
注意保持同一個Data Guard中所有數據庫DB_NAME相同。 例如:DB_NAME=jssweb |
DB_UNIQUE_NAME |
爲每一個數據庫指定一個唯一的名稱,該參數一經指定不會再發生變化,除非你主動修改它。 例如:DB_UNIQUE_NAME=jssweb |
LOG_ARCHIVE_CONFIG |
該參數通過DG_CONFIG屬性羅列同一個Data Guard中所有DB_UNIQUE_NAME(含primary db及standby db),以逗號分隔 例如:LOG_ARCHIVE_CONFIG='DB_CONFIG=(jssweb,jsspdg)' |
CONTROL_FILES |
沒啥說的,控制文件所在路徑。 |
LOG_ARCHIVE_DEST_n |
歸檔文件的生成路徑。該參數非常重要,並且屬性和子參數也特別多(這裏不一一列舉,後面用到時單獨講解如果你黑好奇,建議直接查詢oracle官方文檔。Data guard白皮書第14章專門介紹了該參數各屬性及子參數的功能和設置)。例如: LOG_ARCHIVE_DEST_1= 'LOCATION=E:/ora10g/oradata/jssweb VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jssweb' |
LOG_ARCHIVE_DEST_STATE_n |
指定參數值爲ENABLE,允許redo傳輸服務傳輸redo數據到指定的路徑。該參數共擁有4個屬性值,功能各不相同。 |
REMOTE_LOGIN_PASSWORDFILE |
推薦設置參數值爲EXCLUSIVE或者SHARED,注意保證相同Data Guard配置中所有db服務器sys密碼相同。 |
LOG_ARCHIVE_FORMAT |
指定歸檔文件格式。 |
LOG_ARCHIVE_MAX_PRODUCESSES |
指定歸檔進程的數量(1-30),默認值通常是4。 |
以下參數爲standby角色相關的參數,建議在Primary數據庫的初始化參數中也進行設置,這樣在role transition後(Primary轉爲Standby)也能正常運行: |
|
FAL_SERVER |
指定一個數據庫SID,通常該庫爲primary角色。 例如:FAL_SERVER=jssweb |
FAL_CLIENT |
指定一個數據庫SID,通常該庫爲standby角色。 例如:FAL_CLIENT=jsspdg 提示:FAL是Fetch Archived Log的縮寫 |
DB_FILE_NAME_CONVERT |
在做duplicate複製和傳輸表空間的時候這類參數講過很多遍,該參數及上述內容中同名參數功能,格式等完全相同。 |
LOG_FILE_NAME_CONVERT |
同上 |
STANDBY_FILE_MANAGEMENT |
如果primary數據庫數據文件發生修改(如新建,重命名等)則按照本參數的設置在standby中做相應修改。設爲AUTO表示自動管理。設爲MANUAL表示需要手工管理。 例如:STANDBY_FILE_MANAGEMENT=AUTO |
注意:上面列舉的這些參數僅只是對於primary/standby兩角色可能會相關的參數,還有一些基礎性參數比如*_dest,*_size等數據庫相關的參數在具體配置時也需要根據實際情況做出適當修改。
5、確保數據庫處於歸檔模式
SQL> archive log list;
數據庫日誌模式 存檔模式
自動存檔 啓用
.......
如果當前primary數據庫並未處於歸檔模式,可通過下列命令將數據庫置爲歸檔模式:
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;