DB2 V9.7 for Linux, UNIX, and Windows

高可用性灾难恢复 (HADR) 的数据库配置

可以使用数据库配置参数来获得 DB2® 高可用性灾难恢复 (HADR) 的最佳性能。

要获取 DB2 高可用性灾难恢复 (HADR) 的最佳性能,请确保数据库的配置满足下列需求。

建议:数据库配置参数和数据库管理器配置参数在主数据库和备用数据库所在系统上应尽可能一致。如果未在备用数据库上正确设置配置参数,就可能会发生以下问题: 对主数据库配置参数所作的更改不会自动地传播至备用数据库,必须在备用数据库上手动执行这些更改。对于动态配置参数来说,更改将立即生效,而不需要关闭并重新启动数据库管理系统 (DBMS) 或数据库。对于非动态配置参数来说,更改将在备用数据库重新启动后生效。

备用数据库上的日志文件大小配置参数

上一段落中描述的配置参数行为的一个例外情况是 logfilsiz 数据库配置参数。尽管不会将此参数复制到备用数据库,但是为了保证两个数据库上的日志文件一致,备用数据库将忽略本地 logfilsiz 配置并创建与主数据库上的日志文件大小匹配的本地日志文件。

完成接管后,原始备用数据库(新的主数据库)将采用原始主数据库上设置的 logfilsiz 值,直到重新启动新的主数据库为止。这时,新的主数据库将恢复为使用本地配置的值。此外,新的主数据库还将截断当前日志文件并调整任何预先创建的日志文件的大小。

如果因为执行了非强制接管,数据库不断切换角色,并且未取消激活任何一个数据库,那么使用的日志文件大小将始终是第一个主数据库确定的大小。但是,如果将原始备用数据库(新的主数据库)取消激活并接着重新启动它,它就会使用本地配置的日志文件大小。即使原始主数据库再次接管,也将继续使用此日志文件大小。只有将原始主数据库取消激活并接着重新启动它之后,日志文件大小才会恢复为原始主数据库上的设置。

数据库配置参数 autorestart

HADR 系统上 autorestart 参数的建议配置为 ON。如果 autorestart 参数设置为 OFF,并且服务器发生故障,那么您的响应取决于您是要重新启动还是故障转移到备用服务器:
  • 如果要重新启动,请手动运行 RESTART DATABASE 命令。如果重新启动失败,请执行故障转移。
  • 如果要进行故障转移,请执行下列步骤:
    1. 关闭旧的主服务器以避免发生“裂脑”情况。通过停止 DB2 实例或关闭主机电源来实现此目的。如果无法访问该服务器以便进行管理,请通过禁用客户机/服务器网络来将服务器与客户机隔开。
      注: 仅仅禁用数据库还不够,因为客户机连接可能使服务器重新联机。如果在一致状态下发生故障,那么即使 autorestart 参数设置为 OFF,也无法阻止客户机连接使服务器重新联机。
    2. 在关闭旧的主服务器之后,对备用数据库发出带有 BY FORCE 选项的 TAKEOVER HADR 命令。

备用数据库上的日志接收缓冲区大小

缺省情况下,备用数据库上的日志接收缓冲区大小将是对主数据库上的 logbufsz 配置参数指定的值的两倍。当此大小不够大时,也可能是数倍。例如,当 HADR 同步方式为异步,并且主数据库和备用数据库处于对等状态时,如果主数据库正在处理大量事务负载,那么备用数据库的日志接收缓冲区可能会达到最大容量,而主数据库上的日志提供操作可能会停止。要管理这些临时峰值,可以通过修改 DB2_HADR_BUF_SIZE 注册表变量来增大备用数据库上的日志接收缓冲区大小。

装入操作和 HADR

如果使用 COPY YES 选项在主数据库上执行装入操作,那么命令将在主数据库上执行,并且只要可以通过 LOAD 命令所指定的路径或设备访问副本,数据将复制到备用数据库。如果备用数据库无法访问数据,在备用数据库中就会将用来存储表的表空间标记为无效。备用数据库将跳过与此表空间相关的未来日志记录。要确保装入操作能够访问备用数据库上的副本,建议您使用共享位置来存储 COPY YES 选项产生的输出文件。此外,可以在装入操作执行期间将备用数据库取消激活,对主数据库执行装入,将输出文件副本放到备用数据库路径中,然后激活备用数据库。

