Oracle Data Guard Feature 12cR2系列(一)
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屬性來完成。
示例:
點選(此處)摺疊或開啟
-
LOG_ARCHIVE_DEST_2=’SERVICE=chicagoFS SYNC
-
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=1’
-
LOG_ARCHIVE_DEST_STATE_2=ENABLE
-
LOG_ARCHIVE_DEST_3=’SERVICE=chicagoFS1 SYNC
-
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=1’
-
LOG_ARCHIVE_DEST_STATE_3=ALTERNATE
-
LOG_ARCHIVE_DEST_4=’SERVICE=chicagoFS2 ASYNC
-
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=2’
- 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. 建立控制檔案。
點選(此處)摺疊或開啟
-
SQL> ALTER DATABASE CREATE FAR SYNC INSTANCE CONTROLFILE AS '/tmp/ctrlfsync01.ctl';
-
Database altered.
- SQL>
2. 從SPFILE建立PFILE,並修改相應的引數。
點選(此處)摺疊或開啟
-
SQL> CREATE PFILE='/tmp/initfsync.ora' FROM SPFILE;
-
File created.
- SQL>
主庫orcl部分引數:
點選(此處)摺疊或開啟
-
DB_UNIQUE_NAME=orcl
-
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,fsync,fsync2)'
-
LOG_ARCHIVE_DEST_2='SERVICE=fsync SYNC AFFIRM
-
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fsync GROUP=1 PRIORITY=1’
-
LOG_ARCHIVE_DEST_STATE_2=ENABLE
-
LOG_ARCHIVE_DEST_3='SERVICE=fsync2 SYNC AFFIRM
-
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fsync2 GROUP=1 PRIORITY=2’
- LOG_ARCHIVE_DEST_STATE_3=ALTERNATE
Far Sync例項fsync:
點選(此處)摺疊或開啟
-
DB_UNIQUE_NAME=fsync
-
CONTROL_FILES='/oradata/fsync/control01.ctl'
-
DB_FILE_NAME_CONVERT='+data','/oradata/fsync'
-
LOG_FILE_NAME_CONVERT='+data','/oradata/fsync'
-
FAL_SERVER=orcl
-
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,fsync,fsync2)'
-
LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch/fsync
- VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fsync'
點選(此處)摺疊或開啟
-
DB_UNIQUE_NAME=fsync2
-
CONTROL_FILES='/oradata/fsync2/control01.ctl'
-
DB_FILE_NAME_CONVERT='+data','/oradata/fsync2'
-
LOG_FILE_NAME_CONVERT='+data','/oradata/fsync2'
-
FAL_SERVER=orcl
-
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,fsync,fsync2)'
-
LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch/fsync2
- VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fsync2'
點選(此處)摺疊或開啟
-
SQL>CREATE SPFILE='/u01/app/oracle/products/12.2.0/db_1/dbs/spfilefsync.ora' FROM PFILE='/tmp/initfsync.ora' ;
-
File created.
- SQL>
4. 複製步驟1和步驟3生成的檔案到Far Sync例項fsync和fsync2。
5. 複製密碼檔案的Far Sync例項fsync和fsync2。
6. 在Far Sync例項上配置監聽。
點選(此處)摺疊或開啟
-
SID_LIST_LISTENER =
-
(SID_LIST =
-
(SID_DESC =
-
(GLOBAL_DBNAME = fsync)
-
(ORACLE_HOME =/u01/app/oracle/products/12.2.0/db_1)
-
(SID_NAME = fsync)
-
)
-
(SID_DESC =
-
(GLOBAL_DBNAME = fsync2)
-
(ORACLE_HOME =/u01/app/oracle/products/12.2.0/db_1)
-
(SID_NAME = fsync2)
-
)
- )
7. 主庫建立網路服務名到Far Sync例項fsync和fsync2。
主庫網路服務名:orcl;Far Sync:fsync,fsync2
點選(此處)摺疊或開啟
-
ORCL =
-
(DESCRIPTION =
-
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.70.124)(PORT = 1521))
-
(CONNECT_DATA =
-
(SERVER = DEDICATED)
-
(SERVICE_NAME = orcl)
-
)
-
)
-
fsync=
-
(DESCRIPTION =
-
(ADDRESS = (PROTOCOL = TCP)(HOST =10.10.70.120)(PORT = 1521))
-
(CONNECT_DATA =
-
(SERVER = DEDICATED)
-
(SERVICE_NAME = fsync)
-
)
-
)
-
fsync2=
-
(DESCRIPTION =
-
(ADDRESS = (PROTOCOL = TCP)(HOST =10.10.70.122)(PORT = 1521))
-
(CONNECT_DATA =
-
(SERVER = DEDICATED)
-
(SERVICE_NAME = fsync2)
-
)
- )
8. 啟動Far Sync例項fsync和fsync2到mount狀態。
點選(此處)摺疊或開啟
-
SQL> startup mount
-
ORACLE instance started.
-
Total System Global Area 536870912 bytes
-
Fixed Size 8622776 bytes
-
Variable Size 218107208 bytes
-
Database Buffers 301989888 bytes
-
Redo Buffers 8151040 bytes
-
Database mounted.
- SQL>
9. 建立Far Sync例項備用日誌檔案。
點選(此處)摺疊或開啟
-
SQL> alter database add standby logfile '/oradata/fsync/standby01.log' size 50M;
-
Database altered.
-
SQL> alter database add standby logfile '/oradata/fsync/standby02.log' size 50M;
-
Database altered.
-
SQL> alter database add standby logfile '/oradata/fsync/standby03.log' size 50M;
-
Database altered.
-
SQL> alter database add standby logfile '/oradata/fsync/standby04.log' size 50M;
- SQL>
10. 驗證Far Sync例項fsync和fsync2。
點選(此處)摺疊或開啟
-
SQL> SELECT * FROM V$DATAGUARD_CONFIG;
-
DB_UNIQUE_NAME PARENT_DBUN DEST_ROLE CURRENT_SCN CON_ID
-
------------- ------------ ----------------- ------------- -----
-
orcl NONE PRIMARY DATABASE 4306114 0
-
fsync orcl FAR SYNC INSTANCE 0 0
-
fsync2 UNKNOWN UNKNOWN 0 0
-
當前主庫將歸檔日誌傳輸到fsync中。
-
[oracle@node1 fsync]$ ls -l
-
-rw-r----- 1 oracle asmadmin 37376 Apr 12 23:21 2_27_964813855.dbf
-
-rw-r----- 1 oracle asmadmin 67072 Apr 12 23:23 2_28_964813855.dbf
-
-rw-r----- 1 oracle asmadmin 2409984 Apr 12 23:24 2_29_964813855.dbf
-
-rw-r----- 1 oracle asmadmin 56320 Apr 12 23:25 2_30_964813855.dbf
- -rw-r
11. 主庫開啟最大可用模式。
點選(此處)摺疊或開啟
-
SQL> ALTER DATABASE SET STANDBY TO MAXIMIZE AVAILABILITY;
-
Database altered.
-
Elapsed: 00:00:00.00
-
SQL> SELECT NAME,DATABASE_ROLE,PROTECTION_MODE FROM V$DATABASE;
-
NAME DATABASE_ROLE PROTECTION_MODE
-
----- -------------- -------------------------
- ORCL PRIMARY MAXIMUM AVAILABILITY
12. 模擬Far Sync例項fsync故障,驗證Far Sync例項高可用。
點選(此處)摺疊或開啟
-
將Far Sync例項fsync關閉
-
SQL> shut abort
-
ORACLE instance shut down.
-
檢視主庫當前日誌傳輸:
-
SQL> SELECT * FROM V$DATAGUARD_CONFIG;
-
DB_UNIQUE_ PARENT_D DEST_ROLE CURRENT_SCN CON_ID
-
---------- -------- ----------------- ----------- ----------
-
orcl NONE PRIMARY DATABASE 5089347 0
-
fsync2 orcl FAR SYNC INSTANCE 0 0
-
fsync UNKNOWN UNKNOWN 0 0
-
-
SQL> select dest_id,status,error from v$archive_dest;
-
DEST_ID STATUS ERROR
-
---------- -------- -------------------------------------------
-
1 VALID
-
2 ALTERNATE
-
3 VALID
- 主庫將日誌傳輸自動切換到fsync2上。
| 作者簡介
楊波,沃趣科技資料庫技術專家
主要參與公司產品實施、測試、維護以及最佳化。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2155109/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Data Guard Feature 12cR2系列(二)Oracle
- oracle data guard!!Oracle
- [Data Guard]Oracle10g Data Guard學習筆記(一)Oracle筆記
- ORACLE DATA GUARD -一般概念Oracle
- 介紹ORACLE DATA GUARD——DATA GUARD概念和管理Oracle
- Data Guard Broker系列之二:Data Guard Broker配置實戰
- Oracle Data Guard配置Oracle
- Oracle 12c Data Guard搭建(一)Oracle
- 【ASK_ORACLE】Oracle Data Guard(一)DG架構Oracle架構
- Oracle Data Guard Broker元件Oracle元件
- Oracle Data Guard簡介Oracle
- Oracle Data Guard 介紹Oracle
- ORACLE Data Guard--IOracle
- Oracle Database Change Data Capture featureOracleDatabaseAPT
- Oracle 11g Data Guard Enabling Active Data GuardOracle
- [Data Guard]Oracle10g Data Guard學習筆記(二)Oracle筆記
- [Data Guard]Oracle10g Data Guard學習筆記(三)Oracle筆記
- 1 關於 Oracle Data GuardOracle
- 2 Oracle Data Guard 安裝Oracle
- 1 Oracle Data Guard Broker 概念Oracle
- Oracle Data Guard和Broker概述Oracle
- Oracle 11g Data GuardOracle
- Oracle11g Data GuardOracle
- Oracle Data Guard Failover(activate)OracleAI
- Active Data Guard初探(一)
- DATA GUARD架構(一)架構
- 4.1.6 Oracle Restart 與 Oracle Data Guard 整合OracleREST
- oracle 12cR2 new feature dbca 命令可以建立standby 庫Oracle
- 8 Oracle Data Guard Broker 屬性Oracle
- 9 Oracle Data Guard 故障診斷Oracle
- 【DG】Oracle Data Guard官方直譯Oracle
- Oracle11g Data Guard[zt]Oracle
- Oracle RAC + Data Guard 環境搭建Oracle
- Oracle Data Guard 理論知識Oracle
- 技術白皮書:Oracle Data Guard 11gOracle Data Guard 理論知識OracleGo
- DATA GUARD部署模式——DATA GUARD概念和管理模式
- 使用Data Guard Broker進行Data Guard物理備用庫配置(Oracle 19c)Oracle
- 2 開始實用 Oracle Data GuardOracle