ctrl_file_recov_path-資料庫控制檔回復路徑配置參數

此參數指定重要資料庫控制檔副本所在的檔案系統路徑。

附註: 此參數僅適用於 11.5.7 版 或更新版本。
配置類型
資料庫
參數類型
可配置
預設值 [範圍]
空值 [任何有效路徑或裝置]

術語

資料庫路徑
保留資料庫參考資訊檔案及資料夾的階層式目錄。 如需相關資訊,請參閱 資料庫目錄及檔案
主要控制檔
Db2® 資料庫引擎會將內部狀態及控制資訊儲存在資料庫路徑內的檔案中。 您可以在 資料庫目錄和檔案中找到這些檔案的說明。 資料庫作業需要這些檔案中的資訊。 這些內部檔案通常稱為「控制檔」,並由 Db2 資料庫引擎完全管理,不需要使用者或管理。
回復路徑
ctrl_file_recov_path 資料庫配置參數指定的目錄。
回復資料庫路徑
在回復路徑內建立的資料庫特定階層式目錄,其中會維護主要控制檔 (稱為回復控制檔) 的副本。 請參閱 用法 ,以取得階層式目錄結構。
回復控制檔 (或回復控制檔副本)
ctrl_file_recov_path 資料庫配置參數所指定路徑中基於備援目的而維護的主要控制檔副本。
FODC_RecovPath
第一次出現的資料擷取 (FODC) 套件,當回復資料庫目錄的備份可用於未來參照或問題判斷時,或在回復資料庫路徑中偵測到問題或不一致期間,建立此套件以供參考。

說明

如果主要控制檔在資料庫路徑內意外刪除、毀損或無法再存取,則資料庫將不再正常運作,且可能需要還原資料庫。

透過指定 ctrl_file_recov_path,主要控制檔的副本也會放在指定的路徑中,並在執行時期維護。 主要控制檔的任何執行時期變更也會套用至回復控制檔。 如果控制檔已刪除、毀損或無法再存取,則「 IBM® 支援中心」可以提供指引,以使用回復控制檔副本從狀況中回復。

限制

  • 此特性目前在 Db2 pureScale ® 環境中不受支援。

使用情形

因為指定控制檔回復路徑的目標是在資料庫路徑內的主要控制檔已刪除、毀損或無法再存取時提供備援,所以指定的 ctrl_file_recov_path 不能與資料庫路徑重疊 (如需詳細資料,請參閱 db_path)。 若要新增備援,建議指定控制檔回復路徑,其位於與資料庫路徑不同的檔案系統上。

在「資料庫分割特性 (DPF)」環境中,指定的 ctrl_file_recov_path 必須可供每一個資料庫分割區存取。 容許分割區具有僅存在於現行分割區上的特定回復路徑。

指定的 ctrl_file_recov_path 將以下列方式自動附加實例起始目錄、實例名稱子目錄、分割區廣域目錄及成員特定目錄:
<PATH>/<instance_home_dir>/<instance_owner>/NODExxxx/SQLyyyyy/MEMBERzzzz/
例如:
<PATH>/home/db2inst1/db2inst1/NODE0000/SQL00001/MEMBER0000/

當第一次設定 ctrl_file_recov_path 時,或修改現有的路徑時,在下次啟動資料庫期間,會進行新指定路徑的驗證及配置,且主要控制檔會從資料庫路徑複製到回復資料庫路徑。 主要控制檔的所有後續更新也會在回復控制檔副本中進行。

ctrl_file_recov_path 路徑重設為 NULL 時,在下一次資料庫啟動期間,會刪除先前指定的回復資料庫路徑內的資料庫特定子資料夾及回復控制檔副本。 在先前指定的回復路徑內,屬於其他資料庫或資料庫分割區的子資料夾及檔案不受影響。

如果指定的 ctrl_file_recov_path 是符號鏈結,則符號鏈結會儲存至 ctrl_file_recov_path

範例

