導讀
本文檔演示如何建立一個物理備用數據庫,以下描述了備用數據庫最大性能模式的具體配置步驟,這是默認的數據保護模式。此文檔主要演示:
- 使用DUPLICATE FROM ACTIVE DATABASE RMAN 命令
- 啟用最大性能從庫模式
- 驗證從物理備份獲得的數據
- 通過SQL * Plus監控主庫和從庫
注:這里的OBE代表一種數據庫保護配置,orcl是主數據庫的SID,standby1是備用數據庫的SID。為簡單起見,在這個OBE里面主數據庫和備用數據庫在一台服務器上運行。
概述
Oracle數據庫11g RMAN介紹了從主數據庫復制物理備份的命令。這減輕了主庫和備用系統以前需要臨時存儲的壓力,以及單流網絡流量的限制。
現在,當您在主數據庫備份時,可以同時在基於並行流的網絡上創建和恢復備用數據庫。除了一些簡單的Oracle網絡設置,並建立一個目錄和臨時密碼文件,整個備用數據庫的產生可以在RMAN腳本完成。
RMAN會自動復制服務器參數文件到備用主機,備用主機通過網絡啟動輔助實例的服務器參數文件,恢復備份的控制文件,並復制所有必要的數據庫文件和歸檔重做日志。
准備
開始演示前,你應該:
1. 安裝Oracle Database 11g。
2. 創建一個目錄名為wkdir。下載並解壓“physstdby.zip”文件到wkdir目錄。
為備用數據庫的創建准備主數據庫
在這個步驟中,要驗證主數據庫的配置是否正確,以支持物理備份數據庫。
你只需要一次完成這些准備任務。在完成這些步驟之后,數據庫將為一個或多個備用數據庫的主數據庫服務。你需要執行以下步驟:
1. 確定是否啟用了強制日志記錄
如果沒有啟用,則啟用強制日志記錄模式。這個命令可能需要一些時間來完成,因為它等待所有未直接寫I/O完成。使用SQL*Plus執行以下命令:
SELECT force_logging FROM v$database;
ALTER DATABASE FORCE LOGGING;
2. 配置循環傳輸驗證
Data Guard使用網絡會話來傳輸數據保護配置的成員之間的同步數據和控制消息,這些同步的會話進行身份驗證使用安全套接字層(SSL)協議或遠程登錄密碼文件。
這個OBE,我們將使用隨后的步驟中創建的一個遠程登錄密碼文件。
3. 備份日志文件到主數據庫
通過添加備份日志文件到主數據庫,配置主數據庫以接受同步數據。驗證目錄路徑后,你可以使用以下cr_sby_redologs.sql文件,映射到您的環境。
強烈建議您有一個備用重做日志組,而不是您的聯機重做日志組作為主數據庫。該文件必須是相同的大小或大於主數據庫的聯機重做日志。

cr_sby_redologs.sql文件內容:
set echo on ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/oracle/oradata/orcl/srl01.log' SIZE 52428800 / ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/oracle/oradata/orcl/srl02.log' SIZE 52428800 / ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/oracle/oradata/orcl/srl03.log' SIZE 52428800 / ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/oracle/oradata/orcl/srl04.log' SIZE 52428800 /
4. 設置主數據庫初始化參數
在主數據庫中,您定義了控制重做傳輸服務的初始化參數,而數據庫處於主角色中的初始參數。這些措施包括:
| DB_NAME |
指定數據庫名稱。必須是orcl |
| DB_UNIQUE_NAME |
為每個數據庫指定一個唯一的名稱。即使DG角色改變,也必須為orcl |
| CONTROL_FILES |
指定在主數據庫上的控制文件的本地路徑名。 |
| LOG_ARCHIVE_CONFIG |
主數據庫和備用數據庫的db_unique_name采用DG_CONFIG列表的屬性 |
| LOG_ARCHIVE_DEST_1 |
本地重做日志文件默認存檔路徑 |
| LOG_ARCHIVE_DEST_2 |
僅適用於主庫角色,傳輸重做數據到遠程的物理備份standby1。 |
| REMOTE_LOGIN_PASSWORDFILE |
必須是唯一的或共享的,如果一個遠程登錄密碼文件 |
| LOG_ARCHIVE_DEST-STATE_n |
必須啟用(默認) |
驗證你的db_name和db_unique_name設置。

