ctrl_file_recov_path - 数据库控制文件恢复路径配置参数

此参数指定关键数据库控制文件的副本将驻留的文件系统路径。

注: 此参数仅在 V 11.5.7 或更高版本中可用。
配置类型
数据库
参数类型
可配置
缺省值 [范围]
Null [任何有效路径或设备]

术语

数据库路径
用于保留数据库参考文件和文件夹的分层目录。 有关更多信息,请参阅数据库目录和文件
主控制文件
数据库引擎 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 将自动附加 instance-home 目录、instance-name 子目录、partition-global 目录和 member-specific 目录,方式如下所示:
<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.

故障诊断

注: 具有函数标记 "CtrlFileRecov"db2diag.log 和管理通知 (.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
发生此情况时,要继续执行数据库激活,必须先通过将值设置为 NULL 来禁用 ctrl_file_recov_path,然后进行数据库激活。 例如:
$ 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,并且在操作系统或文件系统级别将该符号链接修改为指向新的已解析路径,但未将先前恢复路径的内容复制到新位置,那么下一次数据库激活将失败,并返回 SQL1051N 错误,因为在新的已解析路径中找不到恢复控制文件副本。 在此场景中,发出 UPDATE DB CFG for <dbname> using ctrl_file_recov_path NULL 命令并重新激活数据库以禁用控制文件恢复,然后发出 UPDATE DB CFG for <dbname> using ctrl_file_recov_path <symlink path> 命令并重新激活数据库以重新启用该功能,这将刷新新的已解析路径中的恢复控制文件。