【原創】Oracle主從同步---建立物理備份數據庫[Creating a Physical Standby Database]

導讀

本文檔演示如何創建一個物理備用數據庫,如下描述了備用數據庫最大性能模式的具體配置步驟,這是默認的數據保護模式。此文檔主要演示:web

  1. 使用DUPLICATE FROM ACTIVE DATABASE RMAN 命令
  2. 啓用最大性能從庫模式
  3. 驗證從物理備份得到的數據
  4. 經過SQL * Plus監控主庫和從庫

注:這裏的OBE表明一種數據庫保護配置,orcl是主數據庫的SIDstandby1是備用數據庫的SID。爲簡單起見,在這個OBE裏面主數據庫和備用數據庫在一臺服務器上運行。sql

 

概述

Oracle數據庫11g RMAN介紹了從主數據庫複製物理備份的命令。這減輕了主庫和備用系統之前須要臨時存儲的壓力,以及單流網絡流量的限制。數據庫

如今,當您在主數據庫備份時,能夠同時在基於並行流的網絡上建立和恢復備用數據庫。除了一些簡單的Oracle網絡設置,並創建一個目錄和臨時密碼文件,整個備用數據庫的產生能夠在RMAN腳本完成。安全

RMAN會自動複製服務器參數文件到備用主機,備用主機經過網絡啓動輔助實例的服務器參數文件,恢復備份的控制文件,並複製全部必要的數據庫文件和歸檔重作日誌。服務器

 

準備

開始演示前,你應該:網絡

1. 安裝Oracle Database 11g。oracle

2. 建立一個目錄名爲wkdir。下載並解壓「physstdby.zip」文件到wkdir目錄。app

 

爲備用數據庫的建立準備主數據庫

在這個步驟中,要驗證主數據庫的配置是否正確,以支持物理備份數據庫。async

你只須要一次完成這些準備任務。在完成這些步驟以後,數據庫將爲一個或多個備用數據庫的主數據庫服務。你須要執行如下步驟:工具

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_configlog_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文件

            

注意:根據您的機器性能,您可能會看到,在您查詢視圖時已應用了兩個歸檔重作日誌。 

 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

相關文章
相關標籤/搜索