选择 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 页。