Oracle11g Data Guard配置手冊

315959312發表於2014-03-26
主庫:192.168.20.28    paidb
備庫:192.168.20.27    paidb
作業系統:linux
oracle版本:11.2.0.4

Oracle11g Data Guard配置手冊

概述

Oracle Data Guard 是針對企業資料庫的最有效和最全面的資料可用性、資料保護和災難恢復解決方案。它提供管理、監視和自動化軟體基礎架構來建立和維護一個或多個同步備用資料庫,從而保護資料不受故障、災難、錯誤和損壞的影響。一臺主資料庫最多可以配備9個備資料庫。


原理


             





環境要求

1) 主資料庫伺服器和備資料庫伺服器的作業系統版本必須一致。

2) 主資料庫伺服器和備資料庫伺服器的資料庫版本必須一致。

3) 主資料庫伺服器和備資料庫伺服器的安裝目錄必須一致。

配置步驟

資料庫安裝完後,主庫和備庫都配置為MTS方式,建立PI使用者前進行配置。配置完成後在主庫建立PI使用者,備庫會自動建立PI使用者。

以下步驟主庫和備庫的操作完全相同:

將資料庫配置為歸檔模式。

sqlplus / as sysdba

shutdown immediate;

startup mount;

alter database archivelog;

alter system set control_file_record_keep_time=30 scope=both;

alter system set log_archive_dest_1='location=/home/oracle/archivelog' scope=both;

:/home/oracle/archivelog為歸檔重做日誌存放目錄

alter database open;

alter system archive log start;

exit;

啟用資料庫閃回功能

檢視閃回目錄

show parameter db_recovery_file_dest

檢視閃回目錄可用大小

show parameter db_recovery_file_dest_size

修改閃回目錄位置:

alter system set db_recovery_file_dest='newpath';

修改閃回目錄大小

alter system set db_recovery_file_dest_size=400G;

檢視閃回功能是否啟用,預設不啟用

select flashback_on from v$database;

啟用閃回功能:

alter database flashback on;

 

判斷Data Guard是否安裝

select * from v$option where parameter = 'Oracle Data Guard';

如果是true表示已經安裝可以配置,否則需要安裝相應元件

設定資料庫為強制記錄日誌

alter database force logging;

檢查狀態:select name,force_logging from v$database;

設定自動管理備庫檔案

alter system set standy_file_management='AUTO';

 

新增日誌檔案組

建立standby如要注意以下幾點:
   <1>standby log files的大小和redo log files一樣。

      查詢redo log files檔案大小(預設50M,3個):select group#,bytes/1024/1024 as M from v$log
   <2>一般而言, standbyredo 日誌檔案組數要比 primary 資料庫的 online redo 日誌檔案組數至少多一個。

      有一個推薦的公式可以做參考:(每執行緒的日誌組數+1)*最大執行緒數
      假設現在節點是1個,則=(3+1)*1=4
      如果是雙節點       =(3+1)*2=8
      這裡我們建立4standby logfile:
      另:不建議組號group#緊挨著redo,因為後續redo有可能調整,這裡我們從建立從1114standby logfile

alter database add standby logfile group  11 '/opt/oracle/oradata/orcl/dg/standby11.log' size 50M;

alter database add standby logfile group  12 '/opt/oracle/oradata/orcl/dg/standby12.log' size 50M;

alter database add standby logfile group  13 '/opt/oracle/oradata/orcl/dg/standby13.log' size 50M;

alter database add standby logfile group  14 '/opt/oracle/oradata/orcl/dg/standby14.log' size 50M;

注:/opt/oracle/oradata/orcl/dg/standby14.log 可以自定義檔名,但是目錄必須存在,檔名必須不存在

 

=========================

以上配置主庫備庫一致

配置db_unique_name

檢視db_unique_name

show parameter db_unique_name

主庫:alter system set db_unique_name=paidb scope=spfile;

備庫:alter system set db_unique_name=paidb27 scope=spfile;

配置主庫的fal_server

alter system set FAL_SERVER='paidb27';

alter system set log_archive_config = 'dg_config=(paidb,paidb27)';

配置備庫的fal_server