啟用回復控制檔路徑
當配置 ctrl_file_recov_path 資料庫配置值時,資料庫啟動會列印參考資訊 db2diag.log 項目,指出 「控制檔回復啟動處理已完成。」 "Effective control file recovery path:<path>" 指出已順利起始設定的路徑。 例如:
$ db2 UPDATE DB CFG FOR dbname1 USING CTRL_FILE_RECOV_PATH /some_filesystem/recov_path_dbname1
     DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
     SQL1363W  One or more of the parameters submitted for immediate modification were not changed dynamically. For these configuration parameters, the database must be shutdown and reactivated before the configuration parameter changes become effective.

$ db2 deactivate db dbname1
     DB20000I  The DEACTIVATE DATABASE command completed successfully.

$ db2 activate db dbname1
     DB20000I  The ACTIVATE DATABASE command completed successfully.

$ less db2diag.log
     2021-09-27-16.35.45.721088-420 E609341E618           LEVEL: Info
     PID     : 26473                TID : 140325389592320 PROC : db2sysc
     INSTANCE: db2inst1             NODE : 000            DB   : DBNAME1
     APPHDL  : 0-217                APPID: *LOCAL.db2inst1.210927233802
     AUTHID  : DB2INST1             HOSTNAME: hostname1
     EDUID   : 38                   EDUNAME: db2agent (DBNAME1)
     FUNCTION: DB2 UDB, base sys utilities, sqleInitCtrlFileRecovPath, probe:1423
     DATA #1 : <preformatted>
     Control file recovery startup processing has completed. 
       Effective control file recovery path: /some_filesystem/recov_path_dbname1
停用回復控制檔路徑
當透過將值設為 NULL 來停用 ctrl_file_recov_path 時,資料庫啟動會列印參考資訊 db2diag.log 項目,指出 「控制檔回復啟動處理已完成」,且 「控制檔回復路徑未啟用」。 例如:
$ db2 UPDATE DB CFG FOR dbname1USING CTRL_FILE_RECOV_PATH NULL
     DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
     SQL1363W  One or more of the parameters submitted for immediate modification were not changed dynamically. For these configuration parameters, the database must be shutdown and reactivated before the configuration parameter changes become effective.

$ db2 deactivate db dbname1
     DB20000I  The DEACTIVATE DATABASE command completed successfully.

$ db2 activate db dbname1
     DB20000I  The ACTIVATE DATABASE command completed successfully.

$ less db2diag.log
     2021-09-27-16.35.45.721088-420 E609341E618           LEVEL: Info
     PID: 26473                     TID : 140325389592320 PROC : db2sysc
     INSTANCE: db2inst1             NODE : 000            DB   : DBNAME1
     APPHDL  : 0-217                APPID: *LOCAL.db2inst1.210927233802
     AUTHID  : DB2INST1             HOSTNAME: hostname1
     EDUID: 38                      EDUNAME: db2agent (DBNAME1)
     FUNCTION: DB2 UDB, base sys utilities, sqleInitCtrlFileRecovPath, probe:1443
     DATA #1 : <preformatted>
     Control file recovery startup processing has completed.
       Control file recovery path not enabled.

疑難排解

附註: db2diag.log 及具有函數記號 "CtrlFileRecov" 的管理通知 (.nfy) 日誌項目與 ctrl_file_recov_path 條件相關聯。
遺漏或無法存取主要控制檔,導致資料庫啟動或停用失敗
如果資料庫路徑中有一或多個主要控制檔遺漏或無法再存取 (即使回復控制檔是可存取的) ,則資料庫啟動可能會因 SQL1036C 錯誤而失敗,且 db2diag.log 項目會指出開啟控制檔時發生錯誤。 例如:
$ db2 activate db db1157
     SQL1036C  An I/O error occurred while accessing the database.  SQLSTATE=58030

