用于数据库日志记录的配置参数

任何高可用性策略的一个关键元素是数据库日志记录。 可以使用数据库日志来记录事务信息、使主数据库与辅助(备用数据库)同步并前滚已接管出现故障的主数据库的辅助数据库。 要配置这些数据库日志记录活动,必须设置各种数据库配置参数。
归档重试延迟 (archretrydelay)
指定在上一次尝试失败之后,归档日志文件尝试之间等待的时间量(以秒计)。 缺省值为 20。
日志磁盘已满时挂起 (blk_log_dsk_ful)

可设置此配置参数以防止在 Db2® 数据库管理器无法在活动日志路径中创建新的日志文件时生成磁盘满错误。 DB2 数据库管理器将改为每隔五分钟就尝试创建一次日志文件,直至成功。 每次尝试之后,DB2 数据库管理器都会将一条消息写至管理通知日志。 确认应用程序因为日志磁盘已满情况而挂起的唯一的方法就是监视管理通知日志。 在成功创建日志文件之前,尝试更新表数据的所有用户应用程序都不能落实事务。 只读查询可能不会直接受影响;但是,如果查询需要访问被更新请求锁定的数据或者由更新应用程序在缓冲池中修正的数据页时,只读查询也将被阻塞。

如果将 blk_log_dsk_ful 设置为 YES,那么会导致应用程序在 DB2 数据库管理器遇到日志磁盘已满错误时挂起。 于是您就能够解决错误,而应用程序可以继续运行。 磁盘已满情况可以通过将旧的日志文件移至另一文件系统、增加文件系统的大小以使挂起应用程序能够完成或调查并解决任何日志归档失败来解决。

如果将 blk_log_dsk_ful 设置为 NO,那么接收到日志磁盘已满错误的事务将失败并被回滚。

故障转移归档路径 (failarchpath)
如果常规归档路径存在问题(例如,如果该路径无法访问或已满),那么会为归档日志文件指定备用目录。 在失败的日志归档方法再次可用之前,此目录是日志文件的临时存储区,日志归档方法再次可用后日志文件将从此目录中移至原始日志归档中所指定的路径。 通过将日志文件移动至此临时位置,有助于避免日志目录发生已满情况。 此参数必须是一个标准现有目录。
主日志归档压缩 (logarchcompr1) 和辅助日志归档压缩 (logarchcompr2)
在某些情况下,这些参数控制数据库管理器是否压缩归档日志文件。 如果对日志归档文件进行压缩,那么可以减少与存储这些文件相关联的开销。
这些参数的有效值如下所示:
OFF
此值指定不压缩日志归档文件。 缺省值为 OFF
ON
此值指定压缩日志归档文件。 如果以动态方式设置此参数,那么不会压缩已归档的日志文件。
注:
  1. 如果将 logarchmeth1 配置参数设置为 DISKTSMVENDOR 以外的值,那么日志归档压缩不起作用,不管 logarchcompr1 配置参数设置如何都是如此。
  2. 如果将 logarchmeth2 配置参数设置为 DISKTSMVENDOR 以外的值,那么日志归档压缩不起作用,不管 logarchcompr2 配置参数设置如何都是如此。