alter system set FAL_SERVER='paidb';

alter system set log_archive_config = 'dg_config=(paidb,paidb27)';

配置主庫,把重做日誌寫到備庫

alter system set log_archive_dest_2='service=paidb27 lgwr sync affirm  valid_for=(online_logfile,primary_role) db_unique_name=paidb27’;

注:paidb27為備庫的db_unique_name

配置備庫,當備庫轉換為主庫的時候把重做日誌寫到新備庫

alter system set log_archive_dest_2='service=paidb lgwr sync affirm  valid_for=(online_logfile,primary_role) db_unique_name=paidb’;

注:paidb為備庫的db_unique_name

 

複製密碼檔案

將主庫的密碼檔案複製到備庫

關閉主庫和備庫:shutdown immediate

scp $OARCLE_HOME/dbs/orapwpaidb   備庫:$ORACLE_HOME/dbs/

在主庫上建立standby控制檔案

關閉主庫和備庫shutdown immediate;

主庫執行:

startup mount;

alter database create standby controlfile as ‘/home/oracle/standby_control01.ctl’;

shutdown immediate;

standby控制檔案複製到備庫

關閉備庫shutdown immediate;

scp /home/oracle/standby_control01.ctl  備庫:$ORACLE_HOME/../../../oradata/paidb/

scp /home/oracle/standby_control01.ctl  備庫:$ORACLE_HOME/../../../fast_recovery_area/paidb/

配置主庫的listener.ora

vi $ORACLE_HOME/network/admin/listener.ora

 

SID_LIST_LISTENER=

        (SID_LIST =

        (SID_DESC =

                (GLOBAL_DBNAME = paidb)

                (ORACLE_HOME = /data1/oracle/app/oracle/product/11.2.0/dbhome_1)

                (SID_NAME = paidb)

        )

        )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.28)(PORT = 1521))

    )

  )

 

SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF

配置主庫的tnsnames.ora

PAIDB =

  (DESCRIPTION =

    (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.28)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = paidb)

      (SID = paidb)

    )

  )

 

PAIDB27 =

  (DESCRIPTION =

    (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.27)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = paidb27)

      (SID = paidb)

    )

  )

配置備庫的listener.ora

SID_LIST_LISTENER=

        (SID_LIST =

        (SID_DESC =

                (GLOBAL_DBNAME = paidb27)

                (ORACLE_HOME = /data1/oracle/app/oracle/product/11.2.0.4/dbhome_1)

                (SID_NAME = paidb)

        )

        )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.27)(PORT = 1521))

    )

  )

配置備庫的tnsnames.ora

PAIDB27 =

  (DESCRIPTION =

    (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.27)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = paidb27)

      (SID = paidb)

    )

  )

 

PAIDB =

  (DESCRIPTION =

    (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.28)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = paidb)

      (SID = paidb)

    )

  )

重啟監聽

先重啟備庫:

lsnrctl stop

lsnrctl start

後重啟主庫:

lsnrctl stop

lsnrctl start

拷貝主庫的檔案到備庫

主庫和備庫都關閉:

shutdown immediate;

