Oracle Data Guard Feature 12cR2系列(一)

沃趣科技發表於2018-05-25

   Data Guard是Oracle推出的一種高可用性資料庫方案,從Oracle 9i開始正式更名為Oracle Data Guard。 
  Data Guard在11g中引入Active Data Guard,12c又賦予了新的功能,如: Far Sync Instance等。
  本文將分為系列文章,介紹12cR2中Data Guard與我們最為息息相關的新特性。


| Far Sync Instance

Far Sync Instance,實際上是一個級聯備庫,該特性似乎為兩地三中心設計提供的解決方案。使用該特性可以解決遠距離傳輸的延遲時間,同時也增加了主備容災的距離,可進一步實現資料零丟失的同時,又可以減少主庫的壓力。以下是官方提供的示意圖:



從上述圖中可以看出,實際上Far Sync例項資料庫是一個級聯備用資料庫,它充當終端資料庫的日誌儲存庫,可以理解為日誌中轉站。這個例項非常特殊,僅僅只有引數檔案,控制檔案和密碼檔案,以及備用日誌檔案。它不包含任何資料檔案,因此無法開啟,無法執行日誌應用,也無法轉換為任何型別的備庫。並且只有日誌傳輸服務在遠端同步備用資料庫上處於活動狀態。

遠端同步例項的優勢在於:它可以是主資料庫的本地Archive Log儲存庫,以最高可用性模式執行,其中物理或邏輯備用資料庫可以位於遠端站點上。由於它和主庫距離較近,同主庫端採取同步傳輸,網路延時很小,而用非同步將日誌分發到終端備庫,因此對主庫效能影響很小。

當發生角色轉換,例如:switchover/failover時,對Far Sync例項是透明的,即角色轉換和12c之前的版本是相同的。

考慮到整個架構的高可用性,Far Sync例項也可以配置多個,以防止Far Sync例項造成地單點故障。如上圖,配置兩個Far Sync例項以防止引起單點故障。同時在配置多個Far Sync例項時,可以使用Enhanced Alternate Destination的新特性。對FS1,FS2配置Alternate Destinations,並將FS1設定高優先順序,FS2設定為相對較低的優先順序,當FS1出現故障時,主庫會自動將歸檔日誌傳輸到FS2。而在切換過程中對下級的任意備庫,都是完全透明的,實現了Far Sync例項的高可用性。


|  Enhancing Support for Alternate Destinations

在Oracle 9.2中日誌傳輸備用目標的概念被引入,當初始目標不再可用時,作為單一故障切換的備用目標。在Oracle Database 12cR1(12.1)中,增強了這一功能可以使用一個首選目標,第二個作為備用目標,並且在初始目標再次可用時具有自動重新配置和簡單故障恢復功能。但是不支援新的Oracle Active Data Guard遠端同步例項和實時級聯功能。

該功能提供了更大的靈活性來定義優先順序的規則,並提供了許多用於定義失敗狀態策略的選項。無論使用何種配置,目的是都為了滿足各種資料保護和高可用性目標。

從12.2.0.1開始透過設定LOG_ARCHIVE_DEST_n引數中的GROUP和PRIORITY屬性來完成。

示例:

點選(此處)摺疊或開啟

  1. LOG_ARCHIVE_DEST_2=’SERVICE=chicagoFS SYNC
  2. VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=1’
  3. LOG_ARCHIVE_DEST_STATE_2=ENABLE
  4. LOG_ARCHIVE_DEST_3=’SERVICE=chicagoFS1 SYNC
  5. VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=1’
  6. LOG_ARCHIVE_DEST_STATE_3=ALTERNATE
  7. LOG_ARCHIVE_DEST_4=’SERVICE=chicagoFS2 ASYNC
  8. VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=2’
  9. LOG_ARCHIVE_DEST_STATE_4=ALTERNATE

以上配置會產生以下結果:

1. 日誌將優先傳輸到遠端同步例項chicagoFS;

2. 如果chicagoFS不可用時,將使用chicagoFS1;

3. 如果chicagoFS恢復後,由於優先順序相同chicagoFS將成為備用目標;

4. 如果chicagoFS和chicagoFS1都不可用時,將使用chicagoFS2(此示例中將會非同步傳輸到chicagoFS2);

5. 如果chicagoFS和chicagoFS1恢復後,主庫日誌傳輸會恢復到可用的首選目標

| Automatically Synchronize Password Files in Oracle Data Guard Configurations

在12cR2中,當主庫密碼檔案(包含SYS,SYSDG等)發生修改後,會自動同步到Oracle Data Guard配置。這個功能很夠溫暖了吧。