$ less db2diag.log
     2021-09-28-23.13.13.573497-240 E2319E730             LEVEL: Severe
     PID     : 10963                TID : 140045067478784 KTID : 12078
     PROC    : db2sysc
     INSTANCE: db2inst1             NODE : 000            DB   : DBNAME1
     APPHDL  : 0-62                 APPID: *LOCAL.db2inst1.210929031313
     AUTHID  : DB2INST1             HOSTNAME: hostname1
     EDUID   : 193                  EDUNAME: db2agent (DBNAME1)
     FUNCTION: DB2 UDB, global services, sqlzCtrlFile::Open, probe:983
     MESSAGE : ZRC=0x860F000A=-2045837302=SQLO_FNEX "File not found.
               "DIA8411C A file "" could notbe found.
     DATA #1 : String, 40 bytes
     Could not open the primary control file.
     DATA #2 : String, 53 bytes
     /home/db2inst1/db2inst1/NODE0000/SQL00004/SQLOGCTL.GLFH.1
若要從這個狀況回復, IBM 支援中心可以提供使用回復控制檔副本的指引,以重建遺漏或損壞的主要控制檔。
遺漏或無法存取回復控制檔會導致資料庫啟動失敗
如果 ctrl_file_recov_path 內的一個以上回復控制檔不再可存取或遺漏 (即使主要控制檔可存取) ,則資料庫啟動會因 SQL1051N 錯誤而失敗。 管理通知 (.nfy) 日誌將包含 ADM1716C 和 ADM14001C 訊息。 此外,還會在資料庫的 DIAGPATH 中產生 FODC_RecovPath_<timestamp>/ 資料夾,其中包含對 IBM 支援中心可能有用的內部資訊,包括所有可用回復控制檔的已儲存副本。 例如,日誌可能包含:
$ db2 activate db dbname1
     SQL1051N  The path "/some_filesystem/recov_path_dbname1/db2inst1/NODE0000/SQL00004/SQLOGCTL.GLFH." does not exist or is not valid.  SQLSTATE=57019

$ less db2inst1.nfy

     2021-09-28-08.25.15.781991   Instance:dsciaraf   Node:000
     PID:5501(db2agent (DBNAME1))   TID:139853882713856   Appid:*LOCAL.dsciaraf.210928152515
     base sys utilities  sqleValidateActCtrlFileRecovDbDir Probe:1893   Database:DBNAME1
     
     ADM1716C  The database manager cannot start the database on database partition"0" because the database manager cannot open the recovery control file"/some_filesystem/recov_path_dbname1/db2inst1/NODE0000/SQL00004/SQLOGCTL.GLFH.1".

     2021-09-28-08.25.15.782361   Instance:dsciaraf   Node:000
     PID:5501(db2agent (DBNAME1))   TID:139853882713856   Appid:*LOCAL.dsciaraf.210928152515
     base sys utilities  sqleGenerateCtrlFileRecovFODC Probe:10   Database:DBNAME1
     
     ADM14001C  An unexpected and critical error has occurred: "RecovPath". The instance may have been shutdown as a result. "Automatic" FODC (First OccurrenceData Capture) has been invoked and diagnostic information has been recorded in directory"/home/db2inst1/sqllib/db2dump/FODC_RecovPath_2021-09-28-08.25.15.782163_0000/". 
     Please look in this directory for detailed evidence about what happened and contact IBM support if necessary to diagnose the problem.

$ less db2diag.log
     
     2021-09-28-23.33.20.358437-240 E60306E739            LEVEL: Severe
     PID     : 15372                TID : 140430251386624 KTID : 16386
     PROC    : db2sysc
     INSTANCE: db2inst1             NODE : 000            DB   : DBNAME1
     APPHDL  : 0-28                 APPID: *LOCAL.DB2.210929033218
     AUTHID  : DB2INST1             HOSTNAME: hostname1
     EDUID   : 179                  EDUNAME: db2stmm (DBNAME1)
     FUNCTION: DB2 UDB, global services,sqlzCtrlFile::Open, probe:1208
     MESSAGE : ZRC=0x860F000A=-2045837302=SQLO_FNEX "File not found.
               "DIA8411C A file "" could not be found.
     DATA #1 : String, 41 bytes
     Could not open the recovery control file.
     DATA #2 : String, 64 bytes/some_filesystem/recov_path_dbname1/db2inst1/NODE0000/SQL00004/SQLOGCTL.GLFH.1