scp $ORACLE_HOME/../../../oradata/paidb/* 備庫:$ORACLE_HOME/../../../oradata/paidb/

 



啟動備庫:

startup nomount;

alter database mount standby database;

啟動實時應用:

 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

//暫停redo應用:

//ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

啟動主庫:

startup

備用伺服器的管理模式與只讀模式

啟動到管理模式

shutdown immediate;

startup nomount;

alter database mount standby database;

alter database recover managed standby database disconnect from session;

啟動到只讀方式 

SQL>shutdown immediate;

 SQL>startup nomount;

 SQL>alter database mount standby database;

 SQL>alter database open read only;

在管理恢復模式下到只讀模式

SQL> recover managed standby database cancel;

         SQL> alter database open read only;

從只讀方式到管理恢復方式

SQL> recover managed standby database disconnect from session;

監控standby配置是否成功

確認主備庫裡的歸檔目的地配置都是有效的
        select DEST_ID, STATUS, DESTINATION, ERROR from V$ARCHIVE_DEST where DEST_ID<=2;
        目的地狀態status應該顯示為 VALID,注意如果上面沒有執行redo應用會有一條error資訊 確認重做日誌是否真的被應用了,在主庫執行

select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG where name = 'JED2' order by FIRST_TIME;
        如果歸檔和日誌應用均正常,APPLIED 和 ARCHIVED 列都應該是 YES。(如果沒有應用redo,applied應該是NO)

主庫上檢查是否有重做日誌缺口
        如果你發現日誌沒有被應用,那可能是重做日誌有了缺口,這種情況下備庫無法進行日誌應用。但如果你的 FAL_SERVER 引數設定正確,這應該不會有問題
        select STATUS, GAP_STATUS from V$ARCHIVE_DEST_STATUS where DEST_ID = 2;
        如果一切正常,應該返回 VALID 和 NO GAP .切記啟用redo應用才能顯示No GAP 在主備庫上執行以下查詢檢視資料庫狀態
         select * from V$DATAGUARD_STATUS order by TIMESTAMP; 檢查是否成功:

        主庫上檢視日誌傳送情況:
        sql>select dest_name,status,error from v$archive_dest;
        應該log_archive_dest_1和2狀態應該是valid
        切換幾次日誌:
        sql>alter system switch logfile;
         檢視日誌序號:
        sql>select sequence# from v$archived_log;
         備庫驗證:
        sql>select sequence#,applied from v$archived_log;

DataGuard啟動關閉順序

監聽

  先啟備庫再起主庫

   #lsnrctl start

啟動

     先啟備庫:

   sql>startup nomount
   sql>alter database mount standby database;
   sql>alter database recover managed standby database using current logfile disconnect from session;
   在啟主庫
   sql>startup

關閉

     先關主庫:
    sql>shutdown immediate
    再關從庫:

    sql>alter database recover managed standby database cancel;

    sql>shutdown immediate;

保護模式和身份

最大保護:這種模式能夠確保絕無資料丟失。要實現這一步當然是有代價的,它要求所有的

                     事務在提交前其 redo 不僅被寫入到本地的 online redo log,還要同時提交到

 standby 資料庫的 standbyredo log,並確認 redo 資料至少在一個 standby 資料

庫可用(如果有多個的話),然後才會在 primary 資料庫上提交。如果出現了什麼

故障導致 standby 資料庫不可用的話,primary 資料庫會被 shutdown
最高效能:這種模式提供在不影響 primary 資料庫效能前提下最高階別的資料保護策略。

事務可以隨時提交,當前 primary 資料庫的 redo 資料也需要至少寫入一個

standby 資料庫,不過這種寫入可以是不同步的。如果網路條件理想的話, 這

種模式能夠提供類似最高可用性的資料保護而僅對 primary 資料庫有輕微的性

能影響。  

最高可用性:這種模式提供在不影響 primary 資料庫可用前提下最高階別的資料保護策略。

其實現方式與最大保護模式類似,也是要求所有事務在提交前必須保障 redo

資料至少在一個 standby 資料庫可用,不過與之不同的是,如果出現故障導

入無法同時寫入 standby 資料庫 redo logprimary 資料庫並不會 shutdown

而是自動轉為最高效能 模式,等 standby 資料庫恢復正常之後,它又會再自

動轉換成最高可用性模式。

檢視保護模式:

select protection_mode,protection_level from v$database; 

--預設是最大效能模式(maximum performance)

檢視身份:

                            select database_role from v$database; --主庫是primary備庫是physical standby

切換保護模式:

                            alter database set standby database to maximize protection;    --最大保護
                            alter database set standby database to maximize availability;  --最高可用性

                            alter database set standby database to maximize performance;   --最高效能

期間碰到一個問題,好幾天才解決,分享一下
主備庫都可以在最高效能下執行,一旦升級到最高可用模式,
主庫log_archive_dest_2的status就變為error,錯誤資訊:ORA-16086: Redo data cannot be written to the standby redo log
解決辦法:
刪除主庫和備庫的 standby logfile group
然後到作業系統下rm standby的物理檔案,
然後重新新增 standby logfile group
問題解決

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12478376/viewspace-1130026/,如需轉載,請註明出處,否則將追究法律責任。

相關文章