日志归档方法 1 (logarchmeth1)、日志归档方法 2 (logarchmeth2)
这些参数使数据库管理器将日志文件归档至活动日志路径之外的位置。 如果同时指定这两个参数,那么由 logpath 配置参数设置的活动日志路径中的每个日志文件均会进行两次归档。 这意味着将在两个不同目标位置具有该日志路径中的已归档日志文件的两个相同副本。 如果通过使用 mirrorlogpath 配置参数指定了镜像日志记录,那么 logarchmeth2 配置参数将归档镜像日志路径中的日志文件,而不是归档活动日志路径中日志文件的其他副本。 这意味着将在两个不同目标位置归档日志文件的两个不同副本:一个副本来自活动日志路径,另一个副本来自镜像日志路径。
这些参数的有效值如下所示:
OFF
此值指定不使用日志归档方法。 如果将 logarchmeth1logarchmeth2 配置参数都设置为 OFF,那么认为数据库正在使用循环日志记录,且不可前滚恢复。 缺省值为 OFF
LOGRETAIN
指定活动日志文件将保留并且变为联机归档日志文件以在前滚恢复中使用。
USEREXIT
指定执行日志保留日志记录并应使用用户出口程序来归档和检索这些日志文件。 日志文件是在变满时进行归档的。 ROLLFORWARD 实用程序必须使用日志文件来复原数据库时会检索这些日志文件。
DISK
此值必须后跟冒号 (:),然后是将在其中对日志文件归档的现有路径的标准名称。 例如,如果将 logarchmeth1 配置参数设置为 DISK:/u/dbuser/archived_logs,那么归档日志文件将放入 /u/dbuser/archived_logs/INSTANCE_NAME/DBNAME/NODExxxx/LOGSTREAMxxxx/Cxxxxxxx 目录。
注: 如果要归档到磁带,那么可以使用 db2tapemgr 实用程序来存储和检索日志文件。
注: 如果要归档到 NFS,那么建议使用 nolock 选项安装 NFS 系统。
TSM
如果未指定任何其他配置参数,那么此值指示应该使用缺省管理类在本地 Tivoli® Storage Manager (TSM) 服务器上归档日志文件。 如果此值后紧跟冒号(:)和 TSM 管理类,那么使用指定的管理类来归档日志文件。
此外,请参阅下面的日志归档选项 1 (logarchopt1) 和日志归档选项 2 (logarchopt2) 部分以了解用于控制 Db2 和 TSM 日志归档行为的可配置选项。
VENDOR
指定将使用供应商库来归档日志文件。 此值后必须紧跟冒号(:)和库的名称。 库中提供的 API 必须使用备份并复原供应商产品的 API。

此外,请参阅下面的日志归档选项 1 (logarchopt1) 和日志归档选项 2 (logarchopt2) 部分以了解用于控制 Db2 和供应商日志归档行为的可配置选项。

注:
  1. 如果将 logarchmeth1logarchmeth2 设置为 OFF 以外的值,那么必须配置数据库以进行前滚恢复。
日志归档选项 1 (logarchopt1) 和日志归档选项 2 (logarchopt2)
指定在配置日志归档方法(logarchmeth1 和/或 logarchmeth2)后用于控制日志归档行为的一串选项。 可在此字符串中指定多个选项,这些选项之间必须使用空格进行分隔。

有两类选项: Db2 识别并影响数据库管理器的日志归档行为的选项,以及 Db2 无法识别并直接传递到 TSM 或供应商 API 以影响供应商或存储管理器行为的选项。

Db2 识别并影响数据库管理器日志归档行为的选项:

以下选项影响 Db2 日志归档数据库行为。 这些选项必须以两个连字符或破折号“--”作为前缀,并且必须是字符串中排在最前的条目。

"--DBNAME"
对于 TSM 和 VENDOR 日志归档方法,使用此参数将允许数据库检索使用另一数据库名称生成的日志文件。 如果数据库备份映像复原到新数据库名称(通过使用复原 REDIRECT 选项),并且后续数据库前滚操作必须使用原始数据库名称从此归档检索日志文件,那么此功能很有用。 有关更多详细信息,请参阅 技术说明 #1687492 DB2 未能在重定向复原到新的数据库名称后检索归档日志。 下面演示了一个示例:
 "--dbname=<original database name>"

"--VENDOR_ARCHIVE_TIMEOUT"(仅适用于 Unix 平台)

对于 TSM 和 VENDOR 日志归档方法,从 Db2 V11.1.3.3 开始,使用此参数将在数据库管理器尝试归档日志文件时强制启用超时设置(以秒计)。 如果 Db2 与 TSM 或供应商 API 之间的日志数据传输在指定的超时时间段内无响应,那么 Db2 将中断归档日志尝试并遵循正常日志归档失败协议 (如果配置了故障转移日志归档路径 (FAILARCHPATH) ,那么 Db2 将尝试将日志文件归档到此路径,否则 Db2 将重试归档日志尝试)。

此选项仅在 UNIX 平台上受支持。

允许的值的范围是 1 到 2,147,483,674。