如果使用 NONRECOVERABLE 选项在主数据库上执行装入操作,那么命令将在主数据库上执行,而备用数据库上的表将标记为无效。备用数据库将跳过与此表相关的未来日志记录。您可以选择发出指定了 COPY YESREPLACE 选项的 LOAD 命令来恢复此表,也可以删除此表以恢复空间。

因为 HADR 不支持执行指定了 COPY NO 选项的装入操作,所以会自动将命令转换为指定了 NONRECOVERABLE 选项的装入操作。要允许将指定了 COPY NO 选项的装入操作转换为指定了 COPY YES 选项的装入操作,请在主数据库中设置 DB2_LOAD_COPY_NO_OVERRIDE 注册表变量。备用数据库将忽略此注册表变量。确保备用数据库可通过使用相同的路径、设备或装入库来访问主数据库上指定 的设备或目录。

如果正在使用 Tivoli® Storage Manager (TSM) 以带 COPY YES 选项执行载入操作,那么可能需要设置主要数据库和备用数据库的 vendoropt 配置参数。根据 TSM 的配置方法,主数据库和备用数据库上的值可以不同。并且,当使用 TSM 来执行指定了 COPY YES 选项的装入操作时,必须发出带有 GRANT 选项的 db2adutl 命令,以使备用数据库对装入的文件具有读访问权。

如果表数据是由指定了 COPY YES 选项的装入操作复制的,那么将按以下方式复制索引:
  • 如果建立索引方式已设置为 REBUILD 并且表属性已设置为 LOG INDEX BUILD,或者表属性已设置为 DEFAULT 并且 logindexbuild 数据库配置参数已设置为 ON,那么主数据库会将重建的索引对象(即,在表上定义的所有索引)包括在复制文件中,以使备用数据库能够复制该索引对象。如果在执行装入操作之前备用数据库上的索引对象已标记为无效,那么在执行装入操作后,由于重建了索引,所以此索引对象将再次可用。
  • 如果建立索引方式已设置为 INCREMENTAL 并且表属性已设置为 LOG INDEX BUILD,或者表属性已设置为 NULL 但主数据库上的 logindexbuild 数据库配置参数已设置为 ON,那么仅当在执行装入操作之前备用数据库上的索引对象未标记为无效时,才会更新该索引对象。否则,在备用数据库上将索引标记为无效。

注册表变量 DB2_HADR_PEER_WAIT_LIMIT

当设置了 DB2_HADR_PEER_WAIT_LIMIT 注册表变量时,如果由于将日志复制到备用数据库而导致将 HADR 主数据库上的日志记录阻塞了指定的秒数,那么该主数据库将脱离对等状态。达到此限制时,主数据库将断开与备用数据库的连接。如果对等时间处于禁用状态,那么主数据库将进入断开状态,并且将恢复日志记录。如果对等时间处于启用状态,那么主数据库将进入断开对等状态,在该状态下将继续阻塞日志记录。在重新连接或对等时间到期时,主数据库将脱离断开对等状态。在主数据库脱离断开对等状态后,将恢复日志记录。
注: 如果设置了 DB2_HADR_PEER_WAIT_LIMIT,请使用最小值 10 来避免触发假警报。

在脱离对等状态时执行对等时间转换可确保对等时间语义在所有情况下都适用于安全接管。如果主数据库在转换期间失败,那么一般对等时间保护仍适用(只要备用数据库仍处于断开对等状态,就可以从备用数据库安全接管)。

对于备用数据库,在断开连接后,它将继续重放已接收到的日志。在重放接收到的日志后,备用数据库将重新连接至主数据库。重新连接时会进行一般状态过渡:首先是远程同步复制状态,然后是对等状态。

与 HADR_TIMEOUT 的关系:

如果在阻塞期间主数据库不断地接收来自备用数据库的脉动信号消息,那么 hadr_timeout 数据库配置参数不会使主数据库脱离对等状态。hadr_timeout 是 HADR 网络层的超时。如果 HADR 数据库在 hadr_timeout 时间段内未从其伙伴数据库接收到任何消息,那么该数据库将断开与其伙伴数据库的连接。该参数不控制更高层操作(例如,日志装入和 ACK)的超时。如果备用数据库上的日志重放在较大的操作(如装入或重组)处被阻塞,那么 HADR 组件仍会按正常时间表将脉动信号消息发送至主数据库。在这样的情况下,除非设置了 DB2_HADR_PEER_WAIT_LIMIT,否则只要备用数据库重放被阻塞,主数据库也会被阻塞。

