Microsoft Word - 高级复制 - Advanced Replication初步研究.doc
|
|
|
- 链惠 农
- 9 years ago
- Views:
Transcription
1 关 于 Advanced Replication 的 初 步 研 究 Author:Kamus, yangtingkun, eygle Date:2004 年 3 月 一 概 述...1 二 MR 的 概 念 和 构 架...3 三 冲 突 解 决 方 案 的 概 念 和 构 架...9 四 冲 突 解 决 机 制 的 研 究...10 五 解 决 数 据 冲 突 -dbms_rectifier_diff 包...18 六 MVR 的 概 念 和 构 架...22 附 录 一 多 主 体 复 制 站 点 的 配 置 步 骤...34 附 录 二 物 化 视 图 复 制 站 点 的 配 置 步 骤...38 附 录 三 一 些 高 级 复 制 相 关 的 包 使 用 方 法...46 附 录 四 FAQ...50 一 概 述 1. Replication 使 用 分 布 式 数 据 库 技 术 在 多 个 站 点 之 间 共 享 数 据 2. Replicated Database 和 Distributed Database 并 不 一 样, 在 分 布 式 数 据 库 系 统 中 数 据 在 多 个 站 点 同 时 有 效, 但 是 一 个 表 只 会 存 在 于 一 个 站 点 中, 而 对 于 Replication 来 说 相 同 的 数 据 将 同 时 存 在 于 多 个 站 点 中 3. 使 用 replication 的 原 因 : 1) Availability: 也 就 是 提 供 了 优 秀 的 failover 保 护 2) Performance: 由 于 有 多 个 server, 所 以 可 以 将 用 户 业 务 分 布 在 不 同 的 server 上 3) Disconnected computing: 实 体 化 视 图 允 许 用 户 在 和 master 断 开 后 使 用 数 据 库 的 子 集, 在 重 新 连 接 上 master 之 后 再 进 行 两 者 的 同 步 4) Network load reduction: 由 于 有 多 个 server, 所 以 可 以 减 少 master 的 网 络 请 求 5) Mass deployment: 通 过 变 量 产 生 自 定 义 的 实 体 化 视 图 以 满 足 多 种 需 求 4. 在 不 同 的 Oracle 发 行 版 本 之 间 以 及 不 同 操 作 系 统 的 Oracle 之 间 都 可 以 使 用 Advanced
2 Replication 5. Replication 中 的 几 个 概 念 : 1) replication object: 复 制 对 象, 指 需 要 作 复 制 的 对 象 (object), 包 括 表, 索 引, 存 储 过 程 等 等 复 制 对 象 的 更 新 遵 循 事 务 一 致 性 规 则 (transactionally consistent manner) 2) replication groups: 复 制 组, 是 复 制 对 象 (replication object) 的 集 合 称 为 group, oracle 以 replication group 的 形 式 来 管 理 复 制 一 个 组 可 以 包 含 多 个 模 式 的 object, 一 个 模 式 也 可 以 有 多 个 组 中 的 object, 但 是 每 个 replication object 都 只 能 属 于 一 个 replication group 3) replication sites: 复 制 站 点, 包 含 两 种 类 型, 主 体 站 点 (master sites) 和 实 体 化 视 图 站 点 (materialized view sites) 一 个 site 可 以 担 任 一 个 replication group 中 的 mater site 同 时 又 担 任 另 外 一 个 replication group 中 的 materialized view site, 注 意 必 须 是 另 外 一 个 组, 而 不 能 是 同 一 个 replication group 4) scheduled links: 一 个 数 据 库 链 接 (database link), 包 含 一 个 由 用 户 定 义 的 计 划, 来 将 需 要 更 新 的 事 务 推 到 其 它 的 master sites, 当 创 建 scheduled link 的 时 候,oracle 将 在 本 地 任 务 队 列 中 创 建 一 个 任 务 5) master definition site: 主 体 定 义 站 点, 大 部 分 的 高 级 复 制 配 置 都 需 要 在 一 个 站 点 上 作, 这 个 站 点 就 是 maserdef site 6. Replication 环 境 的 几 种 类 型 1) Multimaster Replication 2) Materialized View Replication( 也 可 以 称 为 是 Single Master Replication) 3) Multimaster and Materialized View Hybrid Configurations Multimaster Replication 和 Materialized View Replication 的 区 别 在 于 : 前 者 必 须 是 全 表 复 制 而 后 者 可 以 是 master 表 的 一 部 分 前 者 允 许 在 每 一 个 transaction 之 后 都 进 行 复 制, 而 后 者 是 属 于 批 处 理 复 制 两 者 都 使 用 scheduled links 进 行 数 据 同 步 操 作 Materialized View Replication 中 的 materialized view 可 能 有 以 下 几 种 类 型 : 1) Read-Only Materialized Views: 只 读 的 实 体 化 视 图 2) Updatable Materialized Views: 允 许 更 新, 同 时 允 许 将 更 新 复 制 到 master site 3) Writeable Materialized Views: 允 许 更 新, 但 是 每 次 refresh 的 时 候, 更 新 都 会 丢 失 7. 介 绍 Multimaster Replication 中 的 复 制 方 式 1) Asynchronous replication 在 一 个 master 上 发 生 的 变 化 将 在 推 后 的 时 间 内 更 新 到 其 他 的 master 上 2) Synchronous replication 在 一 个 master 上 发 生 的 变 化 将 立 刻 更 新 到 其 他 的 master 上 3) Procedural replication 必 须 给 每 个 site 上 的 包 都 生 成 一 个 wrapper, 所 有 的 数 据 变 化 应 该 通 过 包 中 的 存 储 过 程 完 成, 当 某 个 master 上 的 procedure 被 调 用,wapper 将 保 证 其 他 site 中 的 存 储 过 程 也 被 调 用 ( 同 步 或 者 不 同 步 ) 将 大 量 的 数 据 操 作 放 到 一 个 procedure 中,
3 然 后 对 于 procedure 的 调 用 将 被 同 步, 用 处 在 于 在 于 有 大 数 据 量 操 作 的 时 候 可 以 减 少 网 络 负 载 二 MR 的 概 念 和 构 架 MR 是 Master Replication, 也 就 是 主 体 站 点 复 制 的 概 念, 是 高 级 复 制 区 别 于 普 通 复 制 的 一 个 重 要 的 功 能 本 章 节 对 于 MR 中 出 现 的 种 种 概 念 作 详 细 解 释 MR 分 为 single master 和 multi master 两 种 single master 指 一 个 master site 支 持 多 个 materialized view site, 而 multi master 则 包 含 多 个 master site Multimaster Replication 也 被 称 为 peer-to-peer 或 者 n-way replication, 任 何 一 个 master 上 发 生 的 变 化 都 将 被 送 到 其 它 的 master 上 1. 为 什 么 使 用 Multimaster Replication Failover: 当 主 数 据 库 发 生 问 题 的 时 候, 可 以 通 过 配 置 Oracle Net 来 实 现 automatic connect-time failover, 需 要 将 客 户 端 的 tnsnames.ora 中 的 FAILOVER_MODE 参 数 设 置 为 ON 同 时 在 主 数 据 库 正 常 的 时 候, 其 它 的 master site 仍 然 可 以 作 为 一 个 具 有 完 全 功 能 的 数 据 库 来 支 持 其 它 业 务, 比 如 报 表 等 Load Balancing:: 提 供 读 动 态 平 衡 以 及 更 本 地 化 的 数 据 存 取 2. 比 较 RAC(Oracle Real Application Clusters) 和 Advanced Replication Load Balancing:: 高 级 复 制 提 供 读 动 态 平 衡, 而 RAC 则 提 供 读 写 动 态 平 衡 因 为 每 一 次 写 操 作 都 会 在 所 有 的 replication site 上 体 现, 所 以 高 级 复 制 不 能 提 供 写 动 态 平 衡 Survivability:: 高 级 复 制 提 供 更 加 强 有 力 的 灾 难 恢 复 功 能, 因 为 高 级 复 制 环 境 中 的 各 个 site 可 以 位 于 物 理 上 的 不 同 地 点, 而 RAC 因 为 使 用 的 是 磁 盘 阵 列 或 其 他 类 型 的 并 行 系 统, 所 以 通 常 在 同 一 个 物 理 地 点 Interoperability: 高 级 复 制 可 以 在 不 同 平 台 和 操 作 系 统 的 Oracle 之 间 实 现, 而 RAC 环 境 则 必 须 运 行 在 相 同 的 平 台 上 3. Multimaster Replication Process Asynchronous Replication: 说 明 : 使 用 非 同 步 复 制 能 够 减 少 网 络 资 源 和 硬 件 资 源 的 消 耗, 但 是 不 同 的 master sites 之 间 会 有 一 段 时 间 不 同 步, 并 且 可 能 会 造 成 数 据 冲 突 以 下 描 述 非 同 步 复 制 的 过 程 : 1) 用 户 执 行 DML 操 作 或 者 执 行 replicated procedure 的 wrapper, 当 一 个 table 被 设 定 为 需 要 复 制, 那 么 对 于 此 表 的 任 何 DML 操 作 都 会 被 捕 获 并 且 复 制 到 其 他 的 master site 对 于 每 一 行 被 插 入, 更 新 或 者 删 除 的 数 据 都 将 由 一 个 内 部 触 发 器 来 创 建 一 个 deferred remote procedure call (RPC) 并 且 放 在 deferred transaction queue 中, 如 果 一 个 存 储 过 程 被 设 置 为 需 要 复 制 并 且 它 的 wrapper 被 执 行, 则 这 个 procedure call 被 放 置 在 transaction queue 中 由 于 内 部 触 发 器 是 由 Oracle 本 身 内 部 维 护 的, 所 以 可 以 以 最 小 的 系 统 资 源 消 耗 来 很 快 地 获 取 需 要 复 制 的 对 象 的 变 化
4 2) deferred transaction queue 中 保 存 着 所 有 的 deferred RPCs 每 个 site 都 有 一 个 事 务 队 列, 这 个 队 列 可 以 被 多 个 replication group 共 用 3) 在 指 定 的 间 隔 之 后 或 者 被 手 工 调 用, 事 务 将 被 传 递 到 其 他 的 site, 每 个 site 都 可 能 有 不 同 的 间 隔 4) 事 务 在 这 些 site 上 被 应 用, 如 果 出 错 该 事 务 将 被 放 置 到 一 个 错 误 队 列 中, 以 备 DBA 检 查 处 理, 如 果 出 现 数 据 冲 突, 冲 突 解 决 方 法 将 被 调 用, 如 果 冲 突 无 法 解 决 那 么 将 被 记 录 在 错 误 队 列 中 5) 当 事 务 在 所 有 的 remote master sites 上 被 成 功 执 行 之 后, 并 不 会 从 源 site 的 事 务 队 列 中 立 刻 删 除, 删 除 工 作 将 由 另 外 的 purge job 来 执 行, 此 job 的 执 行 间 隔 可 以 由 用 户 来 定 义 Synchronous Replication: 说 明 : 同 步 复 制 始 终 在 同 一 个 transaction 中 完 成, 如 果 整 个 环 境 中 的 任 何 一 个 site 没 有 成 功 执 行 事 务, 那 么 整 个 transaction 将 被 回 滚, 包 括 源 site 这 就 保 证 了 数 据 一 致 性 以 下 描 述 同 步 复 制 的 过 程 : 1) 用 户 执 行 DML 操 作 或 者 执 行 replicated procedure 的 wrapper, 操 作 被 内 部 触 发 器 立 刻 捕 获 2) 事 务 被 传 递 到 其 他 site 并 且 立 刻 执 行, 任 何 一 个 site 出 错, 就 回 滚 整 个 事 务 4. 冲 突 解 决 方 案 的 概 念 冲 突 的 类 型 : 更 新 冲 突, 唯 一 性 冲 突, 删 除 冲 突 当 发 生 冲 突 的 时 候, 冲 突 解 决 方 法 将 被 调 用 以 解 决 冲 突, 如 果 无 法 解 决, 则 被 记 录 到 目 标 站 点 的 错 误 队 列 中 记 录 到 错 误 队 列 中 的 冲 突 只 能 由 数 据 库 管 理 员 手 动 解 决 为 了 实 现 冲 突 解 决 方 案, 可 能 会 需 要 修 改 表 结 构, 比 如 如 果 使 用 最 新 时 间 戳 的 解 决 方 案, 那 么 就 应 该 在 表 中 添 加 一 个 timestamp 列 5. 配 置 高 级 复 制 的 工 具 1) 图 形 界 面 :Oracle Enterprise Manager 提 供 了 一 个 友 好 的 GUI 界 面 用 以 配 置 高 级 复 制 2) 命 令 行 方 式 :Oracle 提 供 了 一 套 replication management application programming interface (API) 来 支 持 用 户 编 写 自 定 义 的 脚 本 用 以 配 置 高 级 复 制, 这 些 API 是 一 系 列 的 PLSQL packages 实 际 上 GUI 界 面 的 高 级 配 置 工 具 也 是 调 用 这 些 API 来 完 成 配 置 的 注 意 点 : 在 高 级 复 制 环 境 中 的 对 于 需 要 复 制 的 对 象 作 任 何 DDL 操 作, 都 应 该 使 用 高 级 复 制 配 置 工 具 来 作, 比 如 利 用 DBMS_REPCAT 包 中 的 相 应 存 储 过 程 在 有 些 场 合 下 也 可 以 用 导 出 导 入 (EXPIMP) 来 创 建 复 制 对 象 在 SQL*PLUS 中 直 接 执 行 的 任 何 DDL 操 作 都 不 会 被 复 制 到 其 它 的 site 上 6. 高 级 复 制 中 的 几 个 角 色 Replication Administrator: 默 认 名 称 是 repadmin, 也 可 以 修 改 Propagator: 一 个 高 级 复 制 环 境 中 可 能 有 多 个 RA 来 管 理 不 同 的 schema, 但 是 只 能 有 一 个 propagator 将 延 迟 处 理 事 务 队 列 中 的 事 务 传 递 到 目 标 站 点 Receiver : 负 责 接 收 和 处 理 从 propagator 处 传 来 的 延 迟 处 理 事 务 可 以 通 过
5 DBMS_REPCAT_ADMIN 包 中 REGISTER_USER_REPGROUP 存 储 过 程 来 注 册 一 个 receiver 7. Database Links 数 据 库 链 接 在 高 级 复 制 环 境 中 提 供 了 数 据 传 送 的 通 道, 在 一 个 MMR 环 境 中, 如 果 有 N 个 Master Site, 就 会 有 N-1 个 数 据 库 链 接 在 MVR 环 境 中, 则 只 需 要 从 实 体 化 视 图 站 点 上 到 主 站 点 的 数 据 库 链 接 如 果 使 用 设 置 向 导 来 创 建 dblink, 则 会 在 USING 后 面 使 用 连 接 描 述 字 串, 而 不 是 连 接 服 务 名, 这 样 在 对 方 数 据 库 发 生 变 化 的 时 候, 就 必 须 删 除 重 建 现 有 的 dblink, 所 以 我 们 应 该 手 动 设 定 dnlink, 从 而 在 USING 后 面 使 用 连 接 服 务 名 这 样 即 使 对 方 数 据 库 改 变, 我 们 也 只 需 要 修 改 tnsnames.ora 中 的 配 置 即 可, 而 不 需 要 重 建 dblink 8. 可 以 进 行 复 制 的 对 象 Tables 当 一 个 对 象 被 复 制 到 目 标 站 点 上 时, 复 制 支 持 不 会 自 动 生 成 利 用 这 个 特 点 可 以 快 速 地 发 布 一 个 标 准 的 数 据 库 环 境 到 另 外 的 站 点 上 Indexes 作 为 约 束 的 索 引, 当 表 在 主 站 点 上 被 创 建 的 时 候, 会 自 动 在 复 制 站 点 上 创 建, 但 是 对 于 提 高 性 能 的 索 引 则 不 会 被 自 动 创 建 而 必 须 手 动 指 定 对 于 索 引 被 复 制 到 目 标 站 点 之 后, 等 同 于 本 地 的 索 引, 不 需 要 再 添 加 复 制 支 持 Packages and Package Bodies 存 储 过 程 中 的 所 有 参 数 必 须 是 IN 的,OUT 和 INOUT 不 被 支 持 存 储 过 程 和 函 数 也 必 须 定 义 在 包 中, 单 独 的 存 储 过 程 和 函 数 无 法 进 行 复 制 Procedures and Functions 虽 然 单 独 的 存 储 过 程 和 函 数 无 法 进 行 复 制, 但 是 仍 然 可 以 在 高 级 复 制 环 境 中 利 用 复 制 来 将 单 独 的 存 储 过 程 和 函 数 发 布 到 远 程 的 站 点 上, 就 像 在 远 程 站 点 本 地 创 建 的 一 样 User-Defined Types and Type Bodies 所 有 的 用 户 定 义 类 型 在 所 有 的 复 制 站 点 上 都 必 须 存 在 而 且 必 须 完 全 相 同 Triggers 一 个 比 较 重 要 的 应 用 就 是 在 DML 操 作 的 时 候 在 表 的 timestmap 列 中 插 入 当 前 的 系 统 时 间 为 了 防 止 触 发 器 被 重 复 调 用, 必 须 要 使 用 API 来 判 断 DML 操 作 是 在 本 地 发 起 的 还 是 通 过 高 级 复 制 传 递 过 来 的 如 下 例 : CREATE OR REPLACE TRIGGER hr.insert_time BEFORE INSERT OR UPDATE ON hr.employees FOR EACH ROW IF DBMS_REPUTIL.FROM_REMOTE = FALSE THEN :NEW.TIMESTAMP := SYSDATE; END IF; Views, Object Views, and Synonyms 只 是 简 单 地 复 制 到 其 它 站 点, 不 会 产 生 任 何 内 部 触 发 器 或 者 包 来 监 控 这 些 被 复 制 的 对 象 的 改 变 由 于 是 复 制 对 象, 所 以 仍 然 可 以 使 用 高 级 复 制 工 具 或 者 API 来 进 行 修 改 和 删 除 Indextypes 必 须 手 工 指 定 复 制 可 以 用 高 级 复 制 工 具 或 者 CREATE_MASTER_REPOBJECT 存 储 过 程
6 User-Defined Operators 复 制 情 况 跟 视 图, 同 义 词 等 相 同, 只 是 简 单 的 复 制 而 已 注 意 : 高 级 复 制 不 支 持 sequence 如 果 想 实 现 高 级 复 制 环 境 中 的 序 列 唯 一 性, 可 以 有 以 下 几 种 方 法 : 1. 使 用 SELECT SYS_GUID() OID FROM DUAL; 这 样 将 会 产 生 全 球 唯 一 的 GUID 2. 在 序 列 前 面 添 加 站 点 名 称, 比 如 唯 一 的 GLOBAL_NAME 3. 在 各 个 复 制 站 点 规 划 不 会 重 复 的 序 列, 比 如 站 点 A 的 序 列 从 1 开 始, 以 10 递 增, 站 点 B 的 序 列 从 3 开 始, 以 10 递 增 9. 高 级 复 制 环 境 中 的 队 列 Oracle 利 用 Internal Triggers 来 捕 获 对 象 变 化, 并 且 生 成 RPCs(remote procedure calls), RPCs 中 包 含 目 标 站 点 上 的 internal procedure 的 执 行 命 令 以 及 需 要 复 制 的 数 据,RPCs 存 储 在 deferred transaction queue 中, 当 一 个 RPC 到 达 目 标 站 点, 该 站 点 上 相 应 的 internal procedure 将 被 运 行 以 应 用 RPC 来 完 成 复 制 操 作 高 级 复 制 环 境 中 的 队 列 包 含 Deferred Transaction Queue,Error Queue 和 Job Queue Job Queue 中 包 含 的 作 业 有 三 种 : 将 延 迟 事 务 推 到 远 程 主 站 点 的 作 业, 将 已 经 应 用 过 的 事 务 从 延 迟 事 务 处 理 队 列 中 删 除 的 作 业, 刷 新 实 体 化 视 图 更 新 组 的 作 业 10. 管 理 请 求 (Administrative Request)- 管 理 机 制 什 么 是 管 理 请 求? 在 DBA_REPCATLOG 视 图 中 查 看 Administrative Requests 的 状 态 当 管 理 请 求 在 所 有 的 主 站 点 上 成 功 执 行 以 后, 管 理 请 求 将 从 所 有 的 主 站 点 包 括 主 体 定 义 站 点 中 的 管 理 请 求 队 列 中, 也 就 是 DBA_REPCATLOG 视 图 中 删 除 DBA_REPCATLOG 视 图 中 管 理 请 求 的 几 种 状 态 : 1) READY: 表 示 请 求 准 备 被 执 行 如 果 长 时 间 处 于 该 状 态, 可 以 手 动 执 行 DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN 存 储 过 程 来 执 行 请 求 2) AWAIT_CALLBACK: 这 种 状 态 只 会 出 现 在 主 体 定 义 站 点 上, 表 示 正 在 等 待 其 它 的 主 站 点 执 行 请 求 并 且 返 回 结 果 3) ERROR: 表 示 请 求 执 行 错 误 4) DO_CALLBACK: 这 种 状 态 只 会 出 现 在 非 主 体 定 义 站 点 上, 表 示 要 通 知 主 体 定 义 站 点 请 求 执 行 的 结 果 11. 主 体 组 (Master Group)- 组 织 机 制 在 高 级 复 制 环 境 中,Oracle 用 复 制 组 来 管 理 复 制 对 象 而 在 多 主 体 复 制 (multimaster replication) 环 境 中 复 制 组 就 被 称 为 主 体 组 (Master Group) 在 不 同 的 复 制 站 点 上 的 相 应 主 体 组 中 必 须 包 含 相 同 的 复 制 对 象 12. Column Groups - 组 织 机 制 Column Group 是 在 冲 突 解 决 方 案 中 扮 演 角 色 的 多 个 字 段 的 集 合 如 果 组 中 的 某 个 字 段 引 发 了 冲 突, 那 么 其 余 的 字 段 可 以 用 来 作 解 决 这 个 冲 突 打 个 比 方, 如 果 一 个 表 的 column group 中 包 含 price 和 timestamp 字 段, 那 么 当 启 用 时 间 戳 冲 突 解 决 方 案 (timestamp conflict resolution routine) 时,timestamp 字 段 就 可 以 用 来 解 决 price 字 段 中 发 生 的 冲 突
7 可 能 刚 开 始 的 时 候 会 想 把 表 中 的 所 有 字 段 都 放 入 一 个 Column Group 中, 这 样 确 实 使 配 置 和 管 理 都 更 简 单 了 些, 但 是 却 会 降 低 复 制 的 性 能 并 且 可 能 会 引 发 潜 在 的 数 据 冲 突 在 后 面 的 性 能 机 制 部 分, 大 家 将 会 看 到 如 果 一 个 column group 中 发 生 了 冲 突, 那 么 oracle 的 最 小 化 通 信 功 能 (minimum communication feature) 将 不 会 从 其 它 的 column group 中 传 递 来 数 据 所 以 将 所 有 的 字 段 全 部 放 入 一 个 column group 将 减 弱 最 小 化 通 信 功 能 带 来 的 好 处, 除 非 使 用 了 DBMS_REPCAT 包 中 的 SEND_OLD_VALUES 和 COMPARE_OLD_VALUES 存 储 过 程 在 后 面 的 冲 突 解 决 方 案 的 概 念 和 体 系 结 构 章 节 中 将 会 有 更 详 细 的 描 述 13. 传 播 类 型 - 传 播 机 制 异 步 数 据 复 制 通 常 也 被 称 为 :store-and-forward data replication 同 步 数 据 复 制 通 常 也 被 称 为 :real-time data replication 由 于 同 步 复 制 采 取 的 锁 机 制, 所 以 当 同 时 更 新 同 一 行 数 据 时, 会 产 生 死 锁 的 现 象 当 同 步 更 新 一 个 复 制 表 时,Oracle 首 先 锁 住 本 地 行, 然 后 使 用 一 个 AFTER ROW 触 发 器 来 锁 住 远 端 的 行 当 事 务 在 所 有 的 站 点 都 提 交 之 后,Oracle 才 会 解 锁 同 步 数 据 复 制 极 为 依 赖 系 统 和 网 络 的 可 用 性, 因 为 只 要 当 复 制 环 境 中 的 所 有 站 点 都 可 用 时, 事 务 才 能 正 常 进 行 混 合 模 式 的 数 据 复 制 : 1) 假 设 创 建 了 A 是 masterdef site, 然 后 添 加 了 B 为 同 步 数 据 复 制, 再 添 加 C 为 非 同 步 复 制, 那 么 此 时 AB 之 间 是 同 步,AC 和 BC 之 间 都 是 非 同 步 2) 假 设 创 建 了 A 是 masterdef site, 然 后 添 加 了 C 为 非 同 步 数 据 复 制, 再 添 加 B 为 同 步 复 制, 那 么 此 时 AB 和 BC 之 间 是 同 步,AC 之 间 是 非 同 步 14. Initiating 方 法 - 展 开 机 制 当 使 用 同 步 复 制 的 时 候,DML 传 播 被 立 刻 处 理 并 且 被 自 动 展 开 如 果 是 使 用 异 步 复 制, 那 么 可 以 用 下 面 的 方 法 传 播 延 迟 事 务 : 计 划 作 业 : 大 部 分 场 合, 都 是 利 用 计 划 作 业 在 指 定 的 时 间 间 隔 后 自 动 传 播 延 迟 事 务 手 动 传 播 : 如 果 不 想 等 待 计 划 作 业 的 自 动 传 播, 也 可 以 利 用 存 储 过 程 或 者 复 制 管 理 工 具 来 手 动 传 播 改 动 15. 并 行 传 播 (Parallel Propagation) - 性 能 机 制 16. 最 小 化 通 信 (Minimum Communication) - 性 能 机 制 17. 延 迟 秒 数 (Delay Seconds) - 性 能 机 制 上 面 三 个 参 数 (15,16,17 值 得 好 好 研 究 并 且 进 行 调 整, 以 后 会 补 齐 这 部 分 内 容 ) 18. 复 制 保 护 机 制 : 在 多 主 体 复 制 环 境 中,Oracle 将 保 证 就 算 发 生 错 误 的 时 候, 事 务 传 播 也 不 会 丢 失, 同 样 同 一 个 事 务 也 不 可 能 传 播 两 次 正 确 的 传 播 并 不 以 为 着 延 迟 事 务 在 远 程 站 点 就 正 确 执 行 了, 可 能 因 为 无 法 解 决 的 冲 突 或 者 说 远 程 站 点 磁 盘 空 间 不 足 等 原 因 延 迟 事 务 执 行 失 败, 那 么 这 样 的 错 误 将 会 记 录 在 远 程 站 点 的 错 误 队 列 中
8 19. 数 据 传 播 的 依 赖 性 维 护 非 并 行 传 播 中,Oracle 按 照 本 地 站 点 的 事 务 commit 顺 序 来 在 远 程 站 点 应 用 事 务 而 并 行 传 播 中,Oracle 则 会 记 录 最 新 事 务 产 生 的 SCN, 如 果 存 在 事 务 之 间 的 依 赖 性, 那 么 Oracle 将 先 在 远 程 站 点 应 用 比 这 个 SCN 小 或 者 等 于 这 个 SCN 的 事 务, 然 后 再 应 用 这 个 最 新 的 事 务, 这 是 一 个 非 并 行 的 应 用, 只 有 当 不 存 在 事 务 依 赖 性 的 时 候, 才 会 真 正 利 用 并 行 来 应 用 延 迟 事 务 记 录 SCN 有 两 种 方 式, 一 种 是 数 据 块 级 别 的, 一 种 是 行 级 别 的 当 创 建 表 的 时 候, 如 果 使 用 了 : NOROWDEPENDENCIES, 这 是 默 认 属 性, 那 么 Oracle 将 会 以 数 据 块 级 别 方 式 来 记 录 SCN 这 样 存 储 在 同 一 个 数 据 块 中 的 多 行 记 录 都 只 会 有 一 个 最 新 的 SCN, 旧 的 会 被 新 生 成 的 覆 盖 ROWDEPENDENCIES, 那 么 将 对 表 中 的 每 一 行 都 记 录 SCN 在 同 一 个 数 据 块 中 的 多 行 记 录 将 分 别 保 留 自 己 的 SCN, 这 样 每 一 行 记 录 都 需 要 额 外 的 6 个 字 节 的 存 储 空 间 但 是 这 将 提 高 并 行 传 播 时 应 用 延 迟 事 务 的 效 率 ( 使 用 这 个 特 性, 要 求 数 据 库 的 初 始 化 参 数 中 COMPATIBLE=9.0.1 或 者 更 高 ) 可 以 使 用 以 下 SQL 来 检 查 那 些 表 启 用 了 这 个 特 性 : SQL> SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE DEPENDENCIES = 'ENABLED'; 如 果 没 有 使 用 ROWDEPENDENCIES, 那 么 我 们 可 以 设 法 让 事 务 依 赖 性 最 小, 这 样 来 达 到 提 高 复 制 环 境 应 用 效 率 的 目 的 比 如 我 们 可 以 创 建 多 个 freelist, 这 样 可 以 在 大 量 insert 的 时 候 将 不 同 事 务 更 新 的 数 据 放 置 到 不 同 的 数 据 块 中 另 外 在 程 序 设 计 的 时 候, 我 们 也 应 该 尽 量 避 免 大 量 的 事 务 同 时 更 新 同 一 张 小 表 的 现 象 出 现, 比 如 说 有 些 应 用 会 设 计 一 张 小 表 来 模 拟 序 列 (Sequence), 用 以 生 成 唯 一 的 主 键 这 样 就 会 迫 使 多 个 事 务 同 时 更 新 同 一 个 数 据 块 对 于 这 种 情 况, 我 们 应 该 改 为 使 用 Sequence 并 且 缓 存 Sequence 的 生 成 20. 冲 突 解 决 机 制 为 了 正 确 地 侦 测 复 制 冲 突,Oracle 必 须 能 够 找 到 在 不 同 的 站 点 之 间 对 于 相 关 行 的 唯 一 标 示 这 就 要 求 在 复 制 环 境 中, 每 个 表 都 必 须 有 主 键, 如 果 没 有 主 键, 那 么 也 必 须 指 定 多 个 字 段 的 组 合 来 作 为 唯 一 标 示 Oracle 自 己 提 供 了 以 下 几 种 冲 突 解 决 方 案 : 1) Latest and Earliest Timestamp 2) Overwrite and Discard 3) Maximum and Minimum 4) Additive and Average 5) Timestamp 6) Priority Group 7) Site Priority 如 果 上 述 Oracle 提 供 的 解 决 方 案 无 法 满 足 应 用 的 需 求, 那 么 也 可 以 利 用 PLSQL 来 编 写 自 定 义 的 冲 突 解 决 方 案 下 面 章 节 我 们 将 进 一 步 研 究 冲 突 解 决 方 案
9 三 冲 突 解 决 方 案 的 概 念 和 构 架 基 本 上 我 们 在 设 计 系 统 的 时 候, 应 该 尽 量 避 免 产 生 冲 突, 但 是 如 果 必 须 允 许 在 多 个 主 体 站 点 同 时 对 复 制 对 象 的 更 改, 那 么 我 们 就 一 定 要 考 虑 冲 突 解 决 方 案 对 于 普 通 的 插 入 ( 主 键 冲 突 ), 更 新, 删 除 产 生 的 冲 突 很 容 易 理 解, 但 是 还 有 一 些 其 它 的 情 况 也 会 产 生 冲 突, 比 如 在 3 个 或 者 3 个 以 上 的 复 制 主 站 点 环 境 中, 可 能 会 产 生 下 面 例 子 中 的 这 种 Ordering Conflicts, 其 实 也 是 更 新 冲 突 的 一 个 例 子 这 个 复 制 环 境 中 有 A,B,C 三 个 主 站 点, 每 个 站 点 都 设 置 了 优 先 级,A 是 30,B 是 25,C 是 10, 而 x 则 是 被 分 配 了 site-priority 冲 突 解 决 方 案 的 column group 中 的 一 列 Site A Site B Site C Time Action 1 所 有 的 主 体 站 点 上 x = 站 点 A 更 新 x = 站 点 C 由 于 故 障 宕 机 了, 或 者 网 络 出 现 故 障. 5 2 down 4 站 点 A 将 更 新 推 到 站 点 B. 站 点 A 和 站 点 B 上 x = down 站 点 C 仍 然 不 可 用. 这 个 更 新 事 务 仍 然 保 留 在 站 点 A 的 队 列 中. 5 站 点 C 修 复 了, 此 时 站 点 C 上 x = 2. 而 站 点 A 和 站 点 B 上 x = 站 点 B 将 x = 5 更 新 为 x = 站 点 B 将 更 新 推 到 站 点 A. 站 点 A 和 站 点 B 上 x = 7. 站 点 C 上 x = 2. 8 站 点 B 将 更 新 推 到 站 点 C. 站 点 C 认 为 旧 值 x = 2; 站 点 B 推 过 去 的 旧 值 x = 5. Oracle 检 测 到 冲 突, 然 后 应 用 站 点 B 上 的 更 新 来 解 决 冲 突 因 为 站 点 B 上 设 置 了 优 先 级 25 比 站 点 C 上 设 置 的 优 先 级 10 要 高. 所 有 站 点 上 x = 站 点 A 将 延 迟 事 务 (x = 5) 推 到 站 点 C. Oracle 检 测 到 冲 突, 因 为 站 点 C 上 的 当 前 值 (x = 7) 和 站 点 A 上 的 旧 值 (x = 2) 不 符 合. 站 点 A 比 站 点 C 有 更 高 的 优 先 级 (30). Oracle 用 这 个 过 时 的 更 新 解 决 冲 突, 这 样 站 点 C 上 的 x = 5.
10 Site Site Site Time Action A B C 因 为 这 样 的 ordering conflict, 整 个 复 制 环 境 就 不 再 一 致 了. 四 冲 突 解 决 机 制 的 研 究 实 际 上 Oracle 的 dbms_rectifier_diff.differences 过 程, 内 部 操 作 就 是 执 行 连 个 minus 操 作 把 两 边 的 差 异 记 录 下 来, 作 为 冲 突 解 决 的 数 据 这 部 分 后 台 操 作 可 以 通 过 跟 踪 Oracle 进 程 得 到 : SQL> alter session set events '10046 trace name context forever,level 12'; Session altered. Elapsed: 00:00:00.02 SQL> begin dbms_rectifier_diff.differences( 2 SNAME1 =>'HAWA', 3 ONAME1 =>'TEST', 4 REFERENCE_SITE =>'AVATAR.COOLYOUNG.COM.CN', 4 SNAME2 =>'HAWA', 6 ONAME2 =>'TEST', 7 COMPARISON_SITE =>'AUTHAA.COOLYOUNG.COM.CN', 8 WHERE_CLAUSE =>NULL, 9 COLUMN_LIST =>NULL, 10 MISSING_ROWS_SNAME =>'HAWA', 11 MISSING_ROWS_ONAME1 =>'MISSING_ROWS_TEST', 12 MISSING_ROWS_ONAME2 =>'MISSING_LOCATION_TEST', 13 MISSING_ROWS_SITE =>'AVATAR.COOLYOUNG.COM.CN', 14 MAX_MISSING =>500, 15 COMMIT_ROWS => ); 17 end; 18 PLSQL procedure successfully completed. Elapsed: 00:00:01.97 SQL> alter session set events '10046 trace name context off'; 从 跟 踪 文 件 中 我 们 可 以 清 晰 的 看 到 ( 注 意 你 所 定 义 的 所 有 参 数 在 此 都 会 有 所 体 现 ):
11 1. 首 先 是 一 个 正 向 Minus DECLARE row_count BINARY_INTEGER := 0; missing_rows BINARY_INTEGER := 0; arowid ROWID; CURSOR c IS SELECT "DATLOGONTIME", "NUMGENDER", "NUMSTATUS", "NUMUSERID", "VC2IP", "VC2USERNAME" FROM "HAWA"."TEST" MINUS SELECT "DATLOGONTIME", "NUMGENDER", "NUMSTATUS", "NUMUSERID", "VC2IP", "VC2USERNAME" FROM "HAWA"."TEST"@authaa.coolyoung.com.cn; FOR r IN c LOOP missing_rows := missing_rows + 1; IF missing_rows > 500 THEN COMMIT; EXIT; END IF; INSERT INTO "HAWA"."MISSING_ROWS_TEST" ("DATLOGONTIME", "NUMGENDER", "NUMSTATUS", "NUMUSERID", "VC2IP", "VC2USERNAME" ) VALUES (r."datlogontime", r."numgender", r."numstatus", r."numuserid", r."vc2ip", r."vc2username" ); SELECT ROWID INTO arowid FROM "HAWA"."MISSING_ROWS_TEST" WHERE ( datlogontime = r."datlogontime" OR (datlogontime IS NULL AND r."datlogontime" IS NULL) ) AND ( numgender = r."numgender" OR (numgender IS NULL AND r."numgender" IS NULL) ) AND ( numstatus = r."numstatus"
12 OR (numstatus IS NULL AND r."numstatus" IS NULL) ) AND (numuserid = r."numuserid") AND (vc2ip = r."vc2ip" OR (vc2ip IS NULL AND r."vc2ip" IS NULL)) AND ( vc2username = r."vc2username" OR (vc2username IS NULL AND r."vc2username" IS NULL) ); INSERT INTO "HAWA"."MISSING_LOCATION_TEST" (present, absent, r_id ) VALUES ('AVATAR.COOLYOUNG.COM.CN', 'AUTHAA.COOLYOUNG.COM.CN', arowid ); row_count := row_count + 1; IF row_count >= 100 THEN COMMIT; row_count := 0; END IF; END LOOP; COMMIT; 2. 其 次 是 一 个 反 向 Minus DECLARE row_count BINARY_INTEGER := 0; missing_rows BINARY_INTEGER := 0; arowid ROWID; CURSOR c IS SELECT "DATLOGONTIME", "NUMGENDER", "NUMSTATUS", "NUMUSERID", "VC2IP", "VC2USERNAME" FROM "HAWA"."TEST"@authaa.coolyoung.com.cn MINUS SELECT "DATLOGONTIME", "NUMGENDER", "NUMSTATUS", "NUMUSERID", "VC2IP", "VC2USERNAME" FROM "HAWA"."TEST"; FOR r IN c
13 LOOP missing_rows := missing_rows + 1; IF missing_rows > 500 THEN COMMIT; EXIT; END IF; INSERT INTO "HAWA"."MISSING_ROWS_TEST" ("DATLOGONTIME", "NUMGENDER", "NUMSTATUS", "NUMUSERID", "VC2IP", "VC2USERNAME" ) VALUES (r."datlogontime", r."numgender", r."numstatus", r."numuserid", r."vc2ip", r."vc2username" ); SELECT ROWID INTO arowid FROM "HAWA"."MISSING_ROWS_TEST" WHERE ( datlogontime = r."datlogontime" OR (datlogontime IS NULL AND r."datlogontime" IS NULL) ) AND ( numgender = r."numgender" OR (numgender IS NULL AND r."numgender" IS NULL) ) AND ( numstatus = r."numstatus" OR (numstatus IS NULL AND r."numstatus" IS NULL) ) AND (numuserid = r."numuserid") AND (vc2ip = r."vc2ip" OR (vc2ip IS NULL AND r."vc2ip" IS NULL)) AND ( vc2username = r."vc2username" OR (vc2username IS NULL AND r."vc2username" IS NULL) ); INSERT INTO "HAWA"."MISSING_LOCATION_TEST" (present, absent, r_id ) VALUES ('AUTHAA.COOLYOUNG.COM.CN', 'AVATAR.COOLYOUNG.COM.CN', arowid ); row_count := row_count + 1;
14 IF row_count >= 100 THEN COMMIT; row_count := 0; END IF; END LOOP; COMMIT; 经 过 这 两 个 步 骤 的 操 作,Oracle 定 位 了 冲 突 数 据 可 是 注 意, 如 果 在 解 决 这 个 问 题 时 你 没 有 挂 起 复 制,Oracle 得 到 的 数 据 可 能 是 存 在 问 题 的 而 且, 如 果 你 不 指 定 column list, 那 么 两 边 的 数 据 可 能 会 因 为 某 些 特 殊 字 段 ( 如 时 间 字 段 ) 的 特 殊 处 理 而 存 在 差 异 那 么 这 时 候 手 工 介 入 不 可 避 免 我 们 首 先 先 把 两 个 重 要 参 数 的 用 法 说 明 一 下 一 个 是 WHERE_CLAUSE, 另 外 一 个 是 COLUMN_LIST WHERE_CLAUSE 用 于 限 定 进 行 差 异 比 较 的 范 围, 这 可 以 极 大 的 缩 减 结 果 集 的 数 量, 使 用 索 引 加 快 访 问 速 度 等 比 如 我 这 里 使 用 NUMGENDER=1, 只 比 较 性 别 为 " 女 " 这 一 部 分 用 户 数 据 COLUMN_LIST 用 于 限 定 比 较 字 段, 如 果 你 能 通 过 某 个 字 段, 如 主 键 等 确 定 数 据 差 异, 那 么 你 完 全 可 以 只 比 较 单 个 字 段 而 且 显 然 可 以 轻 易 通 过 全 索 引 扫 描 来 完 成 比 较, 加 快 比 较 速 度 我 这 里 使 用 NUMUSERID, 用 户 ID 来 比 较 但 是 注 意, 这 样 的 比 较 结 果 中 将 只 包 含 NUMUSERID 信 息, 当 然 我 们 可 以 轻 易 通 过 NUMUSERID 和 原 表 的 比 较 补 全 MISSING_ROWS_TEST 表 的 信 息 begin dbms_rectifier_diff.differences( SNAME1 =>'HAWA', ONAME1 =>'TEST', REFERENCE_SITE =>'AVATAR.COOLYOUNG.COM.CN', SNAME2 =>'HAWA', ONAME2 =>'TEST', COMPARISON_SITE =>'AUTHAA.COOLYOUNG.COM.CN', WHERE_CLAUSE =>'NUMGENDER=1', COLUMN_LIST =>'NUMUSERID', MISSING_ROWS_SNAME =>'HAWA', MISSING_ROWS_ONAME1 =>'MISSING_ROWS_TEST',
15 MISSING_ROWS_ONAME2 =>'MISSING_LOCATION_TEST', MISSING_ROWS_SITE =>'AVATAR.COOLYOUNG.COM.CN', MAX_MISSING =>500, COMMIT_ROWS =>100 ); end; 这 段 代 码 供 参 考 Ok, 我 们 继 续 前 面 的 讨 论 我 们 提 到, 如 果 存 在 差 异, 通 常 需 要 手 工 介 入 清 楚 了 DIFFERENCES 的 原 理, 实 际 上 我 们 完 全 可 以 手 工 来 完 成 这 个 过 程 以 下 是 我 的 手 工 操 作 步 骤, 目 的 是 为 了 准 确 性 及 减 轻 数 据 库 压 力 : 1. 首 先 创 建 一 个 ID 差 异 表 这 个 表 不 是 必 须 的, 这 里 是 为 了 清 晰 SQL> create table hawa.prof as select NUMUSERID from hawa.hw_user where 1=0; Table created. Elapsed: 00:00: 根 据 主 键 找 到 差 异 记 录 注 意 这 里 取 决 于 你 的 数 据 库 产 生 差 异 的 原 因, 我 的 差 异 由 于 初 始 数 据 不 同 步, 即 A 全 包 含 B 并 且,A>B SQL> insert into hawa.prof 2 select * from 3 ( 4 select NUMUSERID from hawa.hw_userprofile 5 minus 6 select NUMUSERID from hawa.hw_userprofile@authaa) rows created. Elapsed: 00:00: 创 建 记 录 表 SQL> create table hawa.missing_rows_hw_userprofile
16 2 as 3 select * from hawa.hw_userprofile where 1=0; Table created. Elapsed: 00:00: 创 建 位 置 (Location) 表 注 意 这 里 Oracle 需 要 记 录 缺 失 方 向, 和 具 体 记 录 的 ROWID, 这 个 ROWID 来 自 missing_rows_hw_userprofile SQL> create table hawa.missing_loc_hw_userprofile ( 2 present VARCHAR2(128), 3 absent VARCHAR2(128), 4 r_id ROWID); Table created. Elapsed: 00:00: 根 据 差 异 信 息 查 询 到 完 整 信 息 SQL> insert into hawa.missing_rows_hw_userprofile 2 select * from hawa.hw_userprofile where NUMUSERID in 3 (select * from hawa.prof); 263 rows created. Elapsed: 00:00:00.06 SQL> commit; Commit complete. Elapsed: 00:00: 构 造 位 置 信 息 注 意 这 里 的 方 向 信 息 及 ROWID 信 息 SQL> insert into hawa.missing_loc_hw_userprofile 2 select 'AVATAR.COOLYOUNG.COM.CN','AUTHAA.COOLYOUNG.COM.CN',rowid from hawa.missing_rows_hw_userprofile; 263 rows created. Elapsed: 00:00:00.00 SQL> commit;
17 Commit complete. Elapsed: 00:00: 纠 正 数 据 冲 突 SQL> DBMS_RECTIFIER_DIFF.RECTIFY( 2 SNAME1 =>'HAWA', 3 ONAME1 =>'HW_USERPROFILE', 4 REFERENCE_SITE =>'AVATAR.COOLYOUNG.COM.CN', 5 SNAME2 =>'HAWA', 6 ONAME2 =>'HW_USERPROFILE', 7 COMPARISON_SITE =>'AUTHAA.COOLYOUNG.COM.CN', 8 COLUMN_LIST =>NULL, 9 MISSING_ROWS_SNAME =>'HAWA', 10 MISSING_ROWS_ONAME1 =>'MISSING_ROWS_HW_USERPROFILE', 11 MISSING_ROWS_ONAME2 =>'MISSING_LOC_HW_USERPROFILE', 12 MISSING_ROWS_SITE =>'AVATAR.COOLYOUNG.COM.CN', 13 COMMIT_ROWS => ); PLSQL procedure successfully completed. Elapsed: 00:00: 验 证 结 果 SQL> select count(*) from hawa.hw_userprofile; COUNT(*) Elapsed: 00:00:02.22 SQL> select count(*) from hawa.hw_userprofile@authaa; COUNT(*)
18 Elapsed: 00:00:00.21 SQL> select count(*) from hawa.hw_userprofile; COUNT(*) Elapsed: 00:00:00.59 SQL>select count(*) from COUNT(*) Elapsed: 00:00:00.20 SQL> select NUMUSERID from hawa.hw_userprofile 2 minus 3 select NUMUSERID from hawa.hw_userprofile@authaa ; no rows selected Elapsed: 00:00:23.51 SQL> 五 解 决 数 据 冲 突 -dbms_rectifier_diff 包 很 多 时 候 在 高 级 复 制 中 可 能 存 在 数 据 冲 突 和 不 一 致 现 象 Oracle 提 供 的 dbms_rectifier_diff 包 可 以 用 于 解 决 该 冲 突 以 下 通 过 实 例 来 说 明 一 下 该 Package 的 用 法 1. 创 建 复 制 组 及 复 制 对 象 SQL> execute dbms_repcat.create_master_repgroup('rep_tt'); PLSQL procedure successfully completed SQL> select gname,master,status from dba_repgroup; GNAME MASTER STATUS REP_TT Y QUIESCED
19 SQL> execute dbms_repcat.create_master_repobject(sname=>'hawa',oname=>'test', type=>'table',use_existing_object=>true,gname=>'rep_tt',copy_rows=>false); PLSQL procedure successfully completed SQL> SQL> execute dbms_repcat.generate_replication_support('hawa','test','table'); PLSQL procedure successfully completed SQL> select gname, master, status from dba_repgroup; GNAME MASTER STATUS REP_TT Y QUIESCED SQL> select * from dba_repobject; SNAME ONAME TYPE STATUS GENERATION_STATUS ID OBJECT_COMMENT GNAME MIN_COMMUNICATION REPLICATION_TRIGGER_EXISTS INTERNAL_PACKAGE_EXISTS GROUP_OWNER NESTED_TABLE HAWA TEST TABLE VALID GENERATED 8620 REP_TT Y Y Y PUBLIC N HAWA TEST$RP PACKAGE VALID 8641 SYSTEM-GENERATED: REPLICATION REP_TT PUBLIC HAWA TEST$RP PACKAGE BODY VALID 8677 SYSTEM-GENERATED: REPLICATION REP_TT PUBLIC 3 rows selected SQL> SQL> execute dbms_repcat.add_master_database(gname=>'rep_tt',master=>'authaa.coolyoung.c OM.CN',use_existing_objects=>true, copy_rows=>false, propagation_mode => 'synchronous'); PLSQL procedure successfully completed SQL> execute dbms_repcat.resume_master_activity('rep_tt',true);
20 PLSQL procedure successfully completed SQL> select * from dba_repgroup; SNAME MASTER STATUS SCHEMA_COMMENT GNAME FNAME RPC_PROCESSING_DISABLED OWNER REP_TT Y NORMAL REP_TT N PUBLIC 2. 创 建 保 存 冲 突 数 据 的 数 据 表 a.missing_rows 表 用 以 保 存 冲 突 行 SQL> create table hawa.missing_rows_test 2 as 3 select * from hawa.test where 1=0; Table created b. 用 于 保 存 缺 失 行 位 置 及 rowid SQL> create table hawa.missing_location_test ( 2 present VARCHAR2(128), 3 absent VARCHAR2(128), 4 r_id ROWID); Table created 3. 使 用 dbms_rectifier_diff.differences 查 找 缺 失 记 录 SQL> begin dbms_rectifier_diff.differences( 2 SNAME1 =>'HAWA', 3 ONAME1 =>'TEST', 4 REFERENCE_SITE =>'AVATAR.COOLYOUNG.COM.CN', 5 SNAME2 =>'HAWA', 6 ONAME2 =>'TEST', 7 COMPARISON_SITE =>'AUTHAA.COOLYOUNG.COM.CN', 8 WHERE_CLAUSE =>NULL, 9 COLUMN_LIST =>NULL, 10 MISSING_ROWS_SNAME =>'HAWA', 11 MISSING_ROWS_ONAME1 =>'MISSING_ROWS_TEST', 12 MISSING_ROWS_ONAME2 =>'MISSING_LOCATION_TEST', 13 MISSING_ROWS_SITE =>'AVATAR.COOLYOUNG.COM.CN', 14 MAX_MISSING =>500, 15 COMMIT_ROWS =>100
21 16 ); 17 end; 18 PLSQL procedure successfully completed 冲 突 记 录 被 保 存 在 我 们 创 建 的 指 定 表 中 SQL> select count(*) from hawa.missing_rows_test; COUNT(*) 共 有 172 条 差 异 记 录 SQL> select count(*) from hawa.test; COUNT(*) SQL> select count(*) from COUNT(*) SQL> select count(*) from hawa.missing_location_test; COUNT(*) 使 用 DBMS_RECTIFIER_DIFF.RECTIFY 进 行 数 据 整 合 首 先 需 要 注 意 的 是 : RECTIFY 过 程 使 用 DIFFERENCES 产 生 的 数 据 进 行 数 据 调 整 在 第 一 个 表 中 存 在, 在 第 二 个 表 中 不 存 在 的 数 据 将 被 插 入 第 二 张 表 在 第 二 个 表 中 存 在, 在 第 一 个 个 表 中 不 存 在 的 数 据 将 被 从 第 二 张 表 中 删 除 另 外, 在 这 个 数 据 纠 正 过 程 中, 你 可 以 使 用 dbms_repcat.suspend_master_activity 将 复 制 组 暂 时 挂 起 这 样 便 于 保 证 数 据 完 整 性
22 但 这 不 是 必 须 的, 如 果 复 制 一 直 激 活, 可 能 会 有 新 的 冲 突 出 现 SQL> DBMS_RECTIFIER_DIFF.RECTIFY( 2 SNAME1 =>'HAWA', 3 ONAME1 =>'TEST', 4 REFERENCE_SITE =>'AVATAR.COOLYOUNG.COM.CN', 5 SNAME2 =>'HAWA', 6 ONAME2 =>'TEST', 7 COMPARISON_SITE =>'AUTHAA.COOLYOUNG.COM.CN', 8 COLUMN_LIST =>NULL, 9 MISSING_ROWS_SNAME =>'HAWA', 10 MISSING_ROWS_ONAME1 =>'MISSING_ROWS_TEST', 11 MISSING_ROWS_ONAME2 =>'MISSING_LOCATION_TEST', 12 MISSING_ROWS_SITE =>'AVATAR.COOLYOUNG.COM.CN', 13 COMMIT_ROWS => ); PLSQL procedure successfully completed SQL> select count(*) from hawa.test@authaa; COUNT(*) SQL> select count(*) from hawa.test; COUNT(*) 数 据 矫 正 完 成 以 后, 数 据 会 自 动 从 missing_rows 表 中 删 除 SQL> select count(*) from hawa.missing_rows_test; COUNT(*) SQL> 六 MVR 的 概 念 和 构 架 Oracle 提 供 两 种 不 同 的 复 制 方 法 : 多 主 复 制 (multimaster replication) 和 物 化 视 图 复 制
23 (materialized view replication) 还 可 以 通 过 两 种 复 制 的 组 合 构 成 混 合 复 制 本 文 主 要 描 述 物 化 视 图 复 制, 也 就 是 MVR, 由 于 物 化 视 图 复 制 中 的 主 站 点 就 是 多 主 复 制 中 的 站 点, 因 此 也 会 对 相 应 的 多 主 复 制 中 涉 及 到 的 内 容 作 相 应 的 说 明 一 物 化 视 图 的 概 念 和 体 系 结 构 Oracle 的 物 化 视 图 主 要 用 在 两 个 方 面 : 高 级 复 制 和 数 据 仓 库 在 高 级 复 制 环 境 中, 物 化 视 图 用 于 复 制 数 据 到 非 主 体 站 点 在 数 据 仓 库 环 境 中, 物 化 视 图 用 于 对 代 价 昂 贵 的 查 询 进 行 缓 存 下 面 讨 论 物 化 视 图 在 高 级 复 制 环 境 中 的 使 用 1. 物 化 视 图 是 什 么 物 化 视 图 (materialized view) 是 主 体 对 象 在 某 一 时 间 点 上 的 复 制 品 这 个 主 体 对 象 即 可 以 是 主 体 站 点 (master site) 上 的 一 个 主 表, 也 可 以 是 物 化 视 图 站 点 (materialized view site) 上 的 一 个 主 物 化 视 图 在 多 主 复 制 中, 一 个 站 点 上 的 表 被 其 他 主 体 站 点 连 续 不 断 的 更 新 ( 这 个 也 是 要 分 同 步 和 异 步 的, 异 步 情 况 下 也 是 类 似 于 refresh 这 样 的 定 时 push), 而 物 化 视 图 则 是 从 一 个 主 体 站 点 或 主 物 化 视 图 站 点 批 量 的 进 行 更 新 ( 也 叫 做 刷 新 refresh) 当 物 化 视 图 进 行 快 速 刷 新 时 (fast refresh),oracle 会 检 查 主 表 (master table) 或 主 物 化 视 图 (master materialized view) 自 上 次 刷 新 以 来 的 所 有 改 变, 并 将 其 应 用 到 物 化 视 图 上 因 此, 如 果 主 体 对 象 自 上 次 刷 新 以 来 存 在 一 些 改 变, 则 刷 新 操 作 则 会 花 费 一 定 的 时 间 把 这 些 改 变 应 用 到 物 化 视 图 上 如 果 自 上 次 刷 新 以 来 没 有 发 生 任 何 变 化, 则 物 化 视 图 刷 新 操 作 会 迅 速 的 完 成 2. 为 什 么 使 用 物 化 视 图 你 可 以 使 用 物 化 视 图 来 完 成 以 下 目 标 : 减 轻 网 络 负 载 ; 创 建 一 个 Mass Deployment 环 境 ; 数 据 子 集 ; Disconnected Computing (1) 减 轻 网 络 负 载 : 你 可 以 通 过 物 化 视 图 将 数 据 分 布 到 许 多 站 点, 所 有 用 户 不 需 要 再 访 问 一 个 数 据 库 服 务 器, 负 载 被 分 散 到 多 个 数 据 库 服 务 器 上 和 多 主 复 制 不 同 的 是, 你 可 以 根 据 需 要, 只 复 制 表 中 的 一 部 分 字 段 或 者 表 中 的 一 部 分 数 据, 从 而 降 低 了 每 次 复 制 的 数 据 量 多 主 复 制 也 可 以 分 布 网 络 负 载, 但 与 物 化 视 图 相 比 它 对 网 络 的 要 求 要 严 格 得 多 由 于 多 主 复 制 各 个 站 点 间 采 用 的 是 网 状 连 接, 每 个 站 点 和 其 他 所 有 的 站 点 都 有 通 信, 而 且 多 主 复 制 一 般 用 于 提 供 实 时 或 接 近 实 时 的 复 制, 这 会 导 致 很 高 的 网 络 流 量, 对 于 网 络 状 况 要 求 比 较 严 格 物 化 视 图 采 用 高 效 的 批 量 更 新 方 式, 从 一 个 主 体 站 点 或 一 个 主 物 化 视 图 站 点 获 得 更 新 和 多 主 复 制 的 连 续 通 信 不 一 样, 物 化 视 图 复 制 只 需 要 周 期 性 的 刷 新, 从 而 对 网 络 的 要 求 大 大 降 低 (2) 创 建 Mass Deployment 环 境 : 展 开 模 板 (Deployment templete) 允 许 你 在 本 地 预 先 建 立 物 化 视 图 环 境 你 可 以 利 用 展 开 模 板 快 速 简 便 的 展 开 物 化 视 图 环 境 你 可 以 不 用 修 改 展 开 模 板, 而 是 利 用 参 数 来 建 立 不 同 用 户 的 客 户 化 数 据 集 (3) 数 据 子 集 (Data subsetting): 物 化 视 图 允 许 你 的 复 制 建 立 在 列 (column) 或 者 行 (row-level) 的 基 础 上, 而 多 主 复 制 需
24 要 复 制 整 张 表 通 过 使 用 Data subsetting, 对 于 每 个 站 点 你 可 以 仅 复 制 满 足 本 站 点 需 要 的 数 据 (4) Disconnected Deployment: 物 化 视 图 不 需 要 专 用 网 络 连 接 你 可 以 利 用 job 的 调 度 机 制 完 成 物 化 视 图 的 定 时 自 动 刷 新, 你 也 可 以 在 需 要 的 时 候 手 工 刷 新 物 化 视 图 而 这 第 二 种 方 法 是 在 笔 记 本 上 运 行 应 用 程 序 的 一 种 理 想 解 决 方 案 3. 物 化 视 图 的 分 类 物 化 视 图 分 为 只 读 可 更 新 和 可 写 三 类 不 能 对 只 读 物 化 视 图 进 行 DML 操 作 (INSERTUPDATEDELETE), 对 于 可 更 新 和 可 写 物 化 视 图 则 可 以 进 行 DML 操 作 注 意 : 对 于 只 读 可 更 新 和 可 写 物 化 视 图, 定 义 物 化 视 图 的 查 询 语 句 必 须 包 含 主 体 对 象 中 的 所 有 主 键 列 (1) 只 读 物 化 视 图 在 建 立 物 化 视 图 时, 省 略 FOR UPDATE 语 句 建 立 只 读 物 化 视 图 除 了 不 需 要 属 于 一 个 物 化 视 图 组 之 外, 只 读 物 化 视 图 的 许 多 机 制 都 和 可 更 新 物 化 视 图 相 同 使 用 只 读 物 化 视 图 可 以 消 除 在 主 体 站 点 或 者 主 物 化 视 图 站 点 上 由 物 化 视 图 引 入 的 数 据 冲 突, 这 个 优 点 的 代 价 是 只 读 物 化 视 图 不 能 进 行 dml 操 作 建 立 只 读 物 化 视 图 的 例 子 如 下 : CREATE MATERIALIZED VIEW hr.employees AS SELECT * FROM [email protected]; 注 意 : 使 用 只 读 物 化 视 图 只 能 消 除 由 物 化 视 图 站 点 引 入 的 冲 突, 并 不 意 味 着 使 用 只 读 物 化 视 图 就 不 会 有 冲 突 产 生, 后 面 会 举 例 详 细 说 明 (2) 可 更 新 物 化 视 图 在 建 立 物 化 视 图 时, 指 明 FOR UPDATE 语 句 建 立 可 更 新 物 化 视 图 为 了 可 更 新 物 化 视 图 的 修 改 在 刷 新 时 可 以 被 推 回 (push pack) 主 体 对 象, 可 更 新 物 化 视 图 必 须 属 于 一 个 物 化 视 图 组 由 于 可 更 新 物 化 视 图 允 许 数 据 的 修 改, 因 此 可 以 降 低 主 体 站 点 的 负 载 下 面 是 建 立 可 更 新 物 化 视 图 的 例 子 : CREATE MATERIALIZED VIEW hr.departments FOR UPDATE AS SELECT * FROM [email protected]; 下 面 的 语 句 建 立 一 个 物 化 视 图 组 : DBMS_REPCAT.CREATE_MVIEW_REPGROUP ( gname => 'hr_repg', master => 'orc1.world', propagation_mode => 'ASYNCHRONOUS'); 下 面 的 语 句 将 物 化 视 图 hr.departments 加 入 到 物 化 视 图 组 hr_repg 中, 使 得 物 化 视 图 hr.departments 可 更 新 DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
25 gname => 'hr_repg', sname => 'hr', oname => 'departments', type => 'SNAPSHOT', min_communication => TRUE); 注 意 : 1. 不 要 在 建 立 可 更 新 物 化 视 图 时 使 用 列 的 别 名, 否 则, 在 将 物 化 视 图 加 入 到 物 化 视 图 组 的 时 候 会 发 生 错 误 2. 主 表 或 主 物 化 视 图 列 上 的 默 认 值 不 会 自 动 应 用 到 可 更 新 物 化 视 图 上 3. 可 更 新 物 化 视 图 不 支 持 DELETE CASCADE 操 作 (3) 可 写 物 化 视 图 可 写 物 化 视 图 指 出 FOR UPDATE 语 句, 但 是 没 有 加 入 到 物 化 视 图 组 用 户 可 以 对 可 写 物 化 视 图 执 行 DML 操 作, 但 是 在 执 行 刷 新 操 作 时, 修 改 不 会 被 推 回, 因 此 所 有 的 修 改 在 刷 新 后 全 部 丢 失 所 有 允 许 只 读 物 化 视 图 的 情 况 也 同 样 允 许 可 写 物 化 视 图 由 于 可 写 物 化 视 图 很 少 使 用, 因 此 以 后 大 部 分 内 容 都 只 涉 及 只 读 物 化 视 图 和 可 更 新 物 化 视 图 4. 物 化 视 图 可 用 性 Oracle 提 供 几 种 不 同 类 型 的 物 化 视 图, 以 满 足 各 种 复 制 环 境 的 需 要 介 绍 下 列 物 化 视 图 以 及 它 们 使 用 的 环 境 : 主 键 物 化 视 图 (Primary Key Materialized Views); 对 象 物 化 视 图 (Object Materialized Views); ROWID 物 化 视 图 (ROWID Materialized Views); 复 杂 物 化 视 图 (Complex Materialized Views) 当 建 立 物 化 视 图 时, 不 管 物 化 视 图 属 于 何 种 类 型, 总 是 给 出 方 案 名 (schema), 也 就 是 查 询 语 句 中 表 的 所 有 者 名 称 例 如 : CREATE MATERIALIZED VIEW hr.employees AS SELECT * FROM [email protected]; 这 个 例 子 中, 方 案 名 hr 被 明 确 指 出 (1) 主 键 物 化 视 图 主 键 物 化 视 图 是 默 认 的 物 化 视 图 如 果 主 键 物 化 视 图 是 作 为 物 化 视 图 组 的 一 部 分 建 立 的, 且 指 定 了 FOR UPDATE 语 句, 那 么 这 个 物 化 视 图 是 可 更 新 的, 且 这 个 物 化 视 图 组 必 须 和 主 站 点 中 复 制 组 的 同 名 另 外, 可 更 新 物 化 视 图 必 须 和 主 复 制 组 在 不 同 的 数 据 库 中 当 修 改 发 生 后, 修 改 的 数 据 以 行 级 为 单 位 被 传 播, 每 行 数 据 由 主 键 确 定 ( 而 不 是 ROWID) 下 面 是 一 个 创 建 可 更 新 的 主 键 物 化 视 图 的 例 子 : CREATE MATERIALIZED VIEW oe.customers FOR UPDATE AS SELECT * FROM [email protected]; 主 键 物 化 视 图 可 以 包 含 一 个 子 查 询, 因 此 你 可 以 在 建 立 物 化 视 图 时, 建 立 所 有 数 据 的 一 个 子 集, 也 就 是 说, 建 立 物 化 视 图 时 可 以 只 选 取 你 需 要 的 数 据 行 子 查 询 是 嵌 入 在 主 查 询 中 的 查 询, 因 此 你 可 以 在 建 立 物 化 视 图 时 有 超 过 一 个 的 SELECT 语 句 子 查 询 可 以 是 简 单 的 WHERE 语 句 也 可 以 是 复 杂 的 多 层 WHERE EXISTS 语 句 嵌 套 如 果 主 站 点 中 的 主 对 象 建 立 了 物 化 视
26 图 日 志 表 (materialized view log), 那 么 一 些 包 含 特 定 类 型 子 查 询 的 主 键 物 化 视 图 仍 然 可 以 快 速 ( 增 量 ) 刷 新 快 速 刷 新 利 用 materialized view logs 只 更 新 自 上 次 刷 新 后 被 修 改 的 记 录 下 面 的 物 化 视 图 包 含 一 个 WHERE 语 句 的 子 查 询 : CREATE MATERIALIZED VIEW oe.orders REFRESH FAST AS SELECT * FROM [email protected] o WHERE EXISTS (SELECT * FROM [email protected] c WHERE o.customer_id = c.customer_id AND c.credit_limit > 10000); 这 种 类 型 的 物 化 视 图 又 叫 做 子 查 询 物 化 视 图 (2) 对 象 物 化 视 图 如 果 物 化 视 图 是 基 于 对 象 表, 并 且 在 建 立 是 指 定 了 OF TYPE 语 句, 那 么 这 个 物 化 视 图 叫 做 对 象 物 化 视 图 对 象 物 化 视 图 的 结 构 和 对 象 表 相 同 对 象 物 化 视 图 由 行 对 象 (row objects) 组 成, 每 一 个 行 对 象 由 一 个 对 象 标 识 列 OID(object identifier) 标 识 (3) ROWID 物 化 视 图 为 了 后 向 兼 容 性,Oracle 除 了 默 认 的 主 键 物 化 视 图 外, 还 支 持 ROWID 物 化 视 图 ROWID 物 化 视 图 基 于 主 对 象 中 行 记 录 的 物 理 标 识 ROWID(physical row identifiers) ROWID 物 化 视 图 只 被 用 在 基 于 Oracle7 版 本 的 主 对 象 的 物 化 视 图, 它 不 能 被 用 于 建 立 基 于 Oracle8 或 更 高 版 本 主 站 点 的 物 化 视 图 下 面 是 一 个 建 立 ROWID 物 化 视 图 的 例 子 : CREATE MATERIALIZED VIEW oe.orders REFRESH WITH ROWID AS SELECT * FROM [email protected]; (4) 复 杂 物 化 视 图 物 化 视 图 的 定 义 必 须 满 足 某 种 约 束, 才 能 执 行 快 速 刷 新 如 果 你 需 要 的 物 化 视 图 的 定 义 查 询 语 句 更 为 一 般 化, 不 能 满 足 限 制 条 件, 那 么 这 个 物 化 视 图 是 复 杂 的, 并 且 不 能 执 行 快 速 刷 新 一 般 来 说, 如 果 一 个 物 化 视 图 的 定 义 查 询 包 含 下 列 语 句, 则 被 认 为 是 复 杂 物 化 视 图 : CONNECT BY 语 句 ; 例 如 : CREATE MATERIALIZED VIEW hr.emp_hierarchy AS SELECT LPAD(' ', 4*(LEVEL-1)) USERNAME FROM [email protected] START WITH manager_id IS NULL CONNECT BY PRIOR employee_id = manager_id; INTERSECT,MINUS 或 UNION ALL 操 作 ; 例 如 : CREATE MATERIALIZED VIEW hr.mview_employees AS SELECT employees.employee_id, employees. FROM [email protected] UNION ALL SELECT new_employees.employee_id, new_employees. FROM [email protected];
27 在 某 些 情 况 下 的 DISTINCT 和 UNIQUE 关 键 字 ; 包 含 DISTINCT 和 UNIQUE 关 键 字 的 并 不 都 是 复 杂 物 化 视 图, 简 单 物 化 视 图 (simple materialized view) 中 也 可 以 包 含 这 两 个 关 键 字 下 面 的 例 子 是 建 立 一 个 包 含 DISTINCT 关 键 字 的 复 杂 物 化 视 图 : CREATE MATERIALIZED VIEW hr.employee_depts AS SELECT DISTINCT department_id FROM [email protected] ORDER BY department_id; 聚 集 操 作 ; 如 下 例 : CREATE MATERIALIZED VIEW hr.average_sal AS SELECT AVG(salary) "Average" FROM [email protected]; 连 接 不 在 子 查 询 中 的 对 象 ; 例 如 : CREATE MATERIALIZED VIEW hr.emp_join_dep AS SELECT last_name FROM [email protected] e, [email protected] d WHERE e.department_id = d.department_id; 某 种 情 况 下 的 UNION 操 作 例 如 : CREATE MATERIALIZED VIEW oe.orders AS SELECT order_total FROM [email protected] o WHERE EXISTS (SELECT cust_first_name, cust_last_name FROM [email protected] c WHERE o.customer_id = c.customer_id AND c.credit_limit > 50) UNION SELECT customer_id FROM [email protected] o WHERE EXISTS (SELECT cust_first_name, cust_last_name FROM [email protected] c WHERE o.customer_id = c.customer_id AND c.account_mgr_id = 30); 以 及 其 他 任 何 不 满 足 特 定 约 束 条 件 的 子 查 询 具 体 条 件 见 物 化 视 图 中 的 数 据 子 集 (Data Subsetting with Materialized Views) 的 物 化 视 图 子 查 询 约 束 (Restrictions for Materialized Views with Subqueries)
28 注 意 : 如 果 可 能, 尽 量 避 免 使 用 复 杂 物 化 视 图, 因 为 复 杂 物 化 视 图 不 能 快 速 刷 新, 将 会 降 低 网 络 性 能 对 比 简 单 物 化 视 图 和 复 杂 物 化 视 图 : 为 了 某 种 应 用, 你 可 能 需 要 考 虑 使 用 一 个 复 杂 物 化 视 图 你 有 两 种 方 法 可 以 选 择, 它 们 各 有 利 弊, 具 体 如 下 : 图 一 : 复 杂 物 化 视 图 和 简 单 物 化 视 图 对 比 复 杂 物 化 视 图 : 上 图 中 方 法 A 展 示 了 一 个 复 杂 物 化 视 图 这 个 复 杂 物 化 视 图 在 数 据 库 Ⅱ 中 展 示 出 高 效 的 查 询 性 能, 因 为 连 接 操 作 在 物 化 视 图 刷 新 时 已 经 完 成 然 而, 由 于 是 复 杂 物 化 视 图, 必 须 执 行 完 全 刷 新, 这 将 极 为 可 能 比 执 行 快 速 刷 新 要 慢 得 多 简 单 物 化 视 图 通 过 视 图 连 接 : 上 图 中 方 法 B 在 DATABASEⅡ 展 示 了 两 个 简 单 物 化 视 图, 它 们 通 过 一 个 视 图 执 行 连 接 操 作 通 过 视 图 查 询 不 可 能 有 方 法 A 中 查 询 复 杂 物 化 视 图 那 样 的 性 能 然 而, 简 单 物 化 视 图 可 以 更 加 有 效 的 使 用 快 速 刷 新 和 物 化 视 图 日 志 (materialized view logs) 总 的 来 说 : 如 果 你 很 少 刷 新, 且 需 要 比 较 高 的 查 询 性 能, 则 使 用 方 法 A (complex materialized view) 如 果 你 经 常 刷 新, 且 可 以 牺 牲 查 询 性 能, 则 使 用 方 法 B (simple materialized view) 5. 物 化 视 图 操 作 所 需 权 限 三 种 不 同 类 型 的 用 户 对 物 化 视 图 执 行 操 作 : 建 立 者 (creator): 建 立 物 化 视 图 的 用 户 刷 新 者 (refresher): 刷 新 物 化 视 图 的 用 户 所 有 者 (owner): 拥 有 物 化 视 图 的 用 户 物 化 视 图 存 在 于 所 有 者 的 方 案 (schema) 中
29 一 个 用 户 对 物 化 视 图 可 以 执 行 所 有 的 操 作 然 而, 在 一 些 复 制 环 境 中, 不 同 的 用 户 对 物 化 视 图 执 行 不 同 的 操 作 执 行 这 些 操 作 需 要 的 权 限 取 决 于 操 作 由 同 一 个 用 户 执 行 还 是 由 不 同 的 用 户 执 行 下 面 详 细 解 释 所 需 权 限 注 意 : 下 文 没 有 包 括 用 重 写 查 询 (query rewrite) 选 项 来 创 建 物 化 视 图 时 所 需 要 的 权 限 (1) 创 建 者 是 所 有 者 如 果 一 个 物 化 视 图 的 创 建 者 同 时 也 是 一 个 物 化 视 图 的 所 有 者, 那 么 这 个 用 户 可 以 通 过 明 确 授 权 或 通 过 角 色 拥 有 下 列 权 限 来 创 建 一 个 物 化 视 图 CREATE MATERIALIZED VIEW 或 者 CREATE ANY MATERIALIZED VIEW 权 限 ; CREATE TABLE 或 者 CREATE ANY TABLE 权 限 ; 如 果 数 据 库 兼 容 性 在 以 下, 需 要 CREATE VIEW 或 者 CREATE ANY VIEW 权 限 ; 对 主 站 点 上 对 象 和 物 化 视 图 日 志 的 SELECT 权 限 或 者 SELECT ANY TABLE 系 统 权 限 如 果 主 站 点 不 是 本 地 数 据 库, 则 SELECT 权 限 必 须 授 权 给 一 个 主 站 点 用 户, 这 个 用 户 就 是 物 化 视 图 站 点 通 过 数 据 库 链 (database link) 连 接 到 主 站 点 的 用 户 ( 数 据 库 链 创 建 语 句 中 CONNECT TO 关 键 字 后 面 跟 的 用 户 ) (2) 创 建 者 不 是 所 有 者 如 果 物 化 视 图 的 创 建 者 不 是 所 有 者, 必 须 授 予 创 建 者 和 所 有 者 某 种 权 限 才 能 创 建 物 化 视 图 创 建 者 的 权 限 可 以 直 接 授 权 或 通 过 角 色 授 权, 但 是 所 有 者 的 权 限 必 须 通 过 明 确 授 权 获 得 也 就 是 说, 所 有 者 的 权 限 不 能 通 过 角 色 获 得 创 建 者 : CREATE ANY MATERIALIZED VIEW 系 统 权 限 所 有 者 : CREATE TABLE 或 者 CREATE ANY TABLE 权 限 ; 如 果 数 据 库 兼 容 性 在 以 下, 需 要 CREATE VIEW 或 者 CREATE ANY VIEW 权 限 ; 对 主 站 点 上 对 象 和 物 化 视 图 日 志 的 SELECT 权 限 或 者 SELECT ANY TABLE 系 统 权 限 如 果 主 站 点 不 是 本 地 数 据 库, 则 SELECT 权 限 必 须 授 权 给 一 个 主 站 点 用 户, 这 个 用 户 就 是 物 化 视 图 站 点 通 过 数 据 库 链 (database link) 连 到 主 站 点 的 用 户 ( 数 据 库 链 创 建 语 句 中 CONNECT TO 关 键 字 后 面 跟 的 用 户 ) (3) 刷 新 者 是 所 有 者 如 果 一 个 物 化 视 图 的 刷 新 者 同 时 也 是 物 化 视 图 的 拥 有 者, 这 个 用 户 需 要 主 站 点 上 对 象 和 物 化 视 图 日 志 的 SELECT 权 限 或 者 SELECT ANY TABLE 系 统 权 限 如 果 主 站 点 不 是 本 地 数 据 库, 则 SELECT 权 限 必 须 授 权 给 一 个 主 站 点 用 户, 这 个 用 户 就 是 物 化 视 图 站 点 通 过 数 据 库 链 (database link) 连 到 主 站 点 的 用 户 ( 数 据 库 链 创 建 语 句 中 CONNECT TO 关 键 字 后 面 跟 的 用 户 ) 权 限 可 以 通 过 直 接 授 权 或 通 过 角 色 授 权 (4) 刷 新 者 不 是 所 有 者 如 果 物 化 视 图 的 刷 新 者 不 是 所 有 者, 必 须 授 予 刷 新 者 和 所 有 者 某 种 权 限 这 些 权 限 可 以 直 接 授 权 或 通 过 角 色 授 权 刷 新 者 : ALTER ANY MATERIALIZED VIEW 系 统 权 限 所 有 者 : 主 站 点 上 对 象 和 物 化 视 图 日 志 的 SELECT 权 限 或 者 SELECT ANY TABLE 系 统 权 限 如 果 主 站 点 不 是 本 地 数 据 库, 则 SELECT 权 限 必 须 授 权 给 一 个 主 站 点 用 户, 这 个 用 户 就 是 物 化 视 图 站 点 通 过 数 据 库 链 (database link) 连 到 主 站 点 的 用 户 ( 数 据 库 链 创 建 语 句 中 CONNECT TO 关 键 字 后 面 跟 的 用 户 )
30 6. 物 化 视 图 中 的 数 据 子 集 在 某 些 情 况 下, 你 可 能 希 望 你 的 物 化 视 图 反 映 主 表 或 者 主 物 化 视 图 中 数 据 的 子 集 通 过 使 用 WHERE 语 句, 行 子 集 允 许 你 包 含 主 表 或 者 主 物 化 视 图 中 你 想 要 的 行 记 录 列 子 集 允 许 你 从 主 表 或 者 主 物 化 视 图 中 只 包 含 你 所 需 要 的 列 在 创 建 物 化 视 图 时, 通 过 在 SELECT 语 句 中 明 确 指 出 所 要 选 取 的 列 来 实 现 列 子 集 如 果 你 使 用 展 开 模 板 来 创 建 你 的 物 化 视 图, 那 么 你 可 以 在 可 更 新 物 化 视 图 上 定 义 列 子 集 (1) 使 用 数 据 子 集 的 一 些 原 因 降 低 网 络 流 量 : 在 一 个 使 用 列 子 集 的 物 化 视 图 中, 只 有 满 足 物 化 视 图 定 义 中 WHERE 条 件 语 句 的 修 改 才 会 传 播 到 物 化 视 图 站 点, 因 此 减 少 了 事 务 传 输 数 量, 降 低 了 网 络 流 量 保 护 敏 感 数 据 : 用 户 只 能 查 看 满 足 物 化 视 图 查 询 定 义 的 数 据 减 少 资 源 需 要 : 如 果 物 化 视 图 建 立 在 笔 记 本 上, 则 硬 盘 与 服 务 器 上 的 硬 盘 相 比 要 小 得 多 数 据 子 集 可 以 显 著 的 减 少 存 储 空 间 提 高 刷 新 性 能 : 由 于 较 少 的 数 据 传 播 到 物 化 视 图 站 点, 刷 新 执 行 的 更 加 迅 速 这 一 点 对 于 那 些 需 要 通 过 拨 号 连 接 来 刷 新 物 化 视 图 的 用 户 十 分 重 要 例 如 : 下 面 语 句 基 于 [email protected] 主 表 创 建 一 个 物 化 视 图, 而 且 只 包 括 sales_rep_id 等 于 173 的 记 录 CREATE MATERIALIZED VIEW oe.orders REFRESH FAST AS SELECT * FROM [email protected] WHERE sales_rep_id = 173; 主 表 中 sales_rep_id 不 等 于 173 的 记 录 被 排 除 出 物 化 视 图 (2) 带 子 查 询 的 物 化 视 图 上 面 的 例 子 是 针 对 单 个 表 的 如 果 创 建 基 于 多 个 表 的 物 化 视 图, 则 定 义 和 维 护 这 些 物 化 视 图 相 对 来 说 困 难 得 多 主 要 包 括 多 对 一 子 查 询 一 对 多 子 查 询 多 对 多 子 查 询 以 及 包 含 UNION 操 作 的 子 查 询 几 种 这 些 物 化 视 图 比 较 复 杂, 而 且 在 实 际 复 制 中 不 经 常 使 用, 因 此 这 里 不 再 详 细 描 述 如 果 对 这 部 分 有 兴 趣, 请 参 阅 Oracle9i Advanced Replication 3-18 Materialized Views with Subqueries 部 分 下 面 描 述 一 下 建 立 快 速 刷 新 子 查 询 物 化 视 图 的 条 件 物 化 视 图 子 查 询 约 束 带 子 查 询 的 物 化 视 图 为 了 能 达 到 快 速 刷 新 的 能 力, 必 须 满 足 许 多 约 束 条 件, 具 体 如 下 : 必 须 是 主 键 物 化 视 图 ; 物 化 视 图 日 志 必 须 包 括 某 些 在 子 查 询 中 出 现 的 列 ; 如 果 子 查 询 是 多 对 多 或 一 对 多 查 询, 连 接 列 中 非 主 键 的 部 分 必 须 包 括 在 物 化 视 图 日 志 中, 多 对 一 子 查 询 没 有 这 个 约 束 ; 子 查 询 必 须 是 肯 定 条 件, 比 如, 你 可 以 使 用 EXISTS, 但 是 不 能 使 用 NOT EXISTS; 子 查 询 必 须 使 用 EXISTS 连 接 到 嵌 套 层 (nested level), 不 能 使 用 IN; 每 张 表 只 允 许 一 个 EXISTS 表 达 式 ; 连 接 表 达 式 必 须 采 用 精 确 匹 配 或 等 于 连 接 ; 在 子 查 询 中, 每 张 表 只 能 被 连 接 一 次 ; 在 嵌 套 层 (nested level) 中, 每 张 表 必 须 有 主 键 存 在 ; 嵌 套 层 (nested level) 只 能 参 考 比 它 高 的 层 中 的 表 ; 子 查 询 可 以 包 含 AND 操 作, 但 是 每 个 OR 操 作 只 能 连 接 能 确 定 一 条 记 录 的 列, 子 查 询 中 多 个 OR 运 算 可 以 通 过 AND 连 接 ; 子 查 询 中 的 所 有 表 必 须 在 同 一 个 主 体 站 点 或 主 物 化 视 图 站 点 中 7. 决 定 物 化 视 图 的 快 速 刷 新 能 力
31 为 了 检 测 所 创 建 的 带 子 查 询 的 物 化 视 图 是 否 满 足 上 面 提 到 的 建 立 快 速 刷 新 物 化 视 图 的 种 种 约 束, 在 创 建 时, 如 果 违 反 任 何 约 束 条 件, 则 Oracle 会 返 回 错 误 提 示 如 果 在 建 立 物 化 视 图 时 指 明 强 制 刷 新 (force refresh), 则 不 会 收 到 任 何 错 误 信 息 因 为 在 强 制 刷 新 时, 如 果 不 能 执 行 快 速 刷 新 的 话,Oracle 会 自 动 执 行 完 全 刷 新 (complete refresh) 你 也 可 以 通 过 DBMS_MVIEW 包 中 的 EXPLAIN_MVIEW 过 程 来 检 测 已 存 在 的 物 化 视 图 甚 至 是 还 没 有 建 立 的 物 化 视 图 的 一 些 信 息, 具 体 信 息 如 下 : 物 化 视 图 的 各 种 能 力 ; 对 于 这 个 物 化 视 图 来 说 每 种 能 力 是 否 可 能 ; 如 果 不 可 能, 给 出 导 致 这 种 能 力 不 可 能 的 原 因 ; 这 些 信 息 可 以 存 储 在 varray 中, 也 可 以 存 储 在 MV_CAPABILITIES_TABLE 表 中 如 果 你 希 望 把 信 息 存 储 到 表 中, 那 么 你 必 须 在 执 行 EXPLAIN_MVIEW 存 储 过 程 以 前, 执 行 ORACLE_HOMErdbmsadmin 目 录 下 的 utlxmv.sql 脚 本 例 如 : 检 查 oe.orders 物 化 视 图 的 能 力 输 入 : EXECUTE DBMS_MVIEW.EXPLAIN_MVIEW ('oe.orders'); 或 者 如 果 物 化 视 图 不 存 在, 你 可 以 输 入 你 希 望 建 立 的 物 化 视 图 的 查 询 语 句 : DBMS_MVIEW.EXPLAIN_MVIEW ('SELECT * FROM [email protected] o WHERE EXISTS (SELECT * FROM [email protected] c WHERE o.customer_id = c.customer_id AND c.credit_limit > 500)'); 查 询 MV_CAPABILITIES_TABLE 表 得 到 结 果, 如 下 例 : SQL> set linesize 110 SQL> col RELATED_TEXT format a60 SQL> select capability_name, possible, related_text from mv_capabilities_table; CAPABILITY_NAME P RELATED_TEXT PCT N REFRESH_COMPLETE Y REFRESH_FAST N REWRITE N PCT_TABLE N 此 上 下 文 不 支 持 对 象 数 据 类 型 REFRESH_FAST_AFTER_INSERT N OE.CUSTOMERS REFRESH_FAST_AFTER_INSERT N OE.ORDERS REFRESH_FAST_AFTER_ONETAB_DML N REFRESH_FAST_AFTER_ANY_DML N REFRESH_FAST_PCT N REWRITE_FULL_TEXT_MATCH N OE.ORDERS REWRITE_FULL_TEXT_MATCH N OE.CUSTOMERS REWRITE_FULL_TEXT_MATCH N 此 上 下 文 不 支 持 对 象 数 据 类 型 REWRITE_PARTIAL_TEXT_MATCH N REWRITE_GENERAL N REWRITE_PCT N
32 已 选 择 16 行 8. 多 级 物 化 视 图 (Multitier Materialized Views) 物 化 视 图 的 创 建 可 以 基 于 表, 也 可 以 基 于 其 他 物 化 视 图, 这 种 物 化 视 图 叫 做 多 级 物 化 视 图 (multitier materialized views) 这 种 基 于 其 他 物 化 视 图 的 物 化 视 图 可 以 是 只 读 的 (read only) 也 可 以 是 可 更 新 的 (updatable) 当 使 用 多 级 物 化 视 图 时, 基 于 主 体 表 的 物 化 视 图 叫 做 第 一 层 物 化 视 图 (level 1 materialized view) 基 于 第 一 层 物 化 视 图 的 物 化 视 图 叫 做 第 二 层 物 化 视 图 (level 2 materialized view) 下 一 层 是 第 三 层, 依 此 类 推 作 为 其 他 物 化 视 图 的 主 对 象 的 物 化 视 图 叫 做 主 物 化 视 图 (master materialized view) 处 在 任 何 一 层 的 物 化 视 图 都 可 以 成 为 主 物 化 视 图, 而 且 可 以 存 在 多 个 其 他 的 物 化 视 图 基 于 同 一 个 主 物 化 视 图 主 物 化 视 图 和 主 站 点 中 的 主 表 起 相 同 的 作 用 也 就 是 说 把 第 二 层 物 化 视 图 上 的 改 变 推 到 第 一 层 物 化 视 图 上 的 操 作 和 把 第 一 次 物 化 视 图 上 的 改 变 推 到 主 表 上 的 操 作 是 完 全 一 样 的 在 主 物 化 视 图 站 点 必 须 注 册 一 个 接 收 者 (receiver) 在 多 层 物 化 视 图 站 点 中 接 收 者 负 责 接 受 和 应 用 来 自 主 物 化 视 图 站 点 传 播 者 的 延 迟 事 务 多 层 物 化 视 图 (Multitier materialized views) 在 设 计 复 制 环 境 时 提 供 了 很 高 的 灵 活 性 一 些 物 化 视 图 站 点 不 需 要 复 制 主 表 中 所 有 的 数 据, 实 际 上, 这 些 站 点 可 能 根 本 没 有 足 够 的 空 间 存 储 这 些 数 据 另 外, 只 复 制 较 少 的 数 据 意 味 着 在 网 络 上 活 动 的 数 据 也 较 少 使 用 多 层 物 化 视 图 的 限 制 条 件 : 主 物 化 视 图 和 基 于 主 物 化 视 图 的 物 化 视 图 都 必 须 满 足 下 列 条 件 : 1) 必 须 是 主 键 物 化 视 图 ; 2) 所 在 数 据 库 兼 容 性 等 于 或 者 高 于 主 物 化 视 图 的 一 些 限 制 下 列 类 型 的 物 化 视 图 不 能 作 为 可 更 新 物 化 视 图 的 主 物 化 视 图 1) ROWID 物 化 视 图 ; 2) 复 杂 物 化 视 图 ; 3) 只 读 物 化 视 图 不 过 这 三 种 物 化 视 图 可 以 成 为 只 读 物 化 视 图 的 主 物 化 视 图 基 于 物 化 视 图 的 可 更 新 物 化 视 图 的 额 外 限 制 : 1) 所 属 的 物 化 视 图 组 必 须 和 主 物 化 视 图 站 点 上 的 物 化 视 图 组 同 名 ; 2) 必 须 和 主 物 化 视 图 不 在 同 一 个 数 据 库 上 ; 3) 必 须 基 于 可 更 新 物 化 视 图, 不 能 基 于 只 读 物 化 视 图 ; 4) 主 站 点 上 的 主 物 化 视 图 组 必 须 存 在 于 PUBLIC 方 案 中 9. 包 含 用 户 定 义 类 型 的 物 化 视 图 Oracle 的 复 制 支 持 用 户 自 定 义 类 型 数 据 Oracle 不 但 支 持 行 对 象 (row object) 和 列 对 象 (column object) 而 且 还 支 持 collections 的 复 制 Collection 包 括 基 于 用 户 自 定 义 类 型 的 数 组 (VARRAY) 和 嵌 套 表 (nested table) 使 用 用 户 自 定 义 类 型 需 要 注 意 几 点 : 主 站 点 和 物 化 视 图 站 点 的 数 据 库 兼 容 性 等 于 或 高 于 9.0.1; 如 果 主 对 象 包 含 用 户 自 定 义 类 型, 则 不 能 创 建 refresh-on-commit 物 化 视 图 ; 高 级 复 制 不 支 持 对 象 的 继 承 物 化 视 图 复 制 中 对 用 户 自 定 义 类 型 的 要 求 和 限 制 于 多 主 环 境 中 的 限 制 比 较 类 似, 这 里 不 再 详
33 细 描 述, 如 果 对 这 部 分 内 容 感 兴 趣, 请 参 考 Oracle9i Advanced Replication 3-36 Materialized Views with User-Defined Types 10. 主 站 点 的 物 化 视 图 注 册 11. 主 站 点 和 主 物 化 视 图 站 点 机 制 12. 物 化 视 图 站 点 机 制 13. 组 织 机 制 14. 刷 新 处 理 三. 展 开 模 板 (Deployment Templates) 的 概 念 和 构 架 四. 多 主 复 制 和 物 化 视 图 复 制 区 别
34 附 录 一 多 主 体 复 制 站 点 的 配 置 步 骤 以 下 操 作 如 果 不 是 明 确 指 出, 均 在 master 数 据 库 中 运 行 1 检 查 安 装 好 的 数 据 库 是 否 支 持 高 级 复 制 : SQL> select value from v$option where parameter='advanced replication'; VALUE TRUE 确 保 返 回 的 结 果 是 TRUE, 如 果 是 FALSE 则 表 示 需 要 重 新 安 装 oracle 的 高 级 复 制 部 件 2 确 保 数 据 库 的 初 始 化 参 数 中 global_name=true, 同 时 因 为 高 级 复 制 依 靠 于 JOB 来 实 现, 所 以 必 须 保 证 job_queue_processes 参 数 大 于 0, 我 们 可 以 设 置 为 10 确 保 init.ora 中 包 含 一 下 初 始 化 参 数 定 义 : global_names = true open_links = 4 ( 备 注 : 一 个 process 需 要 4 个 link, 如 果 我 们 创 建 了 多 个 dblink, 并 且 同 时 运 行, 那 么 可 以 把 此 参 数 设 大, 比 如 以 下 环 境 中 我 们 应 该 设 置 为 open_links = 8) job_queue_processes = 10 3 用 sysdba 权 限 分 别 登 录 master 和 snap 数 据 库, 检 查 双 方 的 global_name, 必 须 保 证 两 边 的 域 名 相 同 才 可 以 建 立 正 确 的 dblink select * from global_name; 假 设 显 示 结 果 是 master.com, 那 么 表 示 该 数 据 库 的 域 名 是 com 那 么 我 们 可 以 设 置 snap 库 的 global_name 是 snap.com 使 用 以 下 SQL 设 置 global_name: alter database rename global_name to master.com; 4 创 建 一 个 PUBLIC DBLINK 连 接 到 snap( 此 步 骤 可 以 省 略 ) CREATE PUBLIC DATABASE LINK "snap.com" USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS= (PROTOCOL = TCP)(Host = )(Port = 1521)))(CONNECT_DATA = (SID = test1)(server = DEDICATED)))'; 运 行 以 下 SQL 检 查 dblink 创 建 是 否 成 功, 如 果 结 果 返 回 snap 的 global_name 则 表 示 成 功 SQL> select * from [email protected]; GLOBAL_NAME
35 SNAP.COM 5 创 建 repadmin 用 户, 用 于 管 理 高 级 复 制 create user repadmin identified by repadmin default tablespace users temporary tablespace temp; execute dbms_defer_sys.register_propagator('repadmin'); grant execute any procedure to repadmin; execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin'); execute dbms_repcat_admin.grant_admin_any_schema(username => '"REPADMIN"'); grant comment any table to repadmin; grant lock any table to repadmin; grant select any dictionary to repadmin; 6 登 录 snap 数 据 库, 重 复 上 面 的 操 作, 创 建 public dblink 以 及 repadmin 用 户 7 用 repadmin 用 户 登 录 master, 创 建 私 有 数 据 库 连 接 create database link "snap.com" connect to repadmin identified by repadmin; 如 果 第 4 步 省 略 了, 没 有 创 建 公 有 数 据 库 连 接, 则 需 要 如 下 创 建, 在 创 建 含 有 qualifier 的 多 个 数 据 库 连 接 时 也 只 能 使 用 下 面 的 方 法 : create database link "snap.com@perday" connect to repadmin identified by repadmin USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS= (PROTOCOL = TCP)(Host = )(Port = 1521)))(CONNECT_DATA = (SID = test1)(server = DEDICATED)))'; create database link "snap.com@perhour" connect to repadmin identified by repadmin USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS= (PROTOCOL = TCP)(Host = )(Port = 1521)))(CONNECT_DATA = (SID = test1)(server = DEDICATED)))'; 检 查 是 否 创 建 成 功 SQL> select * from [email protected]@perday; GLOBAL_NAME SNAP.COM 8 创 建 主 体 复 制 组, 添 加 复 制 对 象, 操 作 的 数 据 库 将 称 为 主 体 定 义 站 点 创 建 每 天 复 制 一 次 的 组 execute dbms_repcat.create_master_repgroup(gname => 'rep_gp_day',group_comment => 'replcation perday',qualifier => '@PERDAY'); 创 建 每 小 时 复 制 一 次 的 组 execute dbms_repcat.create_master_repgroup(gname => 'rep_gp_hour',group_comment => 'replcation perhour',qualifier => '@PERHOUR'); 备 注 : 以 下 操 作 只 以 rep_gp_day 复 制 组 为 例, 对 于 rep_gp_hour 复 制 组 则 应 该 作 相 应 更 改
36 再 执 行 下 面 的 操 作 检 查 执 行 结 果 select * from dba_repsites; -- 用 spool 生 成 批 量 执 行 的 SQL set feedback off; set pagesize 0; set heading off; set verify off; set linesize 1000; set trimspool on; spool filename.sql; select 'execute dbms_repcat.create_master_repobject(sname=>''test_user'',oname=>''' table_name ''',type=>''table'',use_existing_object=>true,gname=>''rep_gp_day'');' CREATE_SQL from tabs; select 'dbms_repcat.generate_replication_support(''test_user'',''' table_name ''',''table'');' GEN_SQL from tabs; spool off; set feedback on; set pagesize 9999; set heading on; set verify on; 检 查 复 制 组 状 态 select gname, master, status from dba_repgroup; 如 果 该 复 制 组 已 经 处 于 normal 状 态, 那 么 在 添 加 复 制 对 象 之 前 必 须 先 停 顿 复 制 组, 既 将 同 步 组 的 状 态 由 正 常 (normal) 改 为 停 顿 (quiesced ) execute dbms_repcat.suspend_master_activity (gname => 'rep_gp_day'); 运 行 上 面 生 成 的 spool 文 件, 批 量 执 行 创 建 复 制 对 象 和 生 成 复 制 支 持 如 果 是 单 独 创 建 复 制 对 象, 则 是 手 工 执 行 下 面 的 SQL execute dbms_repcat.create_master_repobject(sname=>'test_user',oname=>'account', type=>'table',use_existing_object=>true,gname=>'rep_gp_day',copy_rows => false); execute dbms_repcat.generate_replication_support('test_user','account','table'); 备 注 : 如 果 所 有 的 主 体 站 点 都 是 在 Oracle815 以 上 的 版 本, 那 么 设 置 generate_replication_support 中 的 generate_80_compatible 参 数 为 false, 默 认 是 true 检 查 执 行 结 果 select * from dba_repobject; 9 添 加 主 体 库, 这 一 步 操 作 必 须 要 求 dblink 工 作 正 常 execute dbms_repcat.add_master_database(gname=>'rep_gp_day',
37 use_existing_objects=>true, copy_rows=>false, propagation_mode => 'asynchronous'); select * from user_jobs; execute dbms_repcat.resume_master_activity('rep_gp_day',false); select gname, master, status from dba_repgroup; 如 果 上 述 的 检 查 结 果 显 示 status 不 是 normal 的, 那 么 运 行 : execute dbms_repcat.resume_master_activity('rep_gp_day',true); 10 添 加 PUSH 的 任 务 ( 执 行 间 隔 为 1 天 1 次 ), 如 果 是 一 小 时 一 次, 则 是 124, 如 果 是 一 分 钟 一 次 则 是 begin dbms_defer_sys.schedule_push ( destination => 'snap.com@perday', interval => 'sysdate + 1', next_date => sysdate, parallelism => 1, delay_seconds => 50); end; 添 加 PURGE 的 任 务 ( 执 行 间 隔 为 1 分 钟 1 次 ) begin dbms_defer_sys.schedule_purge ( next_date => sysdate, interval => 'sysdate ', delay_seconds => 0, rollback_segment => ''); end; 11 用 repadmin 用 户 登 录 snap, 创 建 私 有 数 据 库 连 接 create database link "master.com" connect to repadmin identified by repadmin; create database link "master.com@perday" connect to repadmin identified by repadmin USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS= (PROTOCOL = TCP)(Host = )(Port = 1521)))(CONNECT_DATA = (SID = test1)(server = DEDICATED)))'; create database link "master.com@perhour" connect to repadmin identified by repadmin USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS= (PROTOCOL = TCP)(Host = )(Port = 1521)))(CONNECT_DATA = (SID = test1)(server = DEDICATED)))'; 检 查 是 否 创 建 成 功 SQL> select * from [email protected]@perday;
38 GLOBAL_NAME MASTER.COM 12 添 加 PUSH 和 PURGE 的 任 务 ( 执 行 间 隔 为 1 天 1 次 ), 如 果 是 一 小 时 一 次, 则 是 124, 如 果 是 一 分 钟 一 次 则 是 begin dbms_defer_sys.schedule_push ( destination => 'master.com@perday', interval => 'sysdate + 1', next_date => sysdate, parallelism => 1, delay_seconds => 50); end; 添 加 PURGE 的 任 务 ( 执 行 间 隔 为 1 分 钟 1 次 ) begin dbms_defer_sys.schedule_purge ( next_date => sysdate, interval => 'sysdate ', delay_seconds => 0, rollback_segment => ''); end; 至 此, 高 级 复 制 环 境 设 置 完 毕 附 录 二 物 化 视 图 复 制 站 点 的 配 置 步 骤 主 站 点 :rep.yangtingkun 物 化 视 图 站 点 :yangtk.yangtingkun 主 机 名 :yangtingkun 复 制 用 户 :yangtk 1. 检 查 初 始 化 参 数 复 制 对 数 据 库 的 初 始 化 参 数 限 制 不 多, 主 要 注 意 两 点 global_names 为 TRUE 以 及 job_queue_process 大 等 0 分 别 在 主 站 点 和 物 化 视 图 站 点 执 行 下 面 两 条 sqlplus 命 令, 检 查 数 据 库 初 始 化 参 数 是 否 符 合 要 求 show parameter global_names show parameter job
39 如 果 初 始 化 参 数 设 置 的 不 满 足 要 求, 可 以 通 过 下 列 语 句 动 态 修 改 alter system set global_names = true; alter system set job_queue_processes = 20; 2. 检 查 全 局 数 据 库 名 称 两 个 数 据 库 的 db_domain 名 称 应 该 相 同, 只 有 db_name 不 同 通 过 下 列 语 句 检 查 主 站 点 和 物 化 视 图 站 点 的 全 局 数 据 库 名 select * from global_name; 如 果 全 局 数 据 库 名 设 置 不 符 合 规 范, 可 以 通 过 如 下 语 句 动 态 修 改 alter database rename global_name to rep.yangtingkun; alter database rename global_name to yangtk.yangtingkun; 3. 修 改 tnsnames.ora 文 件, 主 站 点 和 物 化 视 图 站 点 的 参 数 文 件 中 都 添 加 下 列 内 容 REP = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yangtingkun)(port = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = rep) ) ) YANGTK = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yangtingkun)(port = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = yangtk) ) ) 4. 建 立 主 体 站 点 -- 以 system 用 户 连 接 到 主 站 点 CONN system@rep -- 建 立 复 制 管 理 用 户 repadmin 并 授 权 CREATE USER repadmin IDENTIFIED BY repadmin; DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'repadmin');
40 GRANT COMMENT ANY TABLE TO repadmin; GRANT LOCK ANY TABLE TO repadmin; GRANT SELECT ANY DICTIONARY TO repadmin; -- 注 册 传 播 用 户 并 授 权, 这 里 使 用 了 管 理 用 户 repadmin, 也 可 以 分 别 建 立 用 户 DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => 'repadmin'); -- 注 册 接 收 用 户, 这 里 使 用 了 管 理 用 户 repadmin DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( username => 'repadmin', privilege_type => 'receiver', list_of_gnames => NULL); -- 建 立 物 化 视 图 站 点 复 制 管 理 员 的 代 理 用 户, 出 于 简 单 考 虑, 这 里 也 使 用 repadmin 用 户 DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( username => 'repadmin', privilege_type => 'proxy_snapadmin', list_of_gnames => NULL); -- 设 置 代 理 刷 新 用 户, 并 授 权, 这 里 仍 然 使 用 repadmin 用 户 -- 对 于 repadmin 而 言, 不 需 要 create session 权 限 -- 但 是 这 里 如 果 新 建 用 户 的 话,create session 权 限 则 是 必 须 的 GRANT CREATE SESSION TO repadmin; GRANT SELECT ANY TABLE TO repadmin; -- 设 置 清 除 延 迟 序 列 的 job -- 以 复 制 管 理 员 身 份 登 陆 到 主 站 点 CONNECT repadminrepadmin@rep DBMS_DEFER_SYS.SCHEDULE_PURGE ( next_date => SYSDATE, interval => 'SYSDATE + 124', delay_seconds => 0);
41 commit; -- 多 主 站 点 的 设 置 还 需 要 多 个 站 点 间 建 立 数 据 库 链 并 建 立 调 度 机 制 -- 但 是 对 于 物 化 视 图 复 制 的 主 体 站 点, 则 这 些 设 置 是 不 需 要 的 5. 设 置 物 化 视 图 站 点 -- 以 system 用 户 连 接 到 物 化 视 图 站 点 CONN -- 建 立 物 化 视 图 管 理 员, 并 授 权 CREATE USER mvadmin IDENTIFIED BY mvadmin; DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA ( username => 'mvadmin'); GRANT COMMENT ANY TABLE TO mvadmin; GRANT LOCK ANY TABLE TO mvadmin; GRANT SELECT ANY DICTIONARY TO mvadmin; -- 建 立 传 播 者, 并 授 权, 这 里 使 用 mvadmin 用 户, 也 可 以 建 立 单 独 的 用 户 DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => 'mvadmin'); -- 建 立 刷 新 者, 并 授 权, 这 里 使 用 mvadmin 用 户 刷 新 物 化 视 图 -- 对 于 mvadmin 而 言, 不 需 要 create session 权 限 -- 但 是 这 里 如 果 新 建 用 户 的 话,create session 权 限 则 是 必 须 的 GRANT CREATE SESSION TO mvadmin; GRANT ALTER ANY MATERIALIZED VIEW TO mvadmin; -- 注 册 接 受 者 DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( username => 'mvadmin', privilege_type => 'receiver', list_of_gnames => NULL); -- 建 立 PUBLIC 数 据 库 链
42 CREATE PUBLIC DATABASE LINK rep.yangtingkun USING 'rep'; -- 建 立 到 主 站 点 上 代 理 物 化 视 图 管 理 员 的 数 据 库 链 -- 以 物 化 视 图 管 理 员 身 份 连 接 到 物 化 视 图 站 点 CONNECT CREATE DATABASE LINK rep.yangtingkun CONNECT TO repadmin IDENTIFIED BY repadmin; -- 建 立 到 主 站 点 上 复 制 管 理 员 的 数 据 库 链 -- 以 传 播 者 身 份 登 陆 物 化 视 图 站 点 -- 在 本 例 中, 这 个 数 据 库 链 与 上 面 的 数 据 库 链 相 同, 故 省 略 -- 设 置 清 除 延 迟 序 列 的 job -- 如 果 物 化 视 图 站 点 只 包 括 只 读 物 化 视 图, 这 一 步 可 以 省 略 DBMS_DEFER_SYS.SCHEDULE_PURGE ( next_date => SYSDATE, interval => 'SYSDATE + 124', delay_seconds => 0, rollback_segment => ''); -- 设 置 将 修 改 推 入 到 主 站 点 的 job -- 如 果 物 化 视 图 站 点 只 包 括 只 读 物 化 视 图, 这 一 步 可 以 省 略 DBMS_DEFER_SYS.SCHEDULE_PUSH ( destination => 'rep.yangtingkun', interval => 'SYSDATE + 124', next_date => SYSDATE, stop_on_error => FALSE, delay_seconds => 0, parallelism => 0); -- 如 果 需 要 此 物 化 视 图 站 点 作 为 主 物 化 视 图 站 点 -- 则 还 需 要 建 立 物 化 视 图 站 点 的 代 理 物 化 视 图 管 理 用 户 以 及 代 理 刷 新 用 户 -- 本 例 中 从 略 commit; 6. 建 立 主 体 组 -- 以 复 制 管 理 员 身 份 登 陆 复 制 站 点
43 CONNECT -- 建 立 名 为 rep_test 的 复 制 组 DBMS_REPCAT.CREATE_MASTER_REPGROUP ( gname => 'rep_test'); -- 将 复 制 对 象 增 加 到 复 制 组 中 -- 主 键 所 用 的 索 引 自 动 复 制, 其 他 索 引 需 要 明 确 添 加 到 复 制 组 中 DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'rep_test', type => 'TABLE', oname => 'test_rep', sname => 'yangtk', use_existing_object => TRUE, copy_rows => FALSE); DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'rep_test', type => 'INDEX', oname => 'ind_test_rep_name', sname => 'yangtk', use_existing_object => TRUE, copy_rows => FALSE); -- 生 成 复 制 支 持 DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'yangtk', oname => 'test_rep', type => 'TABLE', min_communication => TRUE); -- 开 始 复 制
44 DBMS_REPCAT.RESUME_MASTER_ACTIVITY ( gname => 'rep_test'); commit; 7. 建 立 物 化 视 图 -- 以 复 制 用 户 连 接 到 主 站 点 CONNECT yangtk@rep -- 建 立 物 化 视 图 日 志 表,FAST 刷 新 方 式 必 须 要 求 建 立 物 化 视 图 日 志,COMPLETE 则 不 需 要 CREATE MATERIALIZED VIEW LOG ON yangtk.test_rep; -- 如 果 被 复 制 用 户 不 存 在 则 建 立, 并 授 予 相 应 权 限 -- 本 例 中, 用 户 已 存 在, 此 步 骤 省 略 * CONNECT system@yangtk CREATE USER yangtk IDENTIFIED BY yangtk; ALTER USER yangtk DEFAULT TABLESPACE users QUOTA UNLIMITED ON users; ALTER USER yangtk TEMPORARY TABLESPACE temp; GRANT CREATE SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TRIGGER, CREATE VIEW, CREATE SYNONYM, ALTER SESSION, CREATE MATERIALIZED VIEW, ALTER ANY MATERIALIZED VIEW, CREATE DATABASE LINK TO yangtk; * -- 建 立 复 制 用 户 到 主 站 点 代 理 刷 新 者 的 数 据 库 链 CONNECT yangtk@yangtk CREATE DATABASE LINK rep.yangtingkun CONNECT TO repadmin IDENTIFIED BY repadmin; -- 建 立 物 化 视 图 组 -- 以 物 化 视 图 管 理 员 身 份 登 陆 物 化 视 图 站 点
45 CONNECT -- 物 化 视 图 组 必 须 和 复 制 站 点 上 的 复 制 组 名 称 相 同 DBMS_REPCAT.CREATE_MVIEW_REPGROUP ( gname => 'rep_test', master => 'rep.yangtingkun', propagation_mode => 'ASYNCHRONOUS'); -- 创 建 刷 新 组 -- 对 于 只 包 含 只 读 物 化 视 图 的 站 点, 不 需 要 此 步 骤 DBMS_REFRESH.MAKE ( name => 'mvadmin.rep_refresh', list => '', next_date => SYSDATE, interval => 'SYSDATE + 124', implicit_destroy => FALSE, rollback_seg => '', push_deferred_rpc => TRUE, refresh_after_errors => FALSE); -- 创 建 物 化 视 图 -- 对 于 只 读 物 化 视 图, 省 略 FOR UPDATE 语 句 CREATE MATERIALIZED VIEW yangtk.test_rep REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT * FROM [email protected]; -- 将 物 化 视 图 添 加 到 物 化 视 图 组 -- 对 于 只 读 物 化 视 图, 此 步 骤 可 以 省 略 DBMS_REPCAT.CREATE_MVIEW_REPOBJECT ( gname => 'rep_test', sname => 'yangtk', oname => 'test_rep', type => 'SNAPSHOT', min_communication => TRUE);
46 DBMS_REPCAT.CREATE_MVIEW_REPOBJECT ( gname => 'rep_test', sname => 'yangtk', oname => 'ind_test_rep_name', type => 'INDEX', min_communication => TRUE); -- 将 物 化 视 图 添 加 到 刷 新 组 DBMS_REFRESH.ADD ( name => 'mvadmin.rep_refresh', list => 'yangtk.test_rep', lax => TRUE); commit; 8. 主 对 象 上 建 立 测 试 对 象 脚 本 create table test_rep (id number not null, name varchar2(100)); alter table test_rep add constraint pk_test_rep primary key (id); create index ind_test_rep_name on test_rep (name); insert into test_rep values (1, 'ytk'); insert into test_rep values (2, 'zhly'); commit; 附 录 三 一 些 高 级 复 制 相 关 的 包 使 用 方 法 1. 删 除 复 制 对 象 exec DBMS_REPCAT.DROP_MASTER_REPOBJECT(sname => 'test_user',oname => 't_emp',type => 'table'); 2. 删 除 复 制 组 exec dbms_repcat.drop_master_repgroup(gname=>'rep_gp',all_sites => true); 3. 创 建 新 的 表 或 者 其 它 object 并 加 入 复 制 支 持
47 DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY ( gname => 'scott_mg'); DBMS_REPCAT.CREATE_MASTER_REPOBJECT( sname => 'scott', oname => 't_emp', type => 'table', use_existing_object => false, ddl_text => 'create table scott.t_emp as select * from scott.emp', copy_rows => true, gname => 'scott_mg'); DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'scott', oname => 't_emp', type => 'TABLE', min_communication => TRUE); DBMS_REPCAT.RESUME_MASTER_ACTIVITY ( gname => 'scott_mg'); 4. 执 行 DDL 操 作, 可 以 创 建 表, 但 是 不 会 被 加 入 复 制 组 中 EXECUTE DBMS_REPCAT.EXECUTE_DDL(gname => 'scott_mg',ddl_text => 'truncate table scott.t_emp'); 5. 检 查 dblink COLUMN DEST HEADING 'Destination' FORMAT A45 COLUMN TRANS HEADING 'Def Trans' FORMAT 9999 SELECT DBLINK DEST, COUNT(*) TRANS FROM DEFTRANDEST D GROUP BY DBLINK;
48 6. 检 查 push 的 JOB COLUMN JOB HEADING 'Job ID' FORMAT COLUMN PRIV_USER HEADING 'Privilege Schema' FORMAT A10 COLUMN DBLINK HEADING 'Destination' FORMAT A40 COLUMN BROKEN HEADING 'Broken?' FORMAT A7 SELECT J.JOB, J.PRIV_USER, S.DBLINK, J.BROKEN FROM DEFSCHEDULE S, DBA_JOBS J WHERE S.DBLINK!= (SELECT GLOBAL_NAME FROM GLOBAL_NAME) AND S.JOB = J.JOB ORDER BY 1; 7. 检 查 错 误 的 管 理 请 求 SELECT * FROM DBA_REPCATLOG WHERE STATUS = 'ERROR'; 8. 清 除 错 误 的 管 理 请 求 DBMS_REPCAT.PURGE_MASTER_LOG ( id IN BINARY_INTEGER, source IN VARCHAR2, gname IN VARCHAR2); 9. 统 计 事 务 总 量 SELECT COUNT(DISTINCT DEFERRED_TRAN_ID) "Transactions Queued" FROM DEFTRANDEST; 10. 显 示 所 有 的 延 迟 事 务 处 理 错 误 COLUMN DEFERRED_TRAN_ID HEADING 'Deferred Transaction ID' FORMAT A11 COLUMN ORIGIN_TRAN_DB HEADING 'Origin Database' FORMAT A15 COLUMN DESTINATION HEADING 'Destination Database' FORMAT A15 COLUMN TIME_OF_ERROR HEADING 'Time of Error' FORMAT A22 COLUMN ERROR_NUMBER HEADING 'Oracle Error Number' FORMAT SELECT DEFERRED_TRAN_ID, ORIGIN_TRAN_DB, DESTINATION, TO_CHAR(START_TIME, 'DD-Mon-YYYY hh24:mi:ss') TIME_OF_ERROR, ERROR_NUMBER
49 FROM DEFERROR ORDER BY START_TIME; * 11. 显 示 错 误 百 分 比 SELECT DECODE(TOTAL_TXN_COUNT, 0, 'No Transactions', (TOTAL_ERROR_COUNTTOTAL_TXN_COUNT)*100) "ERROR PERCENTAGE" FROM DEFSCHEDULE WHERE DBLINK = 'ORCL.DB.COM'; 12. 以 repadmin 身 份 重 新 执 行 错 误 的 事 务 DBMS_DEFER_SYS.EXECUTE_ERROR ( deferred_tran_id => ' ', destination => 'ORA10G.DB.COM'); 13. 以 实 际 用 户 身 份 重 新 执 行 错 误 的 事 务 DBMS_DEFER_SYS.EXECUTE_ERROR_AS_USER ( deferred_tran_id => ' ', destination => 'ORC2.WORLD'); 14. 清 空 错 误 事 务 DBMS_DEFER_SYS.DELETE_ERROR( deferred_tran_id IN VARCHAR2, destination IN VARCHAR2); 15. 暂 停 复 制, 该 操 作 只 是 在 当 前 session 内 有 效 EXECUTE DBMS_REPUTIL.REPLICATION_OFF(); 16. 恢 复 复 制 EXECUTE DBMS_REPUTIL.REPLICATION_ON(); 17. 暂 停 复 制 传 播, 延 迟 事 务 仍 然 会 生 成, 只 是 不 再 传 播, 注 意 必 须 commit 才 能 在 其 它 session 中 也 生 效 exec DBMS_DEFER_SYS.SET_DISABLED(destination => 'orcl2003.db.com',disabled => true); commit;
50 作 上 述 操 作 以 后, 每 当 PUSH 的 JOB 定 时 执 行 的 时 候, 将 会 在 alertlog 中 产 生 错 误, 但 是 没 有 关 系, 等 到 重 新 开 始 复 制 的 时 候, 自 然 就 不 会 报 错 了 错 误 信 息 如 下 : Thu Apr 22 01:06: Errors in file c:\oracle\admin\orcl\udump\orcl_j001_3604.trc: ORA-12012: 自 动 执 行 作 业 43 出 错 ORA-23354: 对 "ORCL2003.DB.COM" ( 带 " ") 禁 用 延 迟 执 行 RPC ORA-06512: 在 "SYS.DBMS_DEFER_SYS", line 1716 ORA-06512: 在 "SYS.DBMS_DEFER_SYS", line 1804 ORA-06512: 在 line 重 新 开 始 复 制 传 播 exec DBMS_DEFER_SYS.SET_DISABLED(destination => 'orcl2003.db.com',disabled => false); commit; 19. 删 除 生 成 的 延 迟 事 务 exec DBMS_DEFER_SYS.DELETE_TRAN ( deferred_tran_id => ' ', destination => 'ORCL2003.DB.COM'); commit; 如 果 要 删 除 一 个 准 备 传 播 到 某 个 dest 上 的 所 有 事 务, 则 exec DBMS_DEFER_SYS.DELETE_TRAN (deferred_tran_id => NULL, destination => 'ORCL2003.DB.COM'); commit; 20. 插 入 测 试 数 据, 测 试 高 级 复 制 环 境 是 否 正 常 运 行 begin for i in loop insert into emp(empno,ename,hiredate) values (seq_dept.nextval,'itpub',sysdate); end loop; end; 附 录 四 FAQ Q: 如 果 高 级 复 制 环 境 中 的 主 体 定 义 站 点 损 坏, 如 何 将 主 体 定 义 站 点 切 换 到 另 外 的 主 体 站 点 上? A: 分 为 两 种 情 况 备 注 : 每 次 运 行 完 repcat 包 以 后 都 应 该 执 行 一 次 commit, 因 为 某 些 rep 的 存 储 过 程 是 不 会 自 动 commit 的, 同 时 这 也 是 一 个 troubleshooting, 一 般 的 rep 脚 本 都 会 较 快 的 返 回 结 果,
51 如 果 一 条 命 令 之 后 长 时 间 没 有 结 果 返 回, 那 么 很 可 能 是 上 面 的 命 令 没 有 commit, 取 消 掉 当 前 的 命 令, 然 后 作 一 次 commit, 再 重 新 执 行, 一 般 都 能 够 解 决 问 题 一 是 只 有 主 体 定 义 站 点 损 坏 假 设 站 点 A 是 主 体 定 义 站 点, 已 经 损 坏, 在 复 制 环 境 中 还 有 站 点 B, 想 作 为 新 的 主 体 定 义 站 点 1. 以 repadmin 身 份 登 录 站 点 B, 执 行 主 体 站 点 切 换 connect repadminrepadmin execute dbms_repcat.relocate_masterdef (gname => 'groupname', old_masterdef => 'oldmaster.world', new_masterdef => 'newmaster.world', notify_masters => true, include_old_masterdef => false); 2. 将 站 点 A 作 为 主 体 站 点 删 除 execute dbms_repcat.remove_master_databases (gname => 'groupname', master_list => 'oldmasterdef.world'); 3. 当 站 点 A 重 新 可 用 时, 用 repadmin 用 户 登 录 站 点 A, 删 除 其 中 的 复 制 组 信 息 connect repadminrepadmin execute dbms_repcat.drop_master_repgroup (gname => 'groupname', drop_contents => true, all_sites => false); 如 果 要 使 站 点 A 重 新 成 为 复 制 环 境 中 的 一 个 主 体 站 点, 继 续 执 行 下 面 的 4,5 两 步, 否 则 切 换 主 体 定 义 站 点 就 已 经 完 成 了 4. 登 录 站 点 B( 新 的 主 体 定 义 站 点 ) connect repadminrepadmin execute dbms_repcat.suspend_master_activity (gname => 'groupname') execute dbms_repcat.add_master_database (gname => 'groupname', master => 'oldmasterdef.world', use_existing_objects => true, copy_rows => false); 5. 重 新 开 始 复 制 execute dbms_repcat.resume_master_activity (gname => 'groupname') 第 二 种 情 况 是 一 些 主 体 站 点 和 主 体 定 义 站 点 同 时 损 坏 了
52 1. 依 次 登 录 所 有 正 常 运 行 的 主 体 站 点, 执 行 主 体 定 义 站 点 切 换 execute dbms_repcat.relocate_masterdef (sname => 'schemaname', old_masterdef => 'oldmaster.world', new_masterdef => 'newmaster.world', notify_masters => false, * 此 处 是 false, 而 第 一 种 情 况 中 这 个 参 数 是 true * include_old_masterdef => false); 后 面 的 操 作 步 骤 跟 情 况 一 相 同, 依 次 执 行 2-5 就 可 以 了 Q: 如 果 在 高 级 复 制 环 境 中 的 定 义 了 多 个 复 制 组, 而 且 想 让 不 同 的 复 制 组 在 不 同 的 时 间 间 隔 后 进 行 复 制 传 播, 如 何 处 理? A: 我 们 可 以 使 用 Connection Qualifiers 来 定 义 多 个 dblink 指 向 同 一 个 远 程 主 体 站 点 Connection qualifiers allow several database links pointing to the same remote database to establish connections using different paths. For example, a database named ny can have two public database links named ny.world that connect to the remote database using different paths. ny.world@ethernet, a link that connects to ny using an ethernet link ny.world@modem, another link that connects to ny using a modem link For the purposes of replication, connection qualifiers can also enable you to more closely control the propagation characteristics for multiple master groups. Consider, if each master site contains three separate master groups and you are not using connection qualifiers, then the scheduling characteristics for the propagation of the deferred transaction queue is the same for all master groups. This may be costly if one master group propagates deferred transactions once an hour while the other two master groups propagate deferred transactions once a day. Associating a connection qualifier with a master group gives you the ability to define different scheduling characteristics for the propagation of the deferred transaction queue on a master group level versus on a database level as previously described. When you create a new master group, you can indicate that you want to use a connection qualifier for all scheduled links that correspond to the group. However, when you use connection qualifiers for a master group, Oracle propagates information only after you have created database links with connection qualifiers at every master site. After a master group is created, you cannot remove, add, or change the connection qualifier for the group. Caution: To preserve transaction integrity in a multimaster environment that uses connection qualified links and multiple master groups, a transaction cannot manipulate replication objects in groups with different connection qualifiers. Note:
53 If you plan to use connection qualifiers, then you probably need to increase the value of the OPEN_LINKS initialization parameter at all master sites. The default is four open links for each process. Estimate the required value based on your usage. Q: 如 何 在 异 步 复 制 环 境 中, 实 现 模 拟 持 续 的 实 时 同 步 的 复 制 操 作? A: 即 使 设 置 为 异 步 复 制, 我 们 也 可 以 配 置 scheduled link 来 模 拟 连 续 实 时 的 复 制 在 设 置 PUSH 作 业 时 需 要 设 置 的 参 数 SCHEDULE_PUSH 存 储 过 程 参 数 值 delay_seconds 1200 interval parallelism execution_seconds Lower than the delay_seconds setting 1 or higher Higher than the delay_seconds setting With this configuration, Oracle continues to push transactions that enter the deferred transaction queue for the duration of the entire interval. If the deferred transaction queue has no transactions to propagate for the amount of time specified by the delay_seconds parameter, then Oracle releases the resources used by the job and starts fresh when the next job queue process becomes available. If you are using serial propagation by setting the parallelism parameter to 0 (zero), then you can simulate continuous push by reducing the settings of the delay_seconds and interval parameters to an appropriate value for your environment. However, if you are using serial propagation, simulating continuous push is costly when the push job must initiate often. The following is an example that simulates continual pushes: DBMS_DEFER_SYS.SCHEDULE_PUSH ( destination => 'orc2.world', interval => 'SYSDATE + (1144)', next_date => SYSDATE, parallelism => 1, execution_seconds => 1500, delay_seconds => 1200); To configure continuous purging of a site's deferred transaction queue, you can use the DBMS_DEFER_SYS.SCHEDULE_PURGE procedure and specify the settings. 在 设 置 PURGE 作 业 时 需 要 设 置 的 参 数 SCHEDULE_PURGE 存 储 过 程 参 数 值
54 SCHEDULE_PURGE 存 储 过 程 参 数 值 delay_seconds interval purge_method Lower than the delay_seconds setting dbms_defer_sys.purge_method_quick You can also use the Replication Management tool to configure continuous purge. To do so, on the Purge sub tab of the Schedule tab on the Administration property sheet, set Delay Seconds to 500,000 and set interval (the "then purge every" control) to a value less than the Delay Seconds setting. The following is an example that simulates continuous purges: DBMS_DEFER_SYS.SCHEDULE_PURGE ( next_date => SYSDATE, interval => 'SYSDATE + (1144)', purge_method => dbms_defer_sys.purge_method_quick, delay_seconds => ); 但 是 在 实 际 应 用 中 却 发 现 如 果 这 样 来 模 拟 持 续 PUSH 或 者 PURGE 的 话, 会 导 致 Oracle 数 据 库 无 法 正 常 shutdown 而 必 须 使 用 shutdown abort 来 关 闭 数 据 库, 这 是 一 个 比 较 严 重 的 问 题, 基 本 情 况 是 这 样 的 最 近 几 天 忽 然 发 现 自 己 的 测 试 数 据 库 出 现 无 法 用 shutdown immediate 来 关 闭, 而 只 能 shutdown abort 的 情 况 键 入 shutdown immediate, 数 据 就 停 在 那 里, 没 有 任 何 反 应, 可 以 确 认 已 经 没 有 任 何 用 户 连 接, 也 不 存 在 任 何 大 的 事 务 正 在 执 行, 等 待 1 个 小 时 以 上, 也 仍 然 无 法 关 闭 数 据 库 我 的 测 试 数 据 库 有 两 个, 一 个 是 windows 下 的, 一 个 是 linux 下 的, 都 是 9201, 懒 得 升 级 了 今 天 检 查 windows 下 数 据 库 的 DBA_REPCATLOG 视 图, 发 现 有 两 个 高 级 复 制 的 管 理 请 求 状 态 一 直 是 AWAIT_CALLBACK, 解 决 方 法 不 说 了, 在 后 面 有 详 细 叙 述, 解 决 完 了 之 后, 发 现 这 个 数 据 库 可 以 正 常 关 闭 了 晚 上 检 查 linux 下 的 数 据 库, 发 现 仍 然 不 能 正 常 关 闭 于 是 在 shutdown immediate 之 后, 查 看 alertlog 文 件, 发 现 如 下 内 容 Thu Apr 29 23:58: Shutting down instance: further logons disabled Shutting down instance (immediate) License high water mark = 9 Fri Apr 30 00:03: Active call for process 5376 user 'kamus' program '[email protected] (J002)' Active call for process 5360 user 'kamus' program '[email protected] (J000)'
55 SHUTDOWN: waiting for active calls to complete. Fri Apr 30 00:45: License high water mark = 9 Instance terminated by USER, pid = 用 shutdown abort 停 了 数 据 库 可 以 看 到 oracle 一 直 在 等 待 J000 和 J002 这 两 个 进 程 完 成 自 己 的 工 作, 这 是 Job Queue Process, 由 此 我 想 到 了 在 这 个 测 试 库 中 高 级 复 制 的 PUSH 和 PURGE 两 个 JOB 的 设 置, 其 中 用 到 了 模 拟 持 续 复 制 的 功 能 于 是 进 一 步 检 查 v$process,v#session,v$sqlarea 视 图, 发 现 确 实 没 错, 这 两 个 进 程 就 是 PUSH 和 PURGE 的 JOB 进 程 然 后 修 改 了 JOB 的 定 义, 重 新 shutdown immediate 成 功 通 过 对 比 shutdown 前 后 的 进 程, 也 发 现 oracle 会 先 停 所 有 queue 和 job 相 关 的 进 程, 然 后 再 去 停 pmon,dbwr 等 进 程 关 于 这 个 问 题 的 其 它 讨 论, 也 可 以 参 见 下 面 的 链 接 : Q: 如 何 计 算 延 迟 事 务 将 占 用 多 少 的 资 源? A:Deferred Transactions Oracle forwards data replication information by propagating (that is, sending and executing) the RPCs that are generated by the internal triggers described previously. These RPCs are stored in the deferred transaction queue. In addition to containing the execution command for the internal procedure at the destination site, each RPC also contains the data to be replicated to the target site. Oracle uses distributed transaction protocols to protect global database integrity automatically and ensure data survivability. Deferred Transaction Queue This queue stores the transactions (for example, DML) that are bound for another destination in the master group. Oracle stores RPCs produced by the internal triggers in the deferred transaction queue of a site for later propagation. Oracle also records information about initiating transactions so that all RPCs from a transaction can be propagated and applied remotely as a transaction. Oracle's replication facility implements the deferred transaction queue using Oracle's advanced queuing mechanism. 上 面 是 Oracle 联 机 文 档 中 对 于 延 迟 事 务 和 延 迟 事 务 队 列 的 描 述 开 始 的 时 候 一 直 以 为 延 迟 事 务 应 该 是 存 在 Oracle 的 一 个 内 存 结 构 中, 所 以 总 是 担 心 如 果 复 制 环 境 中 的 网 络 长 时 间 出 现 问 题, 那 么 会 不 会 导 致 延 迟 事 务 队 列 占 用 大 量 的 内 存 而 使 数 据 库 的 其 它 操 作 变 慢, 或 者 说 超 出 了 延 迟 事 务 可 以 使 用 的 内 存 大 小 而 产 生 错 误 因 为 上 面 提 到 延 迟 事 务 队 列 使 用 的 是 Oracle 的 高 级 队 列 (Advanced Queue) 算 法, 所 以 又 查 找 了 高 级 队 列 的 文 档, 发 现 多 处 提 到 Table 这 个 词, 所 以 忽 然 明 白 所 谓 延 迟 事 务 的 队 列 应 该 是 存 储 在 磁 盘 上 的 某 些 表 中, 这 样 陡 然 就 解 决 了 心 中 很 多 疑 问, 首 先 事 务 多 只 是 占 用 硬 盘 空 间, 其 次 要 想 计 算 事 务 占 用 的 资 源 可 以 通 过 表 的 block 数 来 计 算 于 是 通 过 SQL Trace, 找 到 了 延 迟 事 务 相 关 视 图 的 基 表 deftran 对 应 DEF$_AQCALL 表, 通 过 执 行 计 划 也 发 现 在 统 计 大 量 延 迟 事 务 总 数 时 候 速 度 极 为 缓 慢 的 原 因, 因 为 在 作 TABLE ACCESS FULL DEF$_AQCALL, 同 时 还 会 作 TABLE ACCESS
56 FULL DEF$_AQERROR, 还 有 UNION ALL 的 操 作 deferror 对 应 DEF$_ERROR 表 defcall 对 应 的 也 是 DEF$_AQCALL 和 DEF$_AQERROR 表 现 在 我 们 检 查 一 下 DEF$_AQCALL 表 的 信 息 SQL> col owner for a10 SQL> col object_name for a20 SQL> select owner,object_name,object_id,data_object_id,object_type from dba_objects where object_name='def$_aqcall'; OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE SYS DEF$_AQCALL 3913 SYNONYM SYSTEM DEF$_AQCALL TABLE SYSTEM DEF$_AQCALL 3869 QUEUE Executed in 0.06 seconds 从 上 面 的 结 果 可 以 看 到 这 个 表 是 属 于 SYSTEM 的, 在 SYS 下 有 一 个 同 义 词 再 检 查 一 下 segment 的 情 况, 我 们 可 以 从 dba_segments 或 者 dba_extents 视 图 中 查 看 SQL> col tablespace_name for a20 SQL> select owner,tablespace_name,bytes,blocks from dba_segments where segment_name='def$_aqcall'; OWNER TABLESPACE_NAME BYTES BLOCKS SYSTEM SYSTEM Executed in 0.11 seconds 由 此 我 们 已 经 可 以 知 道 作 为 高 级 复 制 中 延 迟 事 务 存 储 所 占 用 的 资 源, 同 时 由 于 这 是 普 通 的 表, 那 么 当 插 入 记 录 的 时 候 当 然 也 是 会 缓 存 在 buffer cache 中 这 里 不 作 讨 论 也 不 再 讨 论 DEF$_AQERROR 表, 因 为 只 有 在 延 迟 事 务 产 生 错 误 时 才 会 插 入, 如 果 高 级 复 制 环 境 中 没 有 太 多 错 误, 这 个 表 的 资 源 占 用 可 以 不 考 虑 为 了 继 续 验 证, 现 在 测 试 环 境 中 有 REP_HOME 复 制 组, 其 中 的 复 制 对 象 是 SCOTT.EMP_2003 表 断 开 网 络 连 接 的 情 况 下, 我 们 插 入 条 记 录 再 次 检 索 DEF$_AQCALL 表 现 在 的 情 况 SQL> select owner,tablespace_name,bytes,blocks from dba_segments where segment_name='def$_aqcall'; OWNER TABLESPACE_NAME BYTES BLOCKS SYSTEM SYSTEM Executed in 0.08 seconds
57 现 在 该 表 的 大 小 已 经 扩 大 到 2M, 可 以 认 为 所 有 的 复 制 数 据 和 队 列 信 息 都 存 储 在 这 张 表 中 SQL> select count(*) from DEF$_AQCALL; COUNT(*) Executed in 0.04 seconds 再 次 证 明 确 实 是 条 数 据 如 果 此 时 我 们 用 repadmin 用 户 检 索 defcall 和 deftran 视 图 SQL> select count(*) from defcall; COUNT(*) 已 用 时 间 : 00: 00: SQL> select count(*) from deftran; COUNT(*) 已 用 时 间 : 00: 00: 可 以 看 到 deftran 视 图 中 只 有 一 条 记 录, 因 为 上 面 的 条 数 据 的 插 入 是 一 个 事 务 中 完 成 的, 所 以 在 复 制 环 境 中 作 为 一 个 延 迟 事 务 处 理 而 defcall 中 则 是 条 记 录, 详 细 查 看 内 容, 知 道 所 有 的 cal 事 务 号 都 相 同, 而 callno 不 同, 同 时 我 们 发 现 直 接 检 索 DEF$_AQCALL 只 需 要 0.04 秒, 而 检 索 defcall 视 图 却 需 要 2 秒, 所 以 如 果 想 要 计 算 到 底 有 多 少 数 据 需 要 处 理 的 时 候, 我 们 可 以 直 接 从 DEF$_AQCALL 检 索, 这 样 可 以 缩 短 查 询 时 间 Q: 如 何 在 高 级 复 制 环 境 中 实 现 自 动 Failover? A: 可 以 使 用 Oracle Net 去 配 置 自 动 的 connect-time failover, 可 以 实 现 如 果 一 台 主 体 站 点 损 坏 那 么 Oracle Net 会 将 请 求 自 动 fail over 到 另 一 台 主 体 站 点 上 方 法 是 在 tnsnames.ora 中 配 置 FAILOVER 选 项 为 on, 同 时 指 定 多 个 连 接 描 述 具 体 配 置 文 件 如 下 所 示 : 测 试 方 法 :
58 Q: 如 果 一 张 表 没 有 主 键, 又 确 实 需 要 复 制, 怎 么 办? A: 不 建 议 在 高 级 复 制 的 环 境 中 出 现 这 样 的 情 况, 应 该 确 保 每 张 表 都 有 主 键 如 果 确 实 存 在 这 种 情 况, 那 么 需 要 用 DBMS_REPCAT.SET_COLUMNS 来 生 成 代 用 主 键 execute DBMS_REPCAT.SET_COLUMNS(sname => test', oname => 'tabel', column_list => 'col1,col2,col3,col4'); 其 中 column_list 是 用 逗 号 隔 开 的 字 段 列 表, 不 能 有 空 格 注 意 : 不 要 在 执 行 set_columns 之 前 生 成 对 于 没 有 主 键 的 对 象 的 复 制 支 持, 也 就 是 不 要 运 行 generate_replication_support, 否 则 会 导 致 all_repobject 视 图 中 该 对 象 状 态 变 为 ERROR, 而 无 法 再 次 set_columns 如 果 误 运 行 了 复 制 支 持 而 又 没 有 成 功, 那 么 需 要 删 除 掉 这 个 复 制 对 象 再 重 新 生 成 也 就 是 在 对 没 有 主 键 的 表 生 成 复 制 的 时 候, 必 须 遵 循 以 下 顺 序 : create_master_repobject -> set_columns -> generate_replication_support Q: 如 何 检 查 一 个 错 误 的 延 迟 事 务 到 底 作 了 什 么? A: 有 些 时 候 因 为 种 种 原 因, 可 能 复 制 操 作 会 出 现 错 误 检 查 DEFERROR 视 图 会 发 现 有 错 误 的 延 迟 事 务, 我 们 首 先 可 以 通 过 DEFERRED_TRAN_ID 和 CALLNO 在 DEFCALL 视 图 中 查 询 这 个 操 作 大 体 上 是 在 干 什 么 SQL> select schemaname, packagename, procname from defcall; SCHEMANAME PACKAGENAME PROCNAME SCOTT EMP_2003$RP REP_DELETE SCOTT EMP_2003$RP REP_DELETE Executed in 0.06 seconds 其 中 SCHEMANAME 表 示 哪 个 用 户 执 行 的 DML,PACKAGENAME 中 可 以 知 道 是 哪 个 对 象 上 的 操 作,PROCNAME 则 可 以 知 道 是 插 入, 更 新 还 是 删 除 但 是 这 样 的 信 息 往 往 不 足 够 我 们 判 断 问 题 我 们 想 知 道 到 底 这 个 SQL 干 了 什 么, 怎 么 办? 我 们 可 以 利 用 DBMS_DEFER_QUERY.GET_CALL_ARGS 来 达 到 目 的 运 行 以 下 的 存 储 过 程, 可 以 得 到 想 要 查 询 的 延 迟 事 务 的 具 体 参 数 值 CREATE OR REPLACE PROCEDURE GET_CALL(tran_id IN STRING, callno IN NUMBER, startarg IN NUMBER := 1, argcnt IN NUMBER, argsize IN NUMBER, tran_db IN STRING :='') IS v_types DBMS_DEFER_QUERY.TYPE_ARY; v_vals DBMS_DEFER_QUERY.VAL_ARY; indx NUMBER; v_type_desc VARCHAR2(50); DBMS_DEFER_QUERY.GET_CALL_ARGS(callno => callno, startarg => startarg,
59 argcnt => argcnt, argsize => argsize, tran_db => tran_db, tran_id => tran_id, date_fmt => 'YYYY-MM-DD HH24:MI:SS', types => v_types, vals => v_vals); FOR indx IN 1.. argcnt LOOP IF v_types(indx) = 1 THEN v_type_desc := 'VARCHAR2'; END IF; IF v_types(indx) = 2 THEN v_type_desc := 'NUMBER'; END IF; IF v_types(indx) = 12 THEN v_type_desc := 'DATE'; END IF; IF v_types(indx) = 23 THEN v_type_desc := 'RAW'; END IF; IF v_types(indx) = 96 THEN v_type_desc := 'CHAR'; END IF; IF v_types(indx) = 11 THEN v_type_desc := 'ROWID'; END IF; dbms_output.put_line('arg ' indx ': Datatype ' v_type_desc '; Value: ' v_vals(indx)); END LOOP; END GET_CALL; 另 外 我 们 可 以 通 过 查 询 DEF$_AQCALL 表 的 USER_DATA 字 段 也 可 以 得 到 数 据, 这 是 一 个 BLOB 字 段, 提 取 BLOB 字 段 内 容 的 方 法 这 里 不 再 讨 论, 如 果 有 兴 趣 的 可 以 自 己 试 一 下 Q: 高 级 复 制 环 境 中 出 现 长 时 间 的 网 络 问 题 会 出 现 什 么 情 况? A: 由 于 高 级 复 制 的 传 播 都 是 通 过 JOB 来 实 现 的, 而 大 家 知 道 Oracle 对 于 JOB 的 执 行 有 个 限 制, 就 是 如 果 一 个 JOB 执 行 失 败 了 16 次, 那 么 这 个 JOB 将 会 被 标 志 为 BROKEN, 以 后 这 个 JOB 再 也 不 会 被 自 动 执 行, 除 非 是 手 动 设 置 BROKEN 为 FALSE 或 者 手 动 成 功 地 运 行 一 次 JOB 这 个 特 性 给 我 们 的 实 际 应 用 中 带 来 了 一 些 麻 烦, 假 设 我 们 的 PUSH JOB 定 义 的 时 间 间 隔 是 一 分 钟, 那 么 如 果 主 体 站 点 之 间 的 网 络 出 现 长 时 间 的 问 题, 比 如 说 超 过 了 16 分 钟, 也 就 是 此 时 JOB 已 经 失 败 了 16 次, 那 么 PUSH 的 JOB 就 被 标 志 为 BROKEN 了, 这 样 等 到 网 络 问 题
60 修 复, 会 发 现 堆 积 的 延 迟 事 务 也 不 会 被 PUSH 到 其 它 的 主 体 站 点 上 如 果 不 注 意 这 个 问 题, 往 往 就 会 出 现 严 重 的 问 题 解 决 方 案 是 另 外 作 一 个 JOB, 这 个 JOB 里 面 每 隔 一 定 时 间 自 动 检 查 那 个 PUSH JOB 的 状 态, 如 果 是 BROKEN 的, 那 么 自 动 将 其 BROKEN 状 态 重 新 设 置 为 FALSE, 这 样 下 次 又 可 以 重 新 执 行 了 这 个 JOB 中 执 行 的 存 储 过 程 基 本 上 如 下 : DECLARE CURSOR my_broken_jobs IS SELECT job FROM user_jobs WHERE broken = 'Y'; FOR broken_job IN my_broken_jobs LOOP dbms_job.broken(broken_job.job, FALSE); EXCEPTION WHEN OTHERS THEN NULL; END LOOP; Q: 如 果 主 定 义 站 点 的 DBA_REPCATLOG 视 图 中 的 管 理 请 求 总 是 处 于 AWAIT_CALLBACK 状 态 是 什 么 原 因, 如 何 处 理? A:AWAIT_CALLBACK 状 态 表 示 管 理 请 求 已 经 从 主 体 定 义 站 点 上 正 常 发 出, 并 且 已 经 被 其 他 的 主 体 站 点 接 收, 但 是 其 他 的 主 体 站 点 却 没 有 返 回 消 息 表 明 管 理 请 求 是 否 执 行 成 功, 造 成 这 种 错 误 基 本 上 是 网 络 的 原 因 我 利 用 以 下 环 境 模 拟 这 种 情 况 的 产 生 机 器 A 是 主 体 定 义 站 点, 在 局 域 网 内 用 ADSL 拨 号 上 internet, 机 器 B 是 另 外 一 个 主 体 站 点, 通 过 静 态 IP 直 接 联 入 internet 这 样 的 环 境 中 机 器 A 可 以 连 通 机 器 B, 但 是 机 器 B 却 无 法 连 通 机 器 A 在 机 器 A 上 发 出 停 顿 复 制 组 的 命 令 : execute dbms_repcat.suspend_master_activity (gname => 'rep_gp_day'); 然 后 检 查 A 的 复 制 组 状 态 和 管 理 请 求 状 态, 发 现 A 中 的 复 制 组 状 态 已 经 为 quiesced, 但 是 DBA_REPCATLOG 视 图 中 始 终 显 示 这 个 请 求 处 于 AWAIT_CALLBACK 状 态, 在 这 种 情 况 下 后 续 的 所 有 管 理 请 求 都 将 不 会 执 行 了 处 理 方 法 是 : 首 先 解 决 网 络 问 题, 当 网 络 重 新 连 通 的 时 候, 利 用 DBMS_REPCAT 包 重 新 执 行 这 个 管 理 请 求 DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN ( gname=>'rep_gp_day', all_sites=>true); Q: 如 果 在 添 加 主 体 站 点 的 时 候 碰 到 ORA 错 误, 如 何 解 决? A: 有 些 时 候 我 们 在 执 行 下 面 命 令 添 加 主 体 站 点 的 时 候 会 碰 到 ORA 错 误 SQL>execute dbms_repcat.add_master_database( ) ERROR 位 于 第 1 行 : ORA-23375: 特 性 与 数 据 库 版 本 <GLOBAL_NAME> 不 兼 容 ORA-06512: 在 "SYS.DBMS_SYS_ERROR", line 86
61 ORA-06512: 在 "SYS.DBMS_REPCAT_MAS", line 2151 ORA-06512: 在 "SYS.DBMS_REPCAT", line 146 ORA-06512: 在 line 1 上 面 的 这 个 错 误, 通 常 表 示 我 们 在 创 建 repadmin 用 户 的 时 候 缺 少 了 几 步 授 权 的 命 令, 请 对 照 本 文 创 建 repadmin 用 户 的 步 骤 仔 细 检 查 通 常 缺 少 的 是 下 面 这 两 步 : grant lock any table to repadmin; grant select any dictionary to repadmin 注 : 本 文 第 六 章 和 附 录 二 完 全 由 yangtingkun 编 写 本 文 第 四, 五 章 完 全 由 eygle 编 写
Oracle高级复制冲突解决机制的研究
Oracle dbms_rectifier_diff Oracle : eygle ([email protected] dbms_rectifier_diff Oracle dbms_rectifier_diff : http://www.eygle.com/archives/2005/01/eoadbms_rectifi.html DIFFERENCES Oracle dbms_rectifier_diff.differences
ebook 96-16
16 13 / ( ) 16-1 SQL*Net/Net8 SQL*Net/Net8 SQL*Net/Net8 16-1 / S Q L SQL*Net V2 N e t 8 S Q L * N e t N e t ( ) 16.1 S Q L O r a c l e S Q L 16 401 ) ( H R _ L I N K create database link p u b l i c (
學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘
ITE 資 訊 專 業 人 員 鑑 定 資 料 庫 系 統 開 發 與 設 計 實 務 試 卷 編 號 :IDS101 注 意 事 項 一 本 測 驗 為 單 面 印 刷 試 題, 共 計 十 三 頁 第 二 至 十 三 頁 為 四 十 道 學 科 試 題, 測 驗 時 間 90 分 鐘 : 每 題 2.5 分, 總 測 驗 時 間 為 90 分 鐘 二 執 行 CSF 測 驗 系 統 -Client
PowerPoint Presentation
数 据 库 培 训 项 目 研 究 Oracle 索 引 探 究 B*tree 索 引 与 位 图 索 引 的 特 点 作 者 : 赵 超 2008 年 12 月 18 日 实 验 环 境 Windows-server2003 内 存 :2G Oracle 10.2.0 ORACLE_SID=orcl 索 引 类 型 B*tree 索 引 ( 默 认 方 式 ) 位 图 索 引 (bitmap) 反
Oracle 4
Oracle 4 01 04 Oracle 07 Oracle Oracle Instance Oracle Instance Oracle Instance Oracle Database Oracle Database Instance Parameter File Pfile Instance Instance Instance Instance Oracle Instance System
ebook10-5
Oracle 7.x RDBMS 5 Oracle S Y S S Y S T E M O r a c l e 5.1 O r a c l e R D B M S O r a c l e O r a c l e 5.2 SYS SYSTEM S Y S S Y S T E M O r a c l e S Y S V $ D B A C O N N E C T R E S O U R C E S Y
Oracle Database 10g: SQL (OCE) 的第一堂課
商 用 資 料 庫 的 第 一 堂 課 中 華 大 學 資 訊 管 理 系 助 理 教 授 李 之 中 http://www.chu.edu.tw/~leecc 甲 骨 文 俱 樂 部 @Taiwan Facebook 社 團 https://www.facebook.com/groups/365923576787041/ 2014/09/15 問 題 一 大 三 了, 你 為 什 麼 還 在 這
6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM
CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986
11.2 overview
1 < 在 此 处 插 入 图 片 > Explain Plan 命 令 说 明 Maria Colgan 免 责 声 明 本 讲 座 旨 在 为 您 提 供 有 关 如 何 阅 读 SQL 执 行 计 划 的 说 明, 并 帮 助 您 确 定 该 计 划 是 否 满 足 您 的 要 求 本 讲 座 并 不 能 使 您 一 举 成 为 优 化 器 专 家, 也 无 法 使 您 具 备 轻 松 调 整
untitled
OO 1 SQL Server 2000 2 SQL Server 2000 3 SQL Server 2000 DDL 1 2 3 DML 1 INSERT 2 DELETE 3 UPDATE SELECT DCL 1 SQL Server 2 3 GRANT REVOKE 1 2 1 2 3 4 5 6 1 SQL Server 2000 SQL Server SQL / Microsoft SQL
untitled
Database System Principle Database System Principle 1 SQL 3.1 SQL 3.2-3.3 3.4 3.5 3.6 Database System Principle 2 3.1 SQL SQL Structured Query Language SQL Database System Principle 3 SQL 3.1.1 SQL 3.1.2
untitled
Chapter 01 1.0... 1-2 1.1... 1-2 1.1.1...1-2 1.1.2...1-4 1.1.2.1... 1-6 1.1.2.2... 1-7 1.1.2.3... 1-7 1.1.2.4... 1-7 1.1.2.5... 1-8 1.1.2.6... 1-8 1.1.3??...1-8 1.1.4...1-9 1.2...1-12 1.3...1-14 1.4...1-17
数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护
数 据 库 系 统 基 础 1/54 数 据 库 系 统 基 础 哈 尔 滨 工 业 大 学 2011.~2012. 数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护 数 据 库 系 统 基 础 3/54 第 6 章 数 据 库 管 理 与 维 护 6.1 数 据 库 管 理 员 的 基 本 职 责 6.2 数 据 库 存 储 与 性 能 管 理 6.3 数 据 库
未命名
附录三 ADS- MySQL 基础语法偏表 类别语法偏类 MySQL 语法 ADS 语法备注 型 Utility DESCRIBE {DESCRIBE DESC} tbl_name [col_name wild] {DESCRIBE DESC} dbname.tbl_name EXPLAIN 负偏 {EXPLAIN} [explain_type] explainable_stmt {EXPLAIN}
目錄
資 訊 素 養 線 上 教 材 單 元 五 資 料 庫 概 論 及 Access 5.1 資 料 庫 概 論 5.1.1 為 什 麼 需 要 資 料 庫? 日 常 生 活 裡 我 們 常 常 需 要 記 錄 一 些 事 物, 以 便 有 朝 一 日 所 記 錄 的 事 物 能 夠 派 得 上 用 場 我 們 能 藉 由 記 錄 每 天 的 生 活 開 銷, 就 可 以 在 每 個 月 的 月 底 知
System Global Area, Oracle Background process Oracle, Server Process user process, user process : SQL*PLUS SYSTEM SQL> select name from v$datafile; NA
ORACLE By Chao_Ping and Parrotao 1 Oracle9i, SGA 2 Oracle9i 3, 4, Oracle? Oracle??? Oracle 1 Overview Oracle, Datafile, Background process, System Global Area, Server Process User Process System Global
习题1
习 题 1 数 据 库 系 统 基 本 概 念 1.1 名 词 解 释 DB DB 是 长 期 存 储 在 计 算 机 内 有 组 织 的 统 一 管 理 的 相 关 数 据 的 集 合 DB 能 为 各 种 用 户 共 享, 具 有 较 小 冗 余 度 数 据 间 联 系 紧 密 而 又 有 较 高 的 数 据 独 立 性 等 特 点 DBMS 是 位 于 用 户 与 操 作 系 统 之 间 的
支付宝2011年 IT资产与费用预算
OceanBase 支 持 ACID 的 可 扩 展 关 系 数 据 库 [email protected] 2013 年 04 月 关 系 数 据 库 发 展 1970-72:E.F.Codd 数 据 库 关 系 模 式 20 世 纨 80 年 代 第 一 个 商 业 数 据 库 Oracle V2 SQL 成 为 数 据 库 行 业 标 准 可 扩 展 性 Mainframe: 小 型 机 =>
基于UML建模的管理管理信息系统项目案例导航——VB篇
PowerBuilder 8.0 PowerBuilder 8.0 12 PowerBuilder 8.0 PowerScript PowerBuilder CIP PowerBuilder 8.0 /. 2004 21 ISBN 7-03-014600-X.P.. -,PowerBuilder 8.0 - -.TP311.56 CIP 2004 117494 / / 16 100717 http://www.sciencep.com
ebook 165-5
3 5 6 7 8 9 [ 3. 3 ] 3. 3 S Q L S Q 4. 21 S Q L S Q L 4 S Q 5 5.1 3 ( ) 78 5-1 3-8 - r e l a t i o n t u p l e c a r d i n a l i t y a t t r i b u t e d e g r e e d o m a i n primary key 5-1 3 5-1 S #
目錄... ivv...vii Chapter DETECT
... ivv...vii Chapter 1 1.1... 5 1.2... 6 1.3 DETECT... 11 1.3.1... 12 1.3.1.1...12 1.3.1.2...13 1.3.1.3...14 1.3.1.4...15 1.3.1.5...15 1.3.1.6...16 1.3.2 DETECT... 17 1.3.3... 19 1.3.4... 20... 22 Chapter
SQL: Interactive Queries (2)
SQL: Interactive Queries (2) Prof. Weining Zhang Cs.utsa.edu Aggregate Functions Functions that take a set of tuples and compute an aggregated value. Five standard functions: count, min, max, avg, sum
使用SQL Developer
使 用 SQL Developer 达 成 的 目 标 / 方 案 1 创 建 一 个 新 的 数 据 库 连 接 ; 2 在 SQL Developer 中 查 看 数 据 库 对 象 的 信 息 修 改 数 据 ; 3 在 SQL Developer 中 创 建 表 ; 4 在 SQL Developer 中 创 建 索 引 ; 5 在 SQL Developer 中 创 建 函 数 ; 6 在
A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内
A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内 容 分 发 网 络 Alibaba Cloud Content Delivery Network 一
錄...1 說...2 說 說...5 六 率 POST PAY PREPAY DEPOSIT 更
AX5000 Version 1.0 2006 年 9 錄...1 說...2 說...3...4 說...5 六...6 6.1 率...7 6.2 POST PAY...8 6.3 PREPAY DEPOSIT...9 6.4...10 6.5...11 更...12...12 LCD IC LED Flash 更 兩 RJ11 ( ) DC ON OFF ON 狀 狀 更 OFF 復 狀 說
ebook 132-2
2 SQL Server 7.0 SQL Server SQL Server 7 SQL Server 7 5 2.1 SQL Server 7 SQL Server 7 SQL Server SQL Server SQL Server 2.1.1 SQL Server Windows NT/2000 Windows 95/98 ( r a n d o m access memory R A M )
R D B M S O R D B M S R D B M S / O R D B M S R D B M S O R D B M S 4 O R D B M S R D B M 3. ORACLE Server O R A C L E U N I X Windows NT w w
1 1.1 D B M S To w e r C D 1. 1 968 I B M I M S 2 0 70 Cullinet Software I D M S I M S C O D A S Y L 1971 I D M S containing hierarchy I M S I D M S I M S I B M I M S I D M S 2 2. 18 R D B M S O R D B
RUN_PC連載_12_.doc
PowerBuilder 8 (12) PowerBuilder 8.0 PowerBuilder PowerBuilder 8 PowerBuilder 8 / IDE PowerBuilder PowerBuilder 8.0 PowerBuilder PowerBuilder PowerBuilder PowerBuilder 8.0 PowerBuilder 6 PowerBuilder 7
Oracle Reports培训教程20.doc
HAND : : 2000 11 28 : 2000 11 28 : MD060 : 1 : 1 2 MD060 2000/02/2 1 1 1 1 ii MD060...ii...4...4...4...4...4...4...4...4 Date Model...4...4...4...4...4...4...4...4 Layout...4...4...4...4...4...4 Parameter
untitled
http://idc.hust.edu.cn/~rxli/ 1.1 1.2 1.3 1.4 1.5 1.6 2 1.1 1.1.1 1.1.2 1.1.3 3 1.1.1 Data (0005794, 601,, 1, 1948.03.26, 01) (,,,,,) 4 1.1.1 Database DB 5 1.1.1 (DBMS) DDL ( Create, Drop, Alter) DML(
软件测试(TA07)第一学期考试
一 判 断 题 ( 每 题 1 分, 正 确 的, 错 误 的,20 道 ) 1. 软 件 测 试 按 照 测 试 过 程 分 类 为 黑 盒 白 盒 测 试 ( ) 2. 在 设 计 测 试 用 例 时, 应 包 括 合 理 的 输 入 条 件 和 不 合 理 的 输 入 条 件 ( ) 3. 集 成 测 试 计 划 在 需 求 分 析 阶 段 末 提 交 ( ) 4. 单 元 测 试 属 于 动
Olav Lundström MicroSCADA Pro Marketing & Sales 2005 ABB - 1-1MRS755673
Olav Lundström MicroSCADA Pro Marketing & Sales 2005 ABB - 1 - Contents MicroSCADA Pro Portal Marketing and sales Ordering MicroSCADA Pro Partners Club 2005 ABB - 2 - MicroSCADA Pro - Portal Imagine that
Microsoft Word - 序+目錄.doc
ORACLE 公 司 的 專 業 認 證 是 當 今 市 場 上 公 認 價 值 最 高, 最 具 鑑 別 力 的 認 證 目 前 全 球 有 超 過 50 萬 以 上 人 已 透 過 Oracle Certification Program 取 得 專 業 認 證, 成 為 職 場 新 鮮 人 的 首 選 認 證, 它 具 有 以 下 三 大 優 勢 : 一 更 多 的 工 作 機 會, 二 更
oracle-Ess-05.pdf
5 135 1 3 6 O r a c l e 1 3 7 1 3 8 O r a c l e 1 3 9 C O N N E C T R E S O U R C E D B A S Y S O P E R S Y S D B A E X P _ F U L L _ D A T A B A S E 1 4 0 I M P _ F U L L _ D A T A B A S E D E L E T E
ebook140-9
9 VPN VPN Novell BorderManager Windows NT PPTP V P N L A V P N V N P I n t e r n e t V P N 9.1 V P N Windows 98 Windows PPTP VPN Novell BorderManager T M I P s e c Wi n d o w s I n t e r n e t I S P I
P4i45GL_GV-R50-CN.p65
1 Main Advanced Security Power Boot Exit System Date System Time Floppy Drives IDE Devices BIOS Version Processor Type Processor Speed Cache Size Microcode Update Total Memory DDR1 DDR2 Dec 18 2003 Thu
SA-DK2-U3Rユーザーズマニュアル
USB3.0 SA-DK2-U3R 2007.0 2 3 4 5 6 7 8 System Info. Manual Rebuild Delete RAID RAID Alarm Rebuild Rate Auto compare Temp Management Load Default Elapse time Event Log 0 2 3 4 2 3 4 ESC 5
epub83-1
C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C
RUN_PC連載_8_.doc
PowerBuilder 8 (8) Web DataWindow ( ) DataWindow Web DataWindow Web DataWindow Web DataWindow PowerDynamo Web DataWindow / Web DataWindow Web DataWindow Wizard Web DataWindow Web DataWindow DataWindow
( Version 0.4 ) 1
( Version 0.4 ) 1 3 3.... 3 3 5.... 9 10 12 Entities-Relationship Model. 13 14 15.. 17 2 ( ) version 0.3 Int TextVarchar byte byte byte 3 Id Int 20 Name Surname Varchar 20 Forename Varchar 20 Alternate
Microsoft Word - SupplyIT manual 3_cn_david.doc
MR PRICE Supply IT Lynette Rajiah 1 3 2 4 3 5 4 7 4.1 8 4.2 8 4.3 8 5 9 6 10 6.1 16 6.2 17 6.3 18 7 21 7.1 24 7.2 25 7.3 26 7.4 27 7.5 28 7.6 29 7.7 30 7.8 31 7.9 32 7.10 32 7.11 33 7.12 34 1 7.13 35 7.14
untitled
-JAVA 1. Java IDC 20 20% 5 2005 42.5 JAVA IDC JAVA 60% 70% JAVA 3 5 10 JAVA JAVA JAVA J2EE J2SE J2ME 70% JAVA JAVA 20 1 51 2. JAVA SUN JAVA J2EE J2EE 3. 1. CSTP CSTP 2 51 2. 3. CSTP IT CSTP IT IT CSTP
第4单元 创建数据类型和表
138 MCSE 2000 SQL 2000 8.1 Stored Procedures Microsoft SQL Server 2000 ( ) 8.1.1 Transact-SQL SQL Server (System Stored Procedures,sp_), master ( sp_prefix ) (Local Stored Procedures), (Temporary Stored
123
資 訊 管 理 系 資 料 庫 教 學 帄 台 MTA 資 料 庫 國 際 證 照 題 庫 分 析 指 導 教 授 : 馮 曼 琳 教 授 組 員 名 單 : 陳 雅 紋 學 號 998C030 蔡 宥 為 學 號 998C114 陳 韋 婷 學 號 998C168 中 華 民 國 一 零 三 年 五 月 I 誌 謝 本 專 題 報 告 得 以 順 利 完 成, 首 先 要 感 謝 恩 師 馮 曼
01 SQL Server SQL Server 2008 SQL Server 6-1 SSIS SQL Server ( master ) ( msdb ) SQL Server ( master ) master 6-1 DTS sysadmin 6-1 sysa
6 01 SQL Server SQL Server 2008 SQL Server 6-1 SSIS 6-1 06 228 6-1 SQL Server ( master ) ( msdb ) SQL Server ( master ) master 6-1 DTS sysadmin 6-1 sysadmin 6-1 SQL Server 2008 SSIS SQL Server (dbo) master
Business Objects 5.1 Windows BusinessObjects 1
Business Objects 5.1 Windows BusinessObjects 1 BusinessObjects 2 BusinessObjects BusinessObjects BusinessObjects Windows95/98/NT BusinessObjects Windows BusinessObjects BusinessObjects BusinessObjects
Junos Pulse Mobile Security R1 2012, Juniper Networks, Inc.
Junos Pulse Mobile Security 4.0 2012 6 R1 2012, Juniper Networks, Inc. Junos Pulse Mobile Security Juniper Networks, Inc. 1194 North Mathilda Avenue Sunnyvale, California 94089 408-745-2000 www.juniper.net
epub 61-2
2 Web Dreamweaver UltraDev Dreamweaver 3 We b We b We Dreamweaver UltraDev We b Dreamweaver UltraDev We b We b 2.1 Web We b We b D r e a m w e a v e r J a v a S c r i p t We b We b 2.1.1 Web We b C C +
RunPC2_.doc
PowerBuilder 8 (5) PowerBuilder Client/Server Jaguar Server Jaguar Server Connection Cache Thin Client Internet Connection Pooling EAServer Connection Cache Connection Cache Connection Cache Connection
IBM Rational ClearQuest Client for Eclipse 1/ IBM Rational ClearQuest Client for Ecl
1/39 Balaji Krish,, IBM Nam LeIBM 2005 4 15 IBM Rational ClearQuest ClearQuest Eclipse Rational ClearQuest / Eclipse Clien Rational ClearQuest Rational ClearQuest Windows Web Rational ClearQuest Client
2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM
Oracle Solaris Studio 12.2 DLight 2010 9 2 2 3 DLight 3 3 6 13 CPU 16 18 21 I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AMP Apache MySQL
自动化接口
基 于 文 件 的 数 据 交 换 的 注 意 事 项 1 SPI 2 COMOS Automation 操 作 手 册 通 用 Excel 导 入 3 通 过 OPC 客 户 端 的 过 程 可 视 化 4 SIMIT 5 GSD 6 05/2016 V 10.2 A5E37093378-AA 法 律 资 讯 警 告 提 示 系 统 为 了 您 的 人 身 安 全 以 及 避 免 财 产 损 失,
EJB-Programming-4-cn.doc
EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session
Microsoft Word - MTK平台生产软件使用说明.doc
MTK 1. 1.1 SMT BSN 1.2 1 IMEI 2. 2 2.1 MTK Flash Flash NAND FlashMP3 1 SMT SOFT Flash 2 SOFT MKT USB-RS232 921600 8 2.2 COPY 2.3 USB PCUSB USB 8 USB USB USB-RS232 (USB ) RS232 PCRS232 8 4V2A 2.4 DA File
Microsoft Word - template.doc
HGC efax Service User Guide I. Getting Started Page 1 II. Fax Forward Page 2 4 III. Web Viewing Page 5 7 IV. General Management Page 8 12 V. Help Desk Page 13 VI. Logout Page 13 Page 0 I. Getting Started
PowerPoint 演示文稿
Hadoop 生 态 技 术 在 阿 里 全 网 商 品 搜 索 实 战 阿 里 巴 巴 - 王 峰 自 我 介 绍 真 名 : 王 峰 淘 宝 花 名 : 莫 问 微 博 : 淘 莫 问 2006 年 硕 士 毕 业 后 加 入 阿 里 巴 巴 集 团 淘 及 搜 索 事 业 部 ( 高 级 技 术 与 家 ) 目 前 负 责 搜 索 离 线 系 统 团 队 技 术 方 向 : 分 布 式 计 算
DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( ) SQL ( ) DB2 SQL DB2 DB2 SQL DB2 DB2 SQL DB2 ( DB2 ) DB2 DB2 DB2 SQL DB2 (1) SQL (2) S
9 DB2 优化器 DB2 SQL select c1 c2 from ( DB2 )??? DB2?!?, no no DB2 I/O ( transrate overhead ) SQL DML (INSERT UPDATE DELETE) DB2 (access plan) DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( 728 747 ) SQL
untitled
2006 6 Geoframe Geoframe 4.0.3 Geoframe 1.2 1 Project Manager Project Management Create a new project Create a new project ( ) OK storage setting OK (Create charisma project extension) NO OK 2 Edit project
AL-MX200 Series
PostScript Level3 Compatible NPD4760-00 TC Seiko Epson Corporation Seiko Epson Corporation ( ) Seiko Epson Corporation Seiko Epson Corporation Epson Seiko Epson Corporation Apple Bonjour ColorSync Macintosh
PROFIBUS3.doc
PLC PLC ProfiBus 3. PROFIBUS-DP PROFIBUS-DP PROFIBUS-DP PROFIBUS S7 STEP7 SIMATIC NET S5 COM PROFIBUS COM5431 PROFIBUS-DP GSD GSD *.GSD *. GSE GSD S7 STEP7 PROFIBUS DP S7-400 CPU416-2DP S7-200 PROFIBUS
RAQMON Context Setting MG PDA Applications RTP / FTP/ HTTP TCP/UDP S ignaling control plane (e.g. RS VP, NS IS) Streaming Media, Transaction, Bulk dat
Realtime Application QOS Monitoring (RAQMON) Dan Romascanu [email protected] 1 RAQMON Context Setting MG PDA Applications RTP / FTP/ HTTP TCP/UDP S ignaling control plane (e.g. RS VP, NS IS) Streaming
f2.eps
前 言, 目 录 产 品 概 况 1 SICAM PAS SICAM 电 力 自 动 化 系 统 配 置 和 使 用 说 明 配 置 2 操 作 3 实 时 数 据 4 人 机 界 面 5 SINAUT LSA 转 换 器 6 状 态 与 控 制 信 息 A 版 本 号 : 08.03.05 附 录, 索 引 安 全 标 识 由 于 对 设 备 的 特 殊 操 作 往 往 需 要 一 些 特 殊 的
Basic System Administration
基 本 系 统 管 理 ESX Server 3.5 ESX Server 3i 版 本 3.5 Virtual Center 2.5 基 本 管 理 指 南 基 本 管 理 指 南 修 订 时 间 :20080410 项 目 :VI-CHS-Q208-490 我 们 的 网 站 提 供 最 新 的 技 术 文 档, 网 址 为 : http://www.vmware.com/cn/support/
User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2
Terminal Mode No User User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2 Mon1 Cam-- Mon- Cam-- Prohibited M04 Mon1 Cam03 Mon1 Cam03
ch_code_infoaccess
地 產 代 理 監 管 局 公 開 資 料 守 則 2014 年 5 月 目 錄 引 言 第 1 部 段 數 適 用 範 圍 1.1-1.2 監 管 局 部 門 1.1 紀 律 研 訊 1.2 提 供 資 料 1.3-1.6 按 慣 例 公 布 或 供 查 閱 的 資 料 1.3-1.4 應 要 求 提 供 的 資 料 1.5 法 定 義 務 及 限 制 1.6 程 序 1.7-1.19 公 開 資
Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco
Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows
OOAD PowerDesigner OOAD Applying PowerDesigner CASE Tool in OOAD PowerDesigner CASE Tool PowerDesigner PowerDesigner CASE To
PowerDesigner Applying PowerDesigner CASE Tool in OOAD [email protected] PowerDesigner CASE Tool PowerDesigner PowerDesigner CASE Tool PowerDesigner CASE Tool CASE Tool PowerDesignerUnified ProcessUMLing
IP505SM_manual_cn.doc
IP505SM 1 Introduction 1...4...4...4...5 LAN...5...5...6...6...7 LED...7...7 2...9...9...9 3...11...11...12...12...12...14...18 LAN...19 DHCP...20...21 4 PC...22...22 Windows...22 TCP/IP -...22 TCP/IP
Go构建日请求千亿微服务最佳实践的副本
Go 构建 请求千亿级微服务实践 项超 100+ 700 万 3000 亿 Goroutine & Channel Goroutine Channel Goroutine func gen() chan int { out := make(chan int) go func(){ for i:=0; i
AL-M200 Series
NPD4754-00 TC ( ) Windows 7 1. [Start ( )] [Control Panel ()] [Network and Internet ( )] 2. [Network and Sharing Center ( )] 3. [Change adapter settings ( )] 4. 3 Windows XP 1. [Start ( )] [Control Panel
入學考試網上報名指南
入 學 考 試 網 上 報 名 指 南 On-line Application Guide for Admission Examination 16/01/2015 University of Macau Table of Contents Table of Contents... 1 A. 新 申 請 網 上 登 記 帳 戶 /Register for New Account... 2 B. 填
「人名權威檔」資料庫欄位建置表
( version 0.2) 1 3 3 3 3 5 6 9.... 11 Entities - Relationship Model..... 12 13 14 16 2 ( ) Int Varchar Text byte byte byte Id Int 20 Name Surname Varchar 20 Forename Varchar 20 Alternate Type Varchar 10
國家圖書館典藏電子全文
EAI EAI Middleware EAI 3.1 EAI EAI Client/Server Internet,www,Jav a 3.1 EAI Message Brokers -Data Transformation Business Rule XML XML 37 3.1 XML XML XML EAI XML 1. XML XML Java Script VB Script Active
DR2010.doc
DR/2010 HACH 11-8-96-2 HACH. DR/2010, / UL E79852 CSA C22.223 LR 58275 VDE GS 1015-92 FCC"A" 15 : AMADOR CORP, HACH. EN50 011/CISPR 11 "B" (EMI)/89/336/EEC/EMC: AMADOR CORP, HACH.. EN50 082-1( )/89/226/EEC
Value Chain ~ (E-Business RD / Pre-Sales / Consultant) APS, Advanc
Key @ Value Chain [email protected] 1 Key@ValueChain 1994.6 1996.6 2000.6 2000.10 ~ 2004.10 (E- RD / Pre-Sales / Consultant) APS, Advanced Planning & Scheduling CDP, Collaborative Demand Planning
Microsoft Word - ORA-04031.doc
如 何 解 决 ORA-04031 错 误 翻 译 :Fenng 文 章 内 容 1. 和 共 享 池 (shared pool) 相 关 的 实 例 参 数 2. 诊 断 ORA-04031 错 误 3. 解 决 ORA-04031 错 误 已 知 的 Oracle BUG 共 享 池 碎 片 o V$SQLAREA 视 图 o X$KSMLRU 视 图 小 的 共 享 池 尺 寸 o 库 高 速
