需要了解的Data Guard理論知識(二)

zhcunique發表於2021-03-12

一. 自動裂縫檢測和解決

      當Primary Database的某些日誌沒有成功傳送到Standby Database, 這時候發生餓了歸檔裂縫(Archive Gap)。

缺失的這些日誌就是裂縫(Gap)。 Data Guard能夠自動檢測,解決歸檔裂縫,不需要DBA的介入。這需要配置FAL_CLIENT, FAL_SERVER 這兩個引數(FAL: Fetch Archive Log)。

從FAL 這個名字可以看出,這個過程是Standby Database主動發起的“取”日誌的過程,Standby Database 就是FAL_CLIENT. 它是從FAL_SERVER中取這些Gap, 10g中,這個FAL_SERVER可以是Primary Database, 也可以是其他的Standby Database。

如:FAL_SERVER='PR1,ST1,ST2';

FAL_CLIENT和FAL_SERVER兩個引數都是Oracle Net Name。 FAL_CLIENT 透過網路向FAL_SERVER傳送請求,FAL_SERVER透過網路向FAL_CLIENT傳送缺失的日誌。 但是這兩個連線不一定是一個連線。 因此FAL_CLIENT向FAL_SERVER傳送請求時,會攜帶FAL_CLIENT引數值,用來告訴FAL_SERVER應該向哪裡傳送缺少的日誌。 這個引數值也是一個Oracle Net Name,這個Name是在FAL_SERVER上定義的,用來指向FAL_CLIENT.

 

當然,除了自動地日誌缺失解決,DBA 也可以手工解決。 具體操作步驟如下:

 

1) 檢視是否有日誌GAP:

    SQL> SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG;

 

  SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

   2) 如果有,則複製過來

3) 手工的註冊這些日誌:

SQL> ALTER DATABASE REGISTER LOGFILE '路徑';

二. 指定日誌傳送物件

1.VALID_FOR屬性指定傳輸及接收物件

LOG_ARCHIVE_DEST_n引數中的VALID_FOR屬性,用來指定傳輸的內容。從字面理解VALID_FOR就是基於那誰有效,該屬性有兩個引數值需要指定:REDO_LOG_TYPE和DATABASE_ROLE,我們基本上可以將其理解為:傳送指定角色生成的指定型別的日誌檔案,該引數的主要目的是為了確保,一旦發生角色切換操作後資料庫的正常運轉。

其中,REDO_LOG_TYPE和DATABASE_ROLE兩個引數可供選擇的引數值如下:

REDO_LOG_TYPE:可設定為ONLINE_LOGFILE、STANDBY_LOGFILE、ALL_LOGFILES。  

DATABASE_ROLE:可設定為PRIMARY_ROLE、STANDBY_ROLE、ALL_ROLES。

 

注意:VALID_FOR引數預設值是:VALID_FOR=(ALL_LOGFILES,ALL_ROLES)。

 

推薦手動設定該引數而不要使用預設值,在某些情況下預設的引數值不一定合適,如邏輯Standby在預設情況下就處於OPEN READ WRITE模式,不僅有REDO資料而且還包含多種日誌檔案(Online Redologs、Archived Redologs及Standby Redologs)。

預設情況下,邏輯Standby資料庫生成的歸檔檔案和接收到的歸檔檔案在相同的路徑下,這既不便於管理,也極有可能帶來一些隱患。建議對每個LOG_ARCHIVE_DEST_n引數設定合適的VALID_FOR屬性。本地生成的歸檔檔案和接收到的歸檔檔案最好分別儲存於不同路徑下。

 

2.透過DB_UNIQUE_NAME屬性指定資料庫

DB_UNIQUE_NAME屬性是10g版本新增加的一個關鍵字,在之前版本並沒有這一說法。該屬性的作用是指定唯一的Oracle資料庫名稱,也正因有了DB_UNIQUE_NAME,REDO資料在傳輸過程中才能確認傳輸到DBA希望被傳輸到的資料庫上。

當然要確保REDO資料被傳輸到指定伺服器,除了在LOG_ARCHIVE_DEST_n引數中指定正確DB_UNIQUE_NAME屬性之外,還有一個初始化引數LOG_ARCHIVE_CONFIG也需要進行正確的配置。該引數除了指定Data Guard環境中的唯一資料庫名外,還包括幾個屬性,用來控制REDO資料的傳輸和接收:

SEND:允許資料庫傳送資料到遠端。

RECEIVE:允許Standby接收來自其他資料庫的資料。

NOSEND,NORECEIVE:自然就是禁止嘍。

 

例如,設定Primary資料庫不接收任何歸檔資料,可以做如下的設定:

LOG_ARCHIVE_CONFIG='NORECEIVE,DG_CONFIG= (PRI,ST) '

如果做了如上的設定,如果該伺服器發生了角色切換,那它也沒有接收REDO資料的能力。

注: 整理自 張曉明《大話 Oracle RAC 》和  李丙洋 《塗抹 Oracle

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

相關文章