无论连接状态如何,DB2_HADR_PEER_WAIT_LIMIT 都将取消阻塞主数据库记录。注意,即使未设置 DB2_HADR_PEER_WAIT_LIMIT,在检测到网络错误或者连接关闭时(可能是由于 HADR_TIMEOUT),主数据库也始终会脱离对等状态。

HADR 配置参数

若干个新数据库配置参数可用于支持 HADR。设置这些参数不会更改数据库的角色。必须发出 START HADRSTOP HADR 命令才能更改数据库的角色。

HADR 配置参数不是动态的。对 HADR 配置参数所作的任何更改只有在关闭并重新启动数据库后才会生效。在分区数据库环境中,HADR 配置参数可视并且可以被更改,但是这些参数将被忽略。

主数据库的本地主机名必须与备用数据库的远程主机名相同,而且备用数据库的本地主机名必须与主数据库的远程主机名相同。使用 hadr_local_hosthadr_remote_host 配置参数来设置每个数据库的本地主机和远程主机。建立连接时将检查本地主机名与远程主机名的配置是否一致,从而确保指定的远程主机就是期望的数据库。

可以将 HADR 数据库配置为使用 IPv4 或 IPv6 来找到它的伙伴数据库。如果主机服务器不支持 IPv6,那么数据库将使用 IPv4。如果服务器确实支持 IPv6,那么数据库是使用 IPv4 还是 IPv6 取决于对 hadr_local_hosthadr_remote_host 配置参数指定的地址格式。数据库会尝试将这两个参数解析为相同的 IP 格式。下表说明了如何确定支持 IPv6 的服务器的 IP 方式:
用于 hadr_local_host 的 IP 方式 用于 hadr_remote_host 的 IP 方式 用于 HADR 通信的 IP 方式
IPv4 地址 IPv4 地址 IPv4
IPv4 地址 IPv6 地址 错误
IPv4 地址 主机名,仅映射至 v4 IPv4
IPv4 地址 主机名,仅映射至 v6 错误
IPv4 地址 主机名,映射至 v4 和 v6 IPv4
IPv6 地址 IPv4 地址 错误
IPv6 地址 IPv6 地址 IPv6
IPv6 地址 主机名,仅映射至 v4 错误
IPv6 地址 主机名,仅映射至 v6 IPv6
IPv6 地址 主机名,映射至 v4 和 v6 IPv6
主机名,仅映射至 v4 IPv4 地址 IPv4
主机名,仅映射至 v4 IPv6 地址 错误
主机名,仅映射至 v4 主机名,仅映射至 v4 IPv4
主机名,仅映射至 v4 主机名,仅映射至 v6 错误
主机名,仅映射至 v4 主机名,映射至 v4 和 v6 IPv4
主机名,仅映射至 v6 IPv4 地址 错误
主机名,仅映射至 v6 IPv6 地址 IPv6
主机名,仅映射至 v6 主机名,仅映射至 v4 Error
主机名,仅映射至 v6 主机名,仅映射至 v6 IPv6
主机名,仅映射至 v6 主机名,映射至 v4 和 v6 IPv6
主机名,映射至 v4 和 v6 IPv4 地址 IPv4
主机名,映射至 v4 和 v6 IPv6 地址 IPv6
主机名,映射至 v4 和 v6 主机名,仅映射至 v4 IPv4
主机名,映射至 v4 和 v6 主机名,仅映射至 v6 IPv6
主机名,映射至 v4 和 v6 主机名,映射至 v4 和 v6 IPv6

仅当主数据库与备用数据库使用同一种格式时,它们才能建立 HADR 连接。如果一台服务器支持 IPv6(但也支持 IPv4),而另一台服务器只支持 IPv4,那么在 hadr_local_hosthadr_remote_host 参数中至少要有一个参数必须指定 IPv4 地址。这指示数据库使用 IPv4,即使服务器支持 IPv6 亦如此。