下面演示了一个示例:
 "--vendor_archive_timeout=<number of seconds>"

logarchopt1logarchopt2 数据库配置参数更新为包含此选项时,不需要重新启动数据库实例,但系统会在下次开始尝试归档日志操作时强制启用超时。

可以使用 db2pd -fvp 命令来完成对 TSM 或供应商方法的日志归档的监视。 有关具有日志归档请求的 db2pd -fvp 的示例,请参阅: db2pd -对 DB2 数据库命令进行监视和故障诊断。

直接传递至 TSM 或供应商 API 的选项:

Db2将无法识别该字符串中的任何剩余选项,并且该字符串 (不包括上述由 Db2 识别的任何选项) 将直接传递到 TSM 或供应商 API。

对于 TSM 环境, Db2 数据库环境的一些常用 TSM 选项包括:

TSM 需要选项前面有一个连字符/短划线字符“-”。指定在配置日志归档方法(logarchmeth1 和/或 logarchmeth2)时控制日志归档行为的选项字符串。 可在此字符串中指定多个选项,这些选项之间必须使用空格进行分隔。

要使数据库能够检索在其他 TSM 节点上由其他 TSM 用户生成的日志,或者在使用代理节点的 TSM 环境 (例如在 Db2 pureScale® 环境中) 中生成的日志,必须提供以下其中一种格式的字符串:
  • 要在 TSM 服务器未配置为支持代理节点客户机时,检索不同 TSM 节点上生成的日志:
       "-fromnode=nodename"
  • 当未将 TSM 服务器配置成支持代理节点客户机时,对于检索通过不同的 TSM 用户生成的日志:
       "-fromowner=ownername"
  • 要在 TSM 服务器未配置为支持代理节点客户机时,检索在不同 TSM 节点上生成的日志以及由不同 TSM 用户生成的日志:
       "-fromnode=nodename -fromowner=ownername"
  • 用于检索在客户机代理节点配置中生成的日志,例如,在 Db2 pureScale 环境中,有多个成员在处理相同数据:
       "-asnodename=proxynode"
    nodename 是最初归档日志文件的 TSM 节点的名称,ownername 是最初归档日志文件的 TSM 用户的名称,proxynode 是共享 TSM 目标代理节点的名称。 每个日志归档选项字段对应于一个日志归档方法:logarchopt1logarchmeth1 配合使用,logarchopt2logarchmeth2 配合使用。

    限制:

    • 使用 -asnodename TSM 选项时,不使用每个成员的节点名 (nodename) 来存储数据。 而是使用 Db2 pureScale 实例中所有成员所使用的共享 TSM 目标节点的名称来存储数据。
    • -fromnode 选项与 -fromowner 选项和 -asnodename 选项不兼容,因此不能同时使用。 将 -asnodename 选项用于使用代理节点的 TSM 配置,而将另外两个选项用于其他类型的 TSM 配置。 有关更多信息,请参阅 配置 Tivoli Storage Manager 客户机
日志缓冲区 (logbufsz)
此参数允许您指定在将日志记录写至磁盘之前用作这些记录的缓冲区的内存量。 当发生下列任何一项事件时会将日志记录写入磁盘:
  • 事务落实
  • 日志缓冲区已满
  • 发生了某些其他的内部数据库管理器事件。

