新的Oracle约束类型

时间:2010-05-14 19:15:38

标签: oracle oracle11g

我必须承认,这让我在生产系统中感到惊讶。我最近在几个表中添加了补充日志记录,以便与Oracle Change Data Capture一起使用。在不相关的代码构建期间的例行检查显示,这显然在类型为“S”的数据库中创建了禁用约束。我似乎无法在Oracle文档中找到任何对此的引用,单个“S”使得Google难以获得相关内容。

我的问题:

  1. 任何事情都可以 补充记录结果 隐式约束?
  2. 为什么使用DISABLED创建它 状态?
  3. 有没有人有经验 启用这些的影响?我们有 一个标准的清理过程 部署完成后运行 启用可能具有的约束 已禁用或启用无效 出于数据迁移的原因。

2 个答案:

答案 0 :(得分:3)

记录约束类型:http://download.oracle.com/docs/cd/E11882_01/server.112/e10820/statviews_1045.htm#REFRN20047

S代表“补充日志记录”,在此处进一步说明:http://download.oracle.com/docs/cd/E11882_01/server.112/e10704/strms_glossary.htm#CHDIHHGA和此处:http://download.oracle.com/docs/cd/E11882_01/server.112/e10705/prep_rep.htm#STREP107

我对此没有任何经验。这是在tahiti.oracle.com上搜索的结果。

此致 罗布。

答案 1 :(得分:3)

支持某些类型的异步数据捕获需要补充日志记录:例如AQ Streams和CDC(Oracle和第三方的实现)。这些机制通过读取重做日志并将这些更改应用于其他Oracle数据库来工作。补充日志记录的目的是增加重做日志中包含的数据量。

启用补充日志记录有两种方法。在更新版本的数据库中,我们可以在数据库级别设置最少的日志记录

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

另外,我们可以在Supplemental Log Groups中添加指定表和列。其重点是在更改表中包含未更改列的值,因为它可以更轻松地在目标数据库中应用更改。 Find out more

显然,S类型约束标识补充日志组中的列。我认为它们被禁用的原因是因为它们不强制执行数据完整性规则(与主键或检查约束不同)。如果是这样,我认为启用它们是不明智的,因此您应该重新编写自动清理以过滤S类型的约束。