INFORMIX 的数据复制技术
华 北 计 算 技 术 研 究 所
谭 学 武
---- 随 着 金 融 电 子 化 的 普 及, 数 据 库 在 大 型 金 融 业 务 处 理 系 统 中 起 着 举 足 轻 重 的 作用。 而 数 据 的 可 靠 性 与 完 整 性 至 关 重 要, 它 的 损 失 或 破 坏 将 直 接 影 响 到 客 户 和 银 行 的切 身 利 益, 因 此 数 据 的 备 份 是 不 容 忽 视 的 问 题。 本 文 将 介 绍 一 种 由INFORMIX 提 供 的 建立 在 数 据 库 一 级 的 联 机 热 备 份 技 术。 它 由 数 据 库 本 身 提 供, 且 操 作 简 便 易 行, 具 有 一定 的 实 用 价 值。
---- 一、 什 么 是INFORMIX 的 数 据 复 制 技 术
---- 数 据 复 制 是 指 把 数 据 从 主 数 据 库 服 务 器( 以 下 称 主 服 务 器) 复 制 到 从 数 据 库 服务 器( 以 下 称 从 服 务 器)。 通 常 主、 从 服 务 器 分 别 位 于 两 台 主 机 之 上, 二 者 通 过TCP/IP 建 立 联 接, 这 样 数 据 复 制 技 术 可 以 提 供 一 种 可 靠、 即 时 的 备 份 机 制。 除 此 之 外, 数 据 复制 技 术 还 具 有 一 大 优 点, 即 用 于 备 份 的 从 服 务 器 可 被 用 于 进 行 一 些 只 读 操 作, 这 样 一来 可 分 担 一 些 主 服 务 器 的 负 载。
---- 二、 数 据 复 制 服 务 器 的 工 作 原 理
---- 数 据 复 制 服 务 器 的 工 作 原 理 是 主 服 务 器 在 把 逻 辑 日 志 缓 冲 区 中 的 内 容 写 往 磁盘 之 前, 先 将 其 拷 贝 至 数 据 复 制 缓 冲 区。 数 据 复 制 缓 冲 区 的 大 小 和 逻 辑 日 志 缓 冲 区 的大 小 一 样。 然 后 数 据 复 制 缓 冲 区 的 内 容 通 过TCP/IP 由 网 络 传 到 从 服 务 器 一 端 的 数 据复 制 缓 冲 区 中。 在 从 服 务 器 一 端, 有 线 程 负 责 接 收 数 据 复 制 缓 冲 区 并 将 其 放 入 恢 复 缓冲 区, 另 外 有 线 程 负 责 根 据 这 些 逻 辑 日 志 记 录 操 作 数 据 库。 从 而 使 从 服 务 器 起 到 了 对主 服 务 器 进 行 备 份 的 作 用。
---- 根 据 逻 辑 日 志 更 新 从 服 务 器 中 的 数 据 库 分 为 同 步 更 新 和 异 步 更 新 两 种 情 况。 采用 异 步 更 新 模 式 时, 主 服 务 器 在 完 成 从 逻 辑 日 志 缓 冲 区 到 数 据 复 制 缓 冲 区 的 拷 贝 之后, 就 刷 新 逻 辑 日 志 缓 冲 区 至 磁 盘。 而 对 数 据 复 制 缓 冲 区 跨 网 络 的 传 送 则 要 等 以 下 条件 之 一 满 足 时:
* 数 据 复 制 缓 冲 区 满。
* 当 数 据 库 以 非 缓 冲 方 式 记 逻 辑 日 志 时, 应 用 程 序 提 交 一 个 事 务。
* 经 过 由 参 数DRINTERVAL 指 定 的 时 间 间 隔。
---- 异 步 更 新 模 式 的 不 足 之 处 是 由 于 某 一 时 刻 的 系 统 故 障 导 致 一 些 事 务 在 主 服 务 器 上 已 经 提 交, 但 未 被 复 制 到 从 服 务 器 上。
---- 采 用 同 步 更 新 模 式 时, 在 主 服 务 器 上 把 逻 辑 日 志 缓 冲 区 刷 新 至 磁 盘 的 工 作 要 等到 主 服 务 器 收 到 从 服 务 器 发 来 的 已 收 到 复 制 缓 冲 区 的 确 认 之 后 才 能 进 行。 同 步 更 新模 式 可 以 确 保 在 主 服 务 器 上 已 提 交 的 事 务 肯 定 被 传 到 从 服 务 器 上。 它 的 不 足 之 处 是对 逻 辑 日 志 缓 冲 区 的 刷 新 会 由 于 等 待 确 认 消 息 的 接 收 而 有 一 定 的 延 时, 从 而 对 系 统性 能 造 成 一 定 影 响。
---- 三、 配 置 数 据 复 制 服 务 器 所 需 的 条 件
* 主、 从 服 务 器 的 硬 件 和 操 作 系 统 要 一 致。
* 主、 从 服 务 器 必 须 使 用 同 样 版 本 的INFORMIX
* 网 络 软 件 和 硬 件 的 连 接 必 须 保 证 主、 从 服 务 器 之 间 能 够 通 过TCP/IP 进 行 通 信。 而 且 二 者 必 须 使 用 同 样 的TCP/IP 编 程 接 口(TLI 或Sockets)。
* 在 主、 从 服 务 器 上 所 有 非 临 时 性 的dbspace 的chunk、dbspace、 路 径 名 以 及 偏 移 量 都要 保 持 一 致。 事 实 上, 两 台 机 器 上 供 主、 从 服 务 器 使 用 的 磁 盘 的 分 区 也 最 好 保 持 一 致。
* 数 据 库 必 须 使 用 事 务 日 志。 因 为 数 据 复 制 工 作 是 通 过 向 从 服 务 器 传 送 日 志 来 完 成的, 那 些 对 无 日 志 模 式 数 据 库 进 行 的 插 入、 修 改、 删 除 操 作 是 不 会 被 传 送 给 从 服 务 器的。
* 创 建 用 于 容 纳 临 时 表 的 临 时dbspace, 将 参 数DBSPACETEMP 指 向 此 临 时dbspace。
* 可 以 在 一 个 服 务 器 上 使 用 镜 像, 而 在 另 一 个 服 务 器 上 不 使 用 镜 像。 但 如 果 要 在 主 服务 器 上 对root dbspace 作 了 镜 像, 那 么 也 要 对 从 服 务 器 上 的root dbspace 作 镜 像。
* 除 此 之 外, 逻 辑 日 志、 物 理 日 志 和 共 享 内 存 的 参 数 配 置 也 必 须 一 致。
---- 四、 配 置 数 据 服 务 器 的 具 体 步 骤
---- 1. 创 建 临 时dbspace。
---- 临 时dbspace 是 服 务 器 用 于 创 建 临 时 表, 存 放 排 序 文 件 的 磁 盘 空 间。 在 数 据 复 制技 术 中 需 要 临 时dbspace 是 因 为 在 只 读 的 服 务 器 上 进 行 查 询 操 作 时 也 需 要 一 些 临 时的 磁 盘 空 间 来 存 放 中 间 结 果。 因 此, 临 时dbspace 是 从 服 务 器 唯 一 可 写 的dbspace。
---- 设 定 配 置 参 数DBSPACETEMP 指 向 所 创 建 的 临 时dbspace。
---- 2. 设 定DR 配 置 参 数。
---- 在onmonitor 的 数 据 复 制 画 面 中 有 四 个 输 入 域:
* Interval 域 或DRINTERVAL 配 置 参 数 用 于 说 明 相 邻 两 次 刷 新 数 据 复 制 缓 冲 区的 最 大 时 间 间 隔。 它 是 针 对 主 服 务 器 设 定 的。 如 果 置 为-1, 说 明 使 用 同 步 更 新 模 式。 如果 置 为 任 何 正 整 数, 则 说 明 使 用 异 步 更 新 模 式, 时 间 间 隔 以 秒 为 单 位, 缺 省 值 为30 秒。如 果 数 据 库 采 用 以 缓 冲 方 式 记 日 志 模 式, 同 时 数 据 复 制 服 务 器 又 采 用 异 步 更 新 模 式,那 么 可 以 把 参 数DRINTERVAL 置 为 缺 省 值30 秒, 以 使 网 络 延 时 最 小 化。 如 果 要 使 从 服 务器 包 含 所 有 主 服 务 器 中 已 提 交 的 事 务, 那 么 需 要 将 数 据 复 制 服 务 器 配 成 同 步 更 新 模式, 同 时 数 据 库 应 采 用 以 非 缓 冲 方 式 记 日 志 的 模 式。
* Timeout 域 或DRTIMEOUT 配 置 参 数 是 用 来 说 明 在 同 步 更 新 模 式 时, 数 据 复 制 服 务 器对 儿 中 一 方 等 待 来 自 另 一 方 的 确 认 信 息 的 最 大 时 间 间 隔。 若 该 确 认 信 息 在 指 定 的 时间 间 隔 内 没 有 到 达, 那 么 等 待 的 一 方 就 认 为 有 故 障 发 生。
---- 参 数DRTIMEOUT 也 是 用 于 测 试 服 务 器 联 接 的ping 线 程 睡 眠 的 秒 数。
* Auto 域 或DRAUTO 配 置 参 数 用 来 决 定 到 从 服 务 器 的 切 换 工 作 是 自 动 完 成 还 是通 过 手 动 完 成。 通 过 对 它 的 设 置 可 以 指 定 从 服 务 器 如 何 响 应 主 服 务 器 的 失 败。 它 的 值在 主、 从 服 务 器 上 必 须 设 成 一 样 的。 其 可 选 值 有 以 下 三 种:
DRAUTO=0 说明从服务器在主服务器发生故障时仍旧保持原有模式,由系统管理员手动将其切换成标准数据库服务器模式(即可写模式)
DRAUTO=1 说明从服务器在主服务器发生故障时自动切换成标准服务器模式,并且在数据复制服务器重新启动后重新切回原模式。
DRAUTO=2 从 INFORMIX-Online Dynamic Server版本7开始,增加了一种新的自动切换模式-REVERSE_TYPE。它是指从数据库服务器在主服务器发生故障时自动切换成标准数据库服务器模式,并且在数据复制服务器重新启动后,使自己成为主服务器,而原来的主服务器成为从数据库服务器。
---- 值 得 注 意 的 是: 当 使 用 数 据 复 制 服 务 器 的 自 动 切 换 特 性 时 必 须 小 心, 因 为 任 何类 型 的 数 据 复 制 失 败 都 有 可 能 导 致 从 服 务 器 自 动 切 换 成 标 准 服 务 器 模 式。 这 些 失 败包 括 网 络 失 败 或 处 理 延 时( 超 过 了DRTIMEOUT 设 定 的 时 间 间 隔)。
* Lost&Found 域 或DRLOSTFOUND 配 置 参 数 用 于 设 定 丢 失 并 且 被 找 到 的 事 务 文 件 的 路 径 名。
---- 五、 如 何 启 动 数 据 复 制 服 务 器
---- 在 开 始 启 动 数 据 复 制 服 务 器 之 前 应 检 查 主、 从 数 据 库 服 务 器 的 用 于 联 接 的 配 置参 数 是 否 设 置 正 确。 若 要 建 立 不 同 主 机 上 数 据 库 服 务 器 之 间 的 联 接 可 按 以 下 步 骤 进行:
* 为 数 据 库 服 务 器 选 择 合 适 的NETTYPE 参 数。 远 程 联 接 必 须 使 用TCP/IP 协 议。 可以 通 过 查 看 文 件$INFORMIXDIR/release/machnotes 来 确 定 你 的 系 统 是 使 用sockets 还 是TLI。
* 在$INFORMIXDIR/etc/sqlhosts 文 件 中 为 你 的 本 地 数 据 库 服 务 器 想 要 联 接 的 远 程 数 据 库 服 务 器 创 建 一 行。
* 使 两 个 数 据 库 服 务 器 均 启 动 为 联 机 模 式。
* 在 两 个 数 据 库 服 务 器 中 创 建 用 于 测 试 的 数 据 库 和 表, 然 后 执 行 如 下 的 远 程SELECT 语 句:
database localdb
select * from remotedb@remotesvr:table
---- 在 测 试 两 端 的 数 据 库 服 务 器 能 够 建 立 联 接 之 后, 就 可 开 始 按 以 下 步 骤 启 动 数 据复 制 服 务 器 了。INFORMIX-Online Dynamic Server 使 用 备 份 和 逻 辑 日 志 作 最 初 的 从主 数 据 库 服 务 器 到 从 数 据 库 服 务 器 的 复 制 工 作。 通 常 步 骤 如 下:
---- 在 主 数 据 库 服 务 器 上 进 行
---- 1. 对 主 数 据 库 服 务 器 进 行 一 次0 级 备 份。
---- 2. 备 份 主 数 据 库 服 务 器 的 逻 辑 日 志。
---- 3. 执 行 以 下 命 令 使 自 己 成 为 主 数 据 库 服 务 器:
onmode -d primary sec_name
---- 其 中sec_name 是 从 数 据 库 服 务 器 名, 是 由 参 数DBSERVERNAME 指 定 的。
---- 执 行 完 该 命 令 后, 确 认 消 息 日 志 文 件 中 应 出 现 以 下 信 息:
DR: new type = primary, server name = sec_name
DR: Cannot connect to secondary server
---- 在 从 数 据 库 服 务 器 上 执 行
---- 4. 用 在 主 数 据 库 服 务 器 上 进 行 的0 级 备 份 在 从 数 据 库 服 务 器 上 进 行 物 理 恢 复。该 备 份 可 通 过 网 络 由 主 数 据 库 服 务 器 传 到 从 数 据 库 服 务 器 上, 也 可 通 过 在 从 数 据 库服 务 器 上 指 定 远 程 磁 带 机 的 方 法 获 得。 例 如:TAPEDEV hostname:/dev/rst0
---- 在 从 数 据 库 服 务 器 上 进 行 恢 复 的 过 程 中, 当 被 问 及 是 否 想 要 备 份 逻 辑 日 志 时,一 定 要 回 答n, 因 为 在 恢 复 过 程 中 用 不 着 从 数 据 库 服 务 器 上 的 逻 辑 日 志。
---- 5. 执 行 以 下 命 令 使 自 己 成 为 从 数 据 库 服 务 器:
onmode -d secondary primary_name
---- 其 中primary_name 是 主 数 据 库 服 务 器 名, 是 由 参 数DBSERVERNAME 指 定 的。
---- 执 行 完 该 命 令 后, 确 认 消 息 日 志 文 件 中 应 出 现 以 下 信 息:
DR:new type = secondary ,server name = primary_name
---- 6. 进 行 逻 辑 恢 复。 从 数 据 库 服 务 器 会 询 问 并 读 入 在0 级 备 份 以 后 备 份 的 逻 辑 日志 磁 带。 一 旦, 最 后 一 盘 磁 带 被 读 完, 从 数 据 库 服 务 器 就 会 联 接 到 主 数 据 库 服 务 器, 并开 始 读 取 自 上 一 次 进 行 逻 辑 日 志 备 份 以 来 积 累 在 主 数 据 库 服 务 器 一 端 的 日 志 记 录。这 些 记 录 被 通 过 网 络 传 送 到 从 数 据 库 服 务 器 一 端, 然 后 被 用 于 在 从 数 据 库 服 务 器 上重 演。 在 重 演 结 束 以 后, 数 据 复 制 服 务 器 就 可 以 开 始 运 作 了。
---- 执 行 完 以 上 步 骤 以 后, 在 主 数 据 库 服 务 器 一 端 的 消 息 日 志 文 件 中 应 出 现 以 下 信 息:
DR: Primary server operational
---- 在 从 数 据 库 服 务 器 一 端 的 消 息 日 志 文 件 中 应 出 现 以 下 信 息:
DR: Secondary server operational
---- 注 意: 如 果 使 用ontape 实 用 程 序 在 从 数 据 库 服 务 器 上 进 行 恢 复 时, 不 要 使用ontape -r。 而 应 通 过 使 用-l 和-p 选 项 分 别 进 行 逻 辑 恢 复 和 物 理 恢 复。 即 用ontape -p 进 行 物 理 恢 复。 用ontape -l 进 行 逻 辑 恢 复。
---- 六、 如 何 使 客 户 端 程 序 重 定 向 至 新 的 数 据 复 制 服 务 器
---- 在 启 动 客 户 应 用 程 序 之 前, 设 置DBPATH 依 此 指 向 主 服 务 器 和 从 服 务 器。 客 户 应用 程 序 将 自 动 按 照DBPATH 中 指 定 的 顺 序 检 查 被 列 出 的 服 务 器 是 否 包 含 目 标 数 据 库,如 果 当 前 的 服 务 器 不 可 到 达, 那 么 它 将 检 查 下 一 个 服 务 器。 由 于DBPATH 的 顺 序 十 分 重要, 所 以 要 把 希 望 访 问 的 服 务 器 放 在 前 面。 例 如, 通 常 要 访 问 的 主 服 务 器 为ny_soc,则DBPATH 应 设 为:
export DBPATH=//ny_soc://lond_soc
---- 如 果 你 的 客 户 应 用 程 序 是 只 读 的, 那 么 你 也 许 想 访 问 从 服 务 器, 则DBPATH 应 设 为:
export DBPATH=//lond_soc://ny_soc
---- 这 种 方 法 只 有 在 客 户 应 用 程 序 使 用CONNECT 语 句 时 才 起 作 用。 如 果 客 户 应 用 程序 使 用 的 是DATABASE 语 句 与 服 务 器 建 立 联 接, 那 么 当 服 务 器 故 障 时, 客 户 应 用 程 序 就会 失 败。