ctrl_file_recov_path - 数据库控制文件恢复路径配置参数
此参数指定关键数据库控制文件的副本将驻留的文件系统路径。
- 配置类型
- 数据库
- 参数类型
- 可配置
- 缺省值 [范围]
- 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 必须可供每个数据库分区访问。 允许分区具有特定恢复路径,此路径仅存在于当前分区上。
<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.
故障诊断
- 缺少主控制文件或无法访问主控制文件,导致数据库激活或取消激活失败
- 如果数据库路径中的一个或多个主控制文件缺失或不再可访问(即使恢复控制文件是可访问的),那么数据库激活可能会失败,并出现 SQL1036C 错误,并且 db2diag.log 条目指示打开控制文件时发生错误。 例如:
要从此情境中恢复, IBM 支持人员可以提供有关使用恢复控制文件副本来重新创建缺失或损坏的主控制文件的指导。$ 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 - 缺少或不可访问的恢复控制文件导致数据库激活失败
- 如果 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 中的一个或多个恢复控制文件不再可访问或丢失(即使主控制文件可访问),那么数据库激活将失败,并返回 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 - 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> 命令并重新激活数据库以重新启用该功能,这将刷新新的已解析路径中的恢复控制文件。