增加日志缓冲区的大小可使与日志记录关联的输入/输出 (I/O) 活动更有效,因为将日志记录写到磁盘中的频率更低,而每次写入的记录却更多。 但是,如果日志缓冲区大小值较大,执行恢复所需的时间就会较长。 此外,您也能够使用较高的 logbufsz 设置来减少从日志磁盘的读取次数。 (要确定系统是否从中受益,请使用 log_reads 监视元素来检查读取日志磁盘的次数是否很多。

日志文件大小 (logfilsiz)
此参数以 4 KB 的页数指定每个配置日志的大小。

对可配置的每个日志流的总活动日志空间有 1024 GB 的逻辑限制。 此限制源自每个日志文件的上限(即 4 KB)以及最大主日志文件数与最大辅助日志文件数之和(即 256)。

日志文件的大小对性能有直接的影响。 从一个日志切换至另一个日志需要付出性能代价。 因此,从纯性能角度来说,日志文件大小越大越好。 此参数还指示要归档的日志文件大小。 这种情况下,日志文件大小越大并不一定越好,因为较大的日志文件大小增加了故障或导致日志装入方案中的延迟的发生机率。 当考虑活动日志空间时,最好有较多的较小日志文件。 例如,如果有 2 个很大的日志文件,并且事务启动接近一个日志文件的末尾,那么仅有一半日志空间仍然可用。

每当数据库取消激活(与该数据库的所有连接都终止)时,就截断当前正写入的日志文件。 因此,如果某个数据库被频繁取消激活,那么最好不要选择较大的日志文件大小,这是因为 DB2 数据库管理器将仅创建将会截断的较大文件。 您可以使用 ACTIVATE DATABASE 命令来避免此成本,因为它会阻止在最后一个客户机与数据库断开连接时自动取消激活数据库。

假定应用程序将数据库保持为打开以使打开数据库时的处理时间最短,日志文件大小应由建立脱机归档日志副本所花的时间确定。

将日志文件的丢失降低至最小程度,也是设置日志大小时的一个重要注意事项。 归档一次针对一整个日志文件进行操作。 如果配置较大的日志文件,那么会增加归档之间的时间。 如果介质包含日志故障,某些事务信息将可能丢失。 减小日志文件大小会增加归档的频率,但可以减少由于介质故障而丢失的信息量,因为平均而言,在任何给定的时间点处,尚未归档的日志数据较少。

每个事务的最大日志 (max_log)
此参数指示一个事务可以消耗的主日志空间的百分比。 该值是为 logprimary 配置参数指定的值的百分比。

如果该值设置为 0,那么事务可以使用的总主日志空间的百分比没有限制。 如果应用程序违反了 max_log 配置,那么将强制该应用程序与数据库断开连接并且事务将回滚。

可以通过将 DB2_FORCE_APP_ON_MAX_LOG 注册表变量设置为 FALSE 来重置此行为。 这将导致违反了 max_log 配置的事务失败。 该应用程序仍然可以落实在工作单元中由先前语句完成的工作,它也可以回滚已完成的工作以撤销该工作单元。

当启用了无限活动日志空间时,此参数和 num_log_span 配置参数非常有用。 如果启用无限记录(即,如果 logsecond 是 -1) ,则事务不会受到日志文件数量上限(logprimary + logsecond )的限制)。当达到 logprimary 的值时, Db2 数据库管理员开始归档活动日志,而不是让交易失败。 这样可能会导致问题,例如,有一个长期运行的事务,但一直未落实它(可能是由于具有逻辑错误的应用程序导致的)。 如果出现这种情况,那么活动日志空间会不断增长,从而可能使得崩溃恢复性能很差。 为了防止这样,可以为 max_log 和/或 num_log_span 配置参数指定值。

注: 以下 Db2 命令从 max_log 配置参数施加的限制中排除: ARCHIVE LOGBACKUP DATABASELOADREORGRESTORE DATABASEROLLFORWARD DATABASE
镜像日志路径 (mirrorlogpath)
要保护活动日志路径上的日志免受磁盘故障或意外删除的影响,可以指定在辅助 (镜像) 日志路径上维护一组相同的日志。 要执行此操作,将此配置参数的值更改为指向另一目录。 如果数据库被配置为进行前滚恢复,那么不要将当前存储在镜像日志路径目录中的归档日志移至新位置。

mirrorlogpath 参数也会影响日志归档行为,您可以使用此参数进一步提高前滚恢复期间的弹性:设置了 mirrorlogpathlogarchmeth2 时,logarchmeth2 将归档镜像日志路径中的日志文件,而不是归档活动日志路径中日志文件的其他副本。 可以使用此日志归档行为来提高弹性,这是因为镜像日志路径中可用的已归档日志文件可能仍然可用以继续执行数据库恢复操作,即使在归档之前主日志文件由于磁盘故障而毁坏。