使用set_log_params.sql腳本設置log_archive_config和log_archive_dest_2參數。

set_log_params.sql內容如下:
set echo on ALTER SYSTEM SET log_archive_config = 'dg_config=(orcl,standby1)'; ALTER SYSTEM SET log_archive_dest_2 = 'service=standby1 async valid_for=(online_logfile,primary_role) db_unique_name=standby1'; show parameter log_archive_config show parameter log_archive_dest_2
5. 啟用自動歸檔
執行以下語句來確定你的數據庫的存檔狀態,然后把主數據庫在ARCHIVELOG模式下啟用自動歸檔。

建立物理備用數據庫(從庫)
在這部分文檔中,你需要配置網絡環境並且建立一個物理備份數據庫(從庫)。
注:這里,你是在單服務器環境中配置的。如果你要在不同的兩台服務器中配置環境,你需要相應地在這兩個服務器上配置oracle網絡服務。
A. 為從庫建立一個oracle網絡服務名稱
Data Guard配置將使用oracle的網絡服務名稱來引用不同的數據庫,那么為您的物理備份數據庫添加服務名稱吧。你可以通過添加tns_entry.txt提供的配置追加到已存在的$ORACLE_HOME/network/admin/tnsnames.ora文件,如下所示。

注:如果你熟悉Oracle網絡服務使用netmgr實用工具來配置新的服務入口。
注:很可能您已經為您的主數據庫定義了一個服務名稱,如上圖所示。如果沒有,一定要為該數據庫添加一個服務名稱。
tns_entry.txt文件內容:
STANDBY1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = host01.example.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = standby1.example.com) ) )
B. 配置listener.ora文件為您的備用數據庫准備
在下面的部分中,您將使用RMAN創建備用數據庫。為此你將需要添加一個數據庫服務進入你的listener.ora文件。這可以通過添加sid_entry.txt提供的配置到現有$ORACLE_HOME/network/admin/listener.ora文件,如下所示。

sid_entry.txt文件內容:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = standby1.example.com) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1) (SID_NAME = standby1) ) )
C. 建立從庫
1. 使用lsnrctl stop 和lsnrctl start命令停止和重啟oracle網絡監聽。

2. 復制遠程登錄密碼文件
切換路徑到$ORACLE_HOME/dbs並且從主數據庫系統的$ORACLE_HOME/dbs目錄復制遠程登錄密碼文件(orapworcl)到備用數據庫系統,重命名為orapwstandby1。

注意:密碼文件必須重新復制每次SYSDBA或SYSOPER權限授予或撤銷,只要具有這些權限的用戶登錄密碼的改變。如果您使用的是不同的服務器,你可能需要FTP,或其他一些遠程文件傳輸機制。
3. 創建初始化參數文件
在從庫的$ORACLE_HOME/dbs的目錄下,創建名為initstandby1.ora的初始化參數文件,包含一條屬性:
DB_NAME=<physical standby SID> (i.e. standby1)
4. 創建物理備份目錄
在從庫中,切換目錄到/u01/app/oracle/admin,創建一個名稱相匹配你的物理備份SID目錄(即standby1),切換到新建的目錄(即standby1)並創建adump目錄。

5. 創建數據文件目錄
在從庫,在$ORACLE_BASE/oradata路徑下創建一個名稱與從庫SID(即. standby1)相匹配的數據文件目錄。

6. 設置從庫ORACLE_SID注意:你或許需要也在你的快速恢復區創建一個類似的目錄,這取決於您如何配置您的現有的主數據庫( i.e. $ORACLE_BASE/flash_recovery_area)。
在從庫,使用NOMOUNT模式啟動實例與文本初始化參數之前,設置從庫SID (即:standby1) 環境變量ORACLE_SID的值。

7. RMAN腳本
對於主庫,確保ORACLE_SID環境變量設置為您的主數據庫的SID(如:orcl)。驗證您的當前目錄包含cr_phys_sby1.txt RMAN腳本。