此功能提供瞭解決了該版本前,當主庫密碼檔案發生改變後,需要手動同步到備庫,才能將日誌繼續同步到備庫,進一步簡化了Oracle Data Guard配置的管理和維護成本。這個特性使所有的DBA都為之興奮,從此再也不會為了因為主庫密碼發生改變沒有同時更新到備庫,導致主備庫無法同步,甚至可能面臨重新搭建備庫。我想大家對上一次處理過因主庫SYS密碼改變導致重新搭建備庫的經歷還記憶猶新吧。

注:1.當有Far Sync例項時,仍需手動將修改後的密碼檔案同步到遠端同步例項,一旦遠端同步例項更新後,會自動同步到所有的物理備庫。

 2. 當然也可以在Oracle 11g的版本設定redo_transport_user引數來實現同樣的功能。

在瞭解了上述3個特性外,接下來我們們部署一套高可用的容災環境:一主一備二個Far Sync例項,要求Far Sync例項實現高可用性。建立和配置Far Sync例項非常輕鬆,過程如此簡單,和傳統搭建備庫完全一樣。因此我將介紹配置Far Sync例項的所有步驟:

1. 建立控制檔案。

點選(此處)摺疊或開啟

  1. SQL> ALTER DATABASE CREATE FAR SYNC INSTANCE CONTROLFILE AS '/tmp/ctrlfsync01.ctl';
  2. Database altered.
  3. SQL>

  2. 從SPFILE建立PFILE,並修改相應的引數。

點選(此處)摺疊或開啟

  1. SQL> CREATE PFILE='/tmp/initfsync.ora' FROM SPFILE;
  2. File created.
  3. SQL>

   主庫orcl部分引數:

點選(此處)摺疊或開啟

  1. DB_UNIQUE_NAME=orcl
  2. LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,fsync,fsync2)'
  3. LOG_ARCHIVE_DEST_2='SERVICE=fsync SYNC AFFIRM
  4. VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fsync GROUP=1 PRIORITY=1’
  5. LOG_ARCHIVE_DEST_STATE_2=ENABLE
  6. LOG_ARCHIVE_DEST_3='SERVICE=fsync2 SYNC AFFIRM
  7. VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fsync2 GROUP=1 PRIORITY=2’
  8. LOG_ARCHIVE_DEST_STATE_3=ALTERNATE

   Far Sync例項fsync:

點選(此處)摺疊或開啟

  1. DB_UNIQUE_NAME=fsync
  2. CONTROL_FILES='/oradata/fsync/control01.ctl'
  3. DB_FILE_NAME_CONVERT='+data','/oradata/fsync'
  4. LOG_FILE_NAME_CONVERT='+data','/oradata/fsync'
  5. FAL_SERVER=orcl
  6. LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,fsync,fsync2)'
  7. LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch/fsync
  8. VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fsync'
   Far Sync例項fsync2:

點選(此處)摺疊或開啟

  1. DB_UNIQUE_NAME=fsync2
  2. CONTROL_FILES='/oradata/fsync2/control01.ctl'
  3. DB_FILE_NAME_CONVERT='+data','/oradata/fsync2'
  4. LOG_FILE_NAME_CONVERT='+data','/oradata/fsync2'
  5. FAL_SERVER=orcl
  6. LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,fsync,fsync2)'
  7. LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch/fsync2
  8. VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fsync2'
   3. 生成SPFILE。

點選(此處)摺疊或開啟

  1. SQL>CREATE SPFILE='/u01/app/oracle/products/12.2.0/db_1/dbs/spfilefsync.ora' FROM PFILE='/tmp/initfsync.ora' ;
  2. File created.
  3. SQL>

4. 複製步驟1和步驟3生成的檔案到Far Sync例項fsync和fsync2。

5. 複製密碼檔案的Far Sync例項fsync和fsync2。

6. 在Far Sync例項上配置監聽。

點選(此處)摺疊或開啟

  1. SID_LIST_LISTENER =
  2. (SID_LIST =
  3. (SID_DESC =
  4.   (GLOBAL_DBNAME = fsync)
  5.   (ORACLE_HOME =/u01/app/oracle/products/12.2.0/db_1)
  6.   (SID_NAME = fsync)
  7. )
  8. (SID_DESC =
  9.   (GLOBAL_DBNAME = fsync2)
  10.   (ORACLE_HOME =/u01/app/oracle/products/12.2.0/db_1)
  11.   (SID_NAME = fsync2)
  12. )
  13. )

7. 主庫建立網路服務名到Far Sync例項fsync和fsync2。

主庫網路服務名:orcl;Far Sync:fsync,fsync2


