选择 Db2 复制密钥

重要信息: IBM Cloud Pak for Data 4.6 版本将于 2025 年 7 月 31 日结束支持 (EOS)。 欲了解更多信息,请参阅 IBM Cloud Pak for Data 版本 4.X 的停止服务公告

IBM Cloud Pak for Data 4.6 版本支持结束之前,升级到 IBM Software Hub 5.1 版本。 更多信息,请参阅 IBM Software Hub 版本 5.1 文档中的升级 IBM Software Hub。

复制要求在每个表上使用唯一约束,以便在可能复制记录的所有数据库中唯一标识每条记录。 这是复制密钥。 应用程序指定在更新和删除的 WHERE 子句中指定此键,以确保更新正确的记录。

键值必须在每个数据库实例中具有相同的含义,并且是全局唯一的。 与约束相关联的唯一索引是检测和解决冲突的必备条件。

如果没有索引,在发生冲突时(数据复制之前,同一行在不同站点更新),数据会在源和目标之间无声无息地发生偏离。

重要说明:
  • 行组织表必须有强制执行的主键、唯一约束或唯一索引。
  • 列组织可以有非强制主键或唯一约束。 即使不通过 Db2 ,它也必须唯一标识一行,否则目标处的数据会随着时间的推移而悄无声息地发生偏离。
  • 在已有数据的列组织表中添加唯一约束时,需要停用并重新激活数据库。

当表中没有任何列集可以唯一标识每一行时,常见的做法是在表中添加隐藏标识列。 Db2 然后自动为每一行生成一个唯一值。 为确保复制键值对每个站点都是唯一的,可以添加第二列来标识站点。 通过将身份列和站点列结合起来作为复制密钥,可以确保无论应用程序在哪个站点运行,都能生成唯一的值。 可以声明隐藏这些列,这样就不会影响您的应用程序。

例如,以下语句创建了两个隐藏列 IBMQREP_REPLKEY 和 IBMQREP_SITE,它们唯一标识每一行:

IBMQREP_REPLKEY BIGINT NOT NULL IMPLICITLY HIDDEN GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1)
IBMQREP_SITE SMALLINT NOT NULL IMPLICITLY HIDDEN WITH DEFAULT 1

其中,IBMQREP_SITE 列的默认值为 1 或 2,具体取决于在哪个站点创建。

下面的语句添加了一个唯一索引,用于引用两个隐藏列:

ALTER TABLE table_name ADD CONSTRAINT IBMQREP_UNIQCONST UNIQUE(IBMQREP_REPLKEY, IBMQREP_SITE) NOT ENFORCED;

有关键要求的详细讨论,包括向没有唯一约束的表添加唯一约束的方法,请参阅《 使用 Db2 V11.5 在 Db2 列式表上复制事务 》第 21-24 页。