因为可以更改日志路径位置,因此前滚恢复所需的日志可以存在于不同的目录中。 在前滚操作期间可更改此配置参数的值,以允许您从其他镜像日志路径访问日志文件。

必须跟踪这些日志的位置。

直到数据库处于一致状态时才会应用所作的更改。 配置参数 database_consistent 返回数据库的状态。

要关闭此配置参数,将它的值设置为 DEFAULT。

注:
  1. 如果活动日志路径是原始设备,那么不支持此配置参数。
  2. 对此参数指定的值不能是原始设备。
  3. Db2 pureScale 环境中,连接或激活数据库进程配置的第一个 成员 会更改此日志路径参数。 DB2 数据库管理器会验证路径是否存在,以及它对该路径是否具有读和写访问权。 它还会为日志文件创建特定于成员的子目录。 如果其中任何一个操作失败,那么 DB2 数据库管理器会拒绝指定的路径,并使用旧路径让数据库联机。 如果接受指定的路径,那么会将新值传播到每个 成员。 如果某个成员在尝试切换至新路径时失败,那么后续尝试激活它或连接至它都将失败 (SQL5099N)。 所有 成员 都必须使用相同的日志路径。
新日志路径 (newlogpath)
数据库日志最初创建于下列目录:db_path/instance_name/dbname/NODE0000/LOGSTREAM0000。 通过将此配置参数的值更改为指向另一目录或另一设备,可以更改放置活动日志文件(将来会放置以后的归档日志)的位置。 如果数据库被配置为进行前滚恢复,那么不要将当前存储在数据库日志路径目录中的归档日志移至新位置。

因为可以更改该日志路径的位置,因此前滚恢复所需的日志可以存在于不同的目录中或不同的设备上。 在前滚操作期间可更改此配置参数的值,以允许您访问位于多个位置的日志。

必须跟踪这些日志的位置。

直到数据库处于一致状态时才会应用所作的更改。 配置参数 database_consistent 返回数据库的状态。

注:Db2 pureScale 环境中,连接或激活数据库进程的第一个 成员 将对此日志路径参数进行配置更改。 DB2 数据库管理器会验证路径是否存在,以及它对该路径是否具有读和写访问权。 它还会为日志文件创建特定于成员的子目录。 如果其中任何一个操作失败,那么 DB2 数据库管理器会拒绝指定的路径,并使用旧路径让数据库联机。 如果接受指定的路径,那么会将新值传播到每个 成员。 如果某个成员在尝试切换至新路径时失败,那么后续尝试激活它或连接至它都将失败 (SQL5099N)。 所有 成员 都必须使用相同的日志路径。
对组的落实次数 (mincommit)
此参数允许您延迟将日志记录写入磁盘,直到执行了最小数目的落实为止。 此延迟可有助于减少与写入日志记录关联的数据库管理器开销,这样如果您有多个应用程序对数据库运行,且在很短的时间内该应用程序请求了许多落实,那么可改进性能。

仅当此参数的值大于 1,且多个应用程序大约同时尝试落实其事务时,才会对落实进行这种分组。 落实组合生效时,保持应用程序落实请求,直到经过 1 秒钟或落实请求数等于此参数的值为止。

出错时的归档重试次数 (numarchretry)
指定在日志文件归档到 failarchpath 配置参数指定的路径之前,使用配置的日志归档方法归档日志文件的尝试次数。 如果设置了 failarchpath 配置参数,那么只能使用该参数。 缺省值为 5。
事务可以跨越的活动日志数 (num_log_span)
此参数指示一个活动事务可以跨越的活动日志文件数。 如果该值设置为 0,那么对单个事务可以跨越的日志文件数没有限制。

如果应用程序违反了 num_log_span 设置,那么将强制该应用程序与数据库断开连接。

当启用了无限活动日志空间时,此参数和 max_log 配置参数非常有用。 如果启用无限记录(即,如果 logsecond 是 -1) ,则事务不会受到日志文件数量上限(logprimary + logsecond )的限制)。当达到 logprimary 的值时, Db2 数据库管理员开始归档活动日志,而不是让交易失败。 这样可能会导致问题,例如,有一个长期运行的事务,但一直未落实它(可能是由于具有逻辑错误的应用程序导致的)。 如果出现这种情况,那么活动日志空间会不断增长,从而可能使得崩溃恢复性能很差。 为了防止这样,可以为 max_log 和/或 num_log_span 配置参数指定值。