點選(此處)摺疊或開啟

  1. ORCL =
  2. (DESCRIPTION =
  3. (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.70.124)(PORT = 1521))
  4. (CONNECT_DATA =
  5.   (SERVER = DEDICATED)
  6.   (SERVICE_NAME = orcl)
  7. )
  8. )
  9. fsync=
  10. (DESCRIPTION =
  11. (ADDRESS = (PROTOCOL = TCP)(HOST =10.10.70.120)(PORT = 1521))
  12. (CONNECT_DATA =
  13.   (SERVER = DEDICATED)
  14.   (SERVICE_NAME = fsync)
  15. )
  16. )
  17. fsync2=
  18. (DESCRIPTION =
  19. (ADDRESS = (PROTOCOL = TCP)(HOST =10.10.70.122)(PORT = 1521))
  20. (CONNECT_DATA =
  21.   (SERVER = DEDICATED)
  22.   (SERVICE_NAME = fsync2)
  23. )
  24. )

    8. 啟動Far Sync例項fsync和fsync2到mount狀態。

點選(此處)摺疊或開啟

  1. SQL> startup mount
  2. ORACLE instance started.
  3. Total System Global Area 536870912 bytes
  4. Fixed Size 8622776 bytes
  5. Variable Size 218107208 bytes
  6. Database Buffers 301989888 bytes
  7. Redo Buffers 8151040 bytes
  8. Database mounted.
  9. SQL>

    9. 建立Far Sync例項備用日誌檔案。

點選(此處)摺疊或開啟

  1. SQL> alter database add standby logfile '/oradata/fsync/standby01.log' size 50M;
  2. Database altered.
  3. SQL> alter database add standby logfile '/oradata/fsync/standby02.log' size 50M;
  4. Database altered.
  5. SQL> alter database add standby logfile '/oradata/fsync/standby03.log' size 50M;
  6. Database altered.
  7. SQL> alter database add standby logfile '/oradata/fsync/standby04.log' size 50M;
  8. SQL>

  10. 驗證Far Sync例項fsync和fsync2。

點選(此處)摺疊或開啟

  1. SQL> SELECT * FROM V$DATAGUARD_CONFIG;
  2. DB_UNIQUE_NAME PARENT_DBUN DEST_ROLE CURRENT_SCN CON_ID
  3. ------------- ------------ ----------------- ------------- -----
  4. orcl NONE PRIMARY DATABASE 4306114 0
  5. fsync orcl FAR SYNC INSTANCE 0 0
  6. fsync2 UNKNOWN UNKNOWN 0 0
  7. 當前主庫將歸檔日誌傳輸到fsync中。
  8. [oracle@node1 fsync]$ ls -l
  9. -rw-r----- 1 oracle asmadmin 37376 Apr 12 23:21 2_27_964813855.dbf
  10. -rw-r----- 1 oracle asmadmin 67072 Apr 12 23:23 2_28_964813855.dbf
  11. -rw-r----- 1 oracle asmadmin 2409984 Apr 12 23:24 2_29_964813855.dbf
  12. -rw-r----- 1 oracle asmadmin 56320 Apr 12 23:25 2_30_964813855.dbf
  13. -rw-r

    11. 主庫開啟最大可用模式。

點選(此處)摺疊或開啟

  1. SQL> ALTER DATABASE SET STANDBY TO MAXIMIZE AVAILABILITY;
  2. Database altered.
  3. Elapsed: 00:00:00.00
  4. SQL> SELECT NAME,DATABASE_ROLE,PROTECTION_MODE FROM V$DATABASE;
  5. NAME DATABASE_ROLE PROTECTION_MODE
  6. ----- -------------- -------------------------
  7. ORCL PRIMARY MAXIMUM AVAILABILITY

    12. 模擬Far Sync例項fsync故障,驗證Far Sync例項高可用。

點選(此處)摺疊或開啟

  1. 將Far Sync例項fsync關閉
  2. SQL> shut abort
  3. ORACLE instance shut down.
  4. 檢視主庫當前日誌傳輸:
  5. SQL> SELECT * FROM V$DATAGUARD_CONFIG;
  6. DB_UNIQUE_ PARENT_D DEST_ROLE CURRENT_SCN CON_ID
  7. ---------- -------- ----------------- ----------- ----------
  8. orcl NONE PRIMARY DATABASE 5089347 0
  9. fsync2 orcl FAR SYNC INSTANCE 0 0
  10. fsync UNKNOWN UNKNOWN 0 0

  11. SQL> select dest_id,status,error from v$archive_dest;
  12. DEST_ID STATUS ERROR
  13. ---------- -------- -------------------------------------------
  14.  1 VALID
  15.  2 ALTERNATE
  16.  3 VALID
  17. 主庫將日誌傳輸自動切換到fsync2上。
    至此整個高可用的Far Sync例項搭建完成。


| 作者簡介

楊波,沃趣科技資料庫技術專家
主要參與公司產品實施、測試、維護以及最佳化。

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

相關文章