cr_phys_sby1.txt 腳本內容:
run { allocate channel prmy1 type disk; allocate channel prmy2 type disk; allocate channel prmy3 type disk; allocate channel prmy4 type disk; allocate auxiliary channel stby type disk; duplicate target database for standby from active database spfile parameter_value_convert 'orcl','standby1' set db_unique_name='standby1' set db_file_name_convert='/orcl/','/standby1/' set log_file_name_convert='/orcl/','/standby1/' set control_files='/u01/app/oracle/oradata/standby1/standby1.ctl' set log_archive_max_processes='5' set fal_client='standby1' set fal_server='orcl' set standby_file_management='AUTO' set log_archive_config='dg_config=(orcl,standby1)' set log_archive_dest_2='service=orcl ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=orcl'; }
8. 連接目標數據庫
在主庫,調用RMAN並且以SYSDBA角色連接目標數據庫,SYSDBA連接到輔助數據庫,輸入SYS的密碼。

9. 產生一個新的從庫
在主庫中,使用RMAN執行 cr_phys_sby1.txt腳本中的命令。當這個腳本完成后,您將有一個新的備用數據庫,該數據庫是在沒有任何臨時存儲的網絡上創建的。

...
...
...

10. 日志切換
在主數據庫上執行日志切換,備份將開始發送到從庫。

11. 啟動恢復過程
在從庫,確保oracle_sid環境變量設置為你的物理備庫的SID(即standby1)並啟動恢復過程。

驗證物理備份數據庫是否正確執行
一旦您創建了物理備份數據庫,並設置了重做傳輸服務,您可能要驗證數據庫修改正在從主數據庫成功地同步到備用數據庫。要查看在備用數據庫上的重做數據,您應該首先識別在備用數據庫上的現有的歸檔同步日志文件,強制日志開關並在主數據庫上歸檔幾個聯機同步日志文件,然后再檢查備用數據庫。下面的步驟演示如何執行這些任務。
1. 查詢歸檔文件
在備用數據庫,通過查詢V$ARCHIVED_LOG視圖找出存在的歸檔同步日志文件,你可以使用query_archived_log.sql文件。

注意:根據您的機器性能,您可能會看到,在您查詢視圖時已應用了兩個歸檔重做日志。
set echo on
SELECT sequence#, first_time, next_time, applied
FROM v$archived_log
ORDER BY sequence#
/
2. 歸檔同步日志文件
主庫中,通過 ALTER SYSTEM SWITCH LOGFILE命令歸檔同步眾多日志文件。

3. 重新查詢歸檔文件
從庫中,重新查詢$ARCHIVED_LOG視圖來驗證archived_log同步數據接收和應用情況。

注:在完成這一步時,物理備份數據庫正在運行,並提供數據保護的最大性能級別。
清除
cleanup.sh腳本提供了停止和刪除創建的物理備用數據庫。請注意,其他Data Guard的建立使用了這個教程,建議你在物理備用數據庫完成這個清理過程。
執行cleanup.sh腳本並停止、移除備用數據庫
cleanup.sh腳本內容:
export ORACLE_SID=standby1 sqlplus / as sysdba << EOI shutdown immediate exit EOI export ORACLE_SID=orcl sqlplus / as sysdba << EOI alter system set dg_broker_start=false; alter system reset log_archive_config; alter system reset log_archive_dest_2; shutdown immediate startup mount alter database noarchivelog; shutdown immediate startup alter database drop standby logfile group 4; alter database drop standby logfile group 5; alter database drop standby logfile group 6; alter database drop standby logfile group 7; exit EOI rm -rf /u01/app/oracle/admin/standby1 rm -rf /u01/app/oracle/oradata/standby1 rm -f /u01/app/oracle/oradata/orcl/srl0*.log rm -rf /u01/app/oracle/flash_recovery_area/STANDBY1 rm -rf $ORACLE_HOME/dbs/*standby1* rm -rf $ORACLE_HOME/dbs/dr*.dat rm -rf $ORACLE_HOME/dbs/hc*.dat rm -rf $ORACLE_HOME/dbs/lkSTANDBY1
結束語
1.本文檔翻譯自Oracle官網中關於建立oracle讀寫分離的文檔,由於水平有限,可能會出現語義不夠清楚的情況,詳情參見網址:http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/11g/r2/prod/ha/dataguard/physstby/physstdby.htm。
2. 此文檔是經過配置完成后確認是可行的方案。要注意的是文中的路徑,如:/u01/app/... 之類的為oracle默認的安裝路徑,在實際中我們替換成自己的安裝路徑就好,如:/home/oracle/app/...。
3. 完成配置后,如果發現主從數據庫數據無法同步,請將數據庫DataGuard的數據保護模式從最大保護切換到最高可用性。詳細步驟參考:http://blog.csdn.net/lqx0405/article/details/44777143。