在准备 update database configuration 命令期间,在对高可用性灾难恢复 (HADR) 本地服务参数和远程服务参数(hadr_local_svchadr_remote_svc)指定值时,指定的值必须是尚未用于任何其他服务(包括其他 DB2 组件或其他 HADR 数据库)的端口。特别是,不能将任何一个参数值设置为服务器在等待来自远程客户机的通信时使用的 TCP/IP 端口(SVCENAME 数据库管理器配置参数)或下一个端口(SVCENAME + 1)。

如果主数据库与备用数据库在不同机器上,它们就可以使用同一个端口号或服务名称;否则,应该使用不同的值。可以将 hadr_local_svchadr_remote_svc 参数设置为端口号或服务名称。

同步方式(由 hadr_syncmode 配置参数指定)和超时周期(由 hadr_timeout 配置参数指定)必须在主数据库和备用数据库上相同。当 HADR 数据库对建立连接时,将检查这些配置参数的一致性。

主数据库与备用数据库之间的通信使用 TCP 连接。如果主数据库由于正在启动或者断开连接而未连接至备用数据库,那么它会使用其本地端口来侦听新连接。未与主数据库连接的备用数据库将继续向其远程主机发出连接请求。

虽然仅在主数据库上使用本地主机和本地服务参数(hadr_local_hosthadr_local_svc),但您仍然应该在备用数据库上设置这些参数,以确保当备用数据库必须作为主数据库进行接管时,已准备好这些参数。

当主数据库启动时,它将等待备用数据库建立连接,等待时间至少为 30 秒或 hadr_timeout 数据库配置参数值所指定的秒数(以较大者为准)。如果备用数据库未在指定的时间内建立连接,启动将失败。(发出带有 BY FORCE 选项的 START HADR 命令时的情况除外。)

在 HADR 数据库对建立连接后,它们将交换脉动信号消息。脉动信号间隔是 hadr_timeout 数据库配置参数值的 1/4 或 30 秒(以较小者为准)。hadr_heartbeat 监视元素显示 HADR 连接上连续未接收到的当前脉动信号数。如果一个数据库在 hadr_timeout 所指定的秒数内未从另一数据库接收到任何消息,那么它会启动断开连接操作。这意味着它最多等待 hadr_timeout 所指定的秒数以允许主数据库检测备用数据库故障或它们之间的网络故障。如果将 hadr_timeout 配置参数设置得太小,那么您将接收到虚假的警报,并且将频繁地断开连接。

如果 hadr_peer_window 数据库配置参数已设置为零,那么当主数据库和备用数据库处于对等状态时,备用数据库或网络的问题将不会阻塞主数据库事务处理太长时间,最多仅阻塞 hadr_timeout 配置参数所指定的秒数。如果将 hadr_peer_window 设置为非零值,那么在复原与备用数据库的连接或经历 hadr_peer_window 时间值之后(先发生的情况为准),主数据库才会落实事务。

注: 为了获得最大可用性,hadr_peer_window 数据库配置参数的缺省值已设置为零。当 hadr_peer_window 设置为零时,一旦主数据库与备用数据库之间的连接关闭(由于备用数据库关闭了连接、检测到网络错误或达到超时限制),主数据库将脱离对等状态,以避免阻塞事务。为了增强数据一致性(但会降低可用性),可以将 hadr_peer_window 数据库配置参数设置为非零值,这样将使主数据库在 hadr_peer_window 值所指定的时间内保持断开对等状态。

以下是主数据库和备用数据库的样本配置。

在主数据库上:
   HADR_LOCAL_HOST           host1.ibm.com
   HADR_LOCAL_SVC            hadr_service
   HADR_REMOTE_HOST          host2.ibm.com
   HADR_REMOTE_SVC           hadr_service
   HADR_REMOTE_INST          dbinst2
   HADR_TIMEOUT              120
   HADR_SYNCMODE             NEARSYNC   HADR_PEER_WINDOW          120
在备用数据库上:
   HADR_LOCAL_HOST           host2.ibm.com
   HADR_LOCAL_SVC            hadr_service
   HADR_REMOTE_HOST          host1.ibm.com
   HADR_REMOTE_SVC           hadr_service
   HADR_REMOTE_INST          dbinst1
   HADR_TIMEOUT              120
   HADR_SYNCMODE             NEARSYNC   HADR_PEER_WINDOW          120