注: 以下 Db2 命令将从 num_log_span 配置参数施加的限制中排除 :ARCHIVE LOG , BACKUP DATABASE , LOAD , REORG , RESTORE DATABASE 和 ROLLFORWARD DATABASE。
溢出日志路径 (overflowlogpath)

此参数可用于多个函数,请参阅 使用溢出日志路径 以获取配置 overflowlogpath的优点。

如果 logsecond 设置为 -1,那么可以指定一个目录来让 DB2 数据库管理器存储从归档中检索到的活动日志文件。 (如果活动日志文件不再存在于活动日志路径中,那么必须检索它们以用于回滚操作)。

如果未指定 overflowlogpath,那么 DB2 数据库管理器会将日志文件检索到活动日志路径中。 通过指定此参数,可以提供其他存储器资源让 DB2 数据库管理器放置检索到的日志文件。 好处包括将 I/O 成本分布到不同的磁盘上,以及允许将更多的日志文件存储在活动日志路径中。

例如,如果将 db2ReadLog API 用于复制,那么可以使用 overflowlogpath 来指定一个位置让 DB2 数据库管理器搜索此 API 所需的日志文件。 如果找不到日志文件(在活动日志路径或溢出日志路径中)并且已配置数据库进行日志归档,那么 DB2 数据库管理器将检索日志文件。 还可以使用此参数来指定一个目录来让 DB2 数据库管理器存储检索到的日志文件。 好处包括降低活动日志路径上的 I/O 成本,以及允许将更多的日志文件存储在活动日志路径中。

当配置无限日志记录(即,将 logsecond 设置为 -1)时,设置 overflowlogpath 非常有用。 DB2 数据库管理器可以将从归档中检索的活动日志文件存储在此路径中。 (使用无限日志记录,如果活动日志文件不再在活动日志路径中,那么可能需要从归档检索活动日志文件,以进行回滚或崩溃恢复操作。)

如果您为活动日志路径配置了原始设备,则必须配置 overflowlogpath ,如果您想将 logsecond 设置为 -1 ,或者想使用 db2ReadLog API。

要设置 overflowlogpath,请指定最长为 242 个字节的字符串。 该字符串必须指向路径名,并且它必须是标准路径名,而不是相对路径名。 该路径名必须是目录,而不是原始设备。

注: 在分区数据库环境中,会自动将数据库分区号追加到路径中。 这样做是为了维护多逻辑节点配置中路径的唯一性。
主日志文件 (logprimary)
此参数指定将创建的大小为 logfilsiz 的主日志数。

主日志文件,无论是空的还是满的,都需要相同的磁盘空间容量。 因此,如果配置的日志多于需要的日志,将会不必要地占用磁盘空间。 如果配置的日志太少,可能会遇到日志满载的情况。 当选择要配置的日志数时,必须考虑建立的每个日志的大小,以及应用程序是否可以处理日志满载的情况。 对活动日志空间的总日志文件大小限制为 256 GB。

如果对现有数据库启用前滚恢复,请将主日志数更改为主日志和辅助日志之和,再加 1。

辅助日志 (logsecond)
此参数指定创建并用于恢复(如果需要)的辅助日志文件的数目。

如果主日志文件已满,可按需要一次分配一个辅助日志文件(大小为 logfilsiz),最多可分配由此参数指定的最大数目。 如果此参数设置为 -1,那么将数据库配置为无限活动日志空间。 对在数据库上运行的未完成事务的大小或数量没有任何限制。 在必须容纳大型作业的环境中(这些作业需要的日志空间比通常分配给主日志的空间多),无限活动日志记录功能非常有用。

注:
  1. 要将 logsecond 设置为 -1,必须启用日志归档。
  2. 如果此参数设置为 -1,那么崩溃恢复时间可能会延长,这是因为 DB2 数据库管理器可能需要检索已归档的日志文件。