發生此狀況時,若要繼續進行資料庫啟動,必須先停用 ctrl_file_recov_path ,方法是將值設為 NULL ,然後再進行資料庫啟動。 例如:
$ db2 UPDATE DB CFG FOR dbname1 USING CTRL_FILE_RECOV_PATH NULL
     DB20000I  The DEACTIVATE DATABASE command completed successfully.

$ db2 activate db dbname1
     DB20000I  The ACTIVATE DATABASE command completed successfully.
然後,可以如先前所述重新啟用 ctrl_file_recov_path 。 例如:
$ db2 UPDATE DB CFG FOR dbname1 USING CTRL_FILE_RECOV_PATH /some_filesystem/recov_path_dbname1
     DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
     SQL1363W  One or more of the parameters submitted for immediate modification were not changed dynamically. For these configuration parameters, the database must be shutdown and reactivated before the configuration parameter changes become effective.

$ db2 deactivate db dbname1
     DB20000I  The DEACTIVATE DATABASE command completed successfully.

$ db2 activate db dbname1
     DB20000I  The ACTIVATE DATABASE command completed successfully.
由於遺漏或無法存取回復控制檔,資料庫停用失敗
如果 ctrl_file_recov_path 內的一或多個回復控制檔不再可存取或遺漏 (即使主要控制檔可存取) ,則資料庫停用可能會因 SQL1042C 或類似錯誤而失敗。 db2diag.log 將包含指出無法存取控制檔路徑或檔案的項目。 例如:
$ db2 deactivate db db1157
     SQL1042C  An unexpected system error occurred.  SQLSTATE=58004

$ less db2diag.log
     2021-09-27-16.35.45.721088-420 E609341E618           LEVEL: Error
     PID     : 26473                TID : 140325389592320 PROC : db2sysc
     INSTANCE: db2inst1             NODE : 000            DB   : DBNAME1
     APPHDL  : 0-217                APPID: *LOCAL.db2inst1.210927233802
     AUTHID  : DB2INST1             HOSTNAME: hostname1
     EDUID   : 38                   EDUNAME: db2agent (DBNAME1)
     FUNCTION: DB2 UDB, global services, sqlzCtrlFile::Open, probe:1200
     MESSAGE : ZRC=0x870F0011=-2029060079=SQLO_PATH "aninvalid path"
               DIA8514C An invalid file path, "", was specified.
     DATA #1 : String, 42 bytes
     /home/db2inst1/db2inst1/NODE0000/SQL00004/
     DATA #2 : sqlzCtrlFile, PD_TYPE_sqlzCtrlFile, 13120 bytes
發生此狀況時,可以使用 db2stop force 作業來強制關閉資料庫實例。 db2stop force 作業會先嘗試取消啟動資料庫,然後等待 start_stop_time dbm 配置參數所定義的分鐘數,再強制停止資料庫實例,並傳回 SQL6037N 錯誤。 例如:
$ db2stop force
     SQL6037N  START or STOP DATABASE MANAGER timeout value was reached.
然後,必須停用 ctrl_file_recov_path ,方法是將值設為 NULL ,然後啟動資料庫。 例如:
$ db2 UPDATE DB CFG FOR dbname1 USING CTRL_FILE_RECOV_PATH NULL
     DB20000I  The DEACTIVATE DATABASE command completed successfully.

$ db2 activate db dbname1
     DB20000I  The ACTIVATE DATABASE command completed successfully.
如先前所述,可以重新啟用 ctrl_file_recov_path
ctrl_file_recov_path 是已修改其解析路徑的符號鏈結
如果先前已使用符號鏈結的路徑啟用 ctrl_file_recov_path ,且在 OS 或檔案系統層次修改符號鏈結以指向新的已解析路徑,但前一個回復路徑的內容未複製到新位置, 則下一次資料庫啟動將會失敗,並產生 SQL1051N 錯誤,因為在新的已解析路徑中找不到回復控制檔副本。 在此實務範例中,發出 UPDATE DB CFG for <dbname> using ctrl_file_recov_path NULL 指令並重新啟動資料庫以停用控制檔回復,然後發出 UPDATE DB CFG for <dbname> using ctrl_file_recov_path <symlink path> 指令並重新啟動資料庫以重新啟用此特性,這將重新整理新解析路徑中的回復控制檔。