?
?
第二部分物理standby(1)創建步驟? 2007.12.03
一、準備工作?
?
??? 不管物理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 提供了一些標準的建議如下:
?
??? ●?確保standby redo log 的文件大小與primary 數據庫online redo log 文件大小相同。
????這個很好理解的吧,就是為了接收和應用方便嘛。
?
??? ● 創建適當的日志組
????一般而言,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_PRODUC
ESSES:
?? 指定歸檔進程的數量(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;
?
二、手把手的創建物理standbstandby
?
1、創建備份(手工復制數據文件或通過RMAN) ---primary 庫操作
?
2、創建控制文件--primary 庫操作
?
?? ?
通過下列語句為standby 數據庫創建控制文件
????
SQL> alter database create standby controlfile as 'd:\backup\jsspdg01.ctl';
?
???
注意喲,控制文件通常需要有多份,你要么手工將上述文件復制幾份,要么用命令多創建幾個出來。另外,創建完控制文件之后到standby 數據庫創建完成這段時間內,要保證primary 數據庫不再有結構性的變化(比如增加表空間等等),不然primary 和standby 同步時會有問題。?
3、創建初始化參數文件
?
??? ●?創建客戶端初始化參數文件
?? ?例如:
????
SQL> create pfile='d:\backup\initjsspdg.ora' from spfile;
?
????● 修改初始化參數文件中的參數
????根據實際情況修改吧,注意primary 和standby 不同角色的屬性配置,注意文件路徑。
?
4、復制文件到standby 服務器
?
?? ?至少三部分:數據文件,控制文件,修改過的初始化參數文件,注意路徑。
?
5、配置standby 數據庫
?
?? ?如果你看過三思之前“一步一步學rman”系列,看過“duplicate 復制數據庫”,或看過“傳輸表空間復制數據”系列,那么對于創建一個新的數據庫應該非常熟悉了,下面再簡單描述一下步驟:
????1).創建新的OracleService(windows 環境下需要)。
?? ?2).創建密碼文件,注意保持密碼與primary 數據庫一致。
?? ?3).配置監聽并啟動
?? ?4).修改primary 和standby 的tnsnames.ora,各自增加對應的Net Service Name。
?? ?5).創建服務器端的初始化文件
?
6、啟動standby
?
?? ?注意喲,咱們前面說過的,物理standby 極少情況下可以以read-write 模式打開,某些情況下可以以readonly模式打開,所以默認情況下,加載到mount 狀態即可。
?
????
啟動redo 應用
????SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM?SESSION;
?
?? ?啟動實時應用
????
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT?LOGFILE DISCONNECT FROM SESSION;
?
????
提示:disconnect?from?session子句并非必須,該子句用于指定啟動完應用后自動退出到命令操作符前,如果不指定的話,當前session 就會一直停留處理redo 應用,如果想做其它操作,就只能新建一個連接。
?
7、停止standby
?
?? ?正常情況下,我們停止也應該是先停止redo 應用,可以通過下列語句:
????SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CALCEL;
?
????然后再停止standby 數據庫
????SQL> SHUTDOWN IMMEDIATE;
?
?? ?當然你非要直接shutdown 也沒問題,dg 本來就是用于容災的,別說你生停standby,就是直接拔電源也不怕。
?? ?基本步驟就是這樣,下面我們進入實踐環節....................
?
?
-The End-