1

我有一个包含大量数据的表 (TMain),它被归档到一个归档表 (TArchive) - 其中记录超过 3 个月。

由于 TMain 是一个易失性表,并且其上的列会随着时间的推移而更改/删除,因此我希望进行某种控制,以便 TArchive 在 TMain 更改时始终保持同步。

在 Oracle 中实现这一目标的最佳方法是什么?

任何建议和解决方案表示赞赏。

4

2 回答 2

1

Oracle 中的 DDL 不是事务性的。这意味着在 Oracle 中跨两个对象复制 DDL 的任何自动化过程都会有些缺陷。如果第二个 DDL 语句失败怎么办?你不能回滚第一个,你被卡住了。

此外,您应该已经有一个外部组织流程来验证 DDL。例如,在许多组织中,开发人员只能对开发数据库进行更改。这些更改被传播到临时数据库以进行测试。只有 DBA 可以将这些更改在验证后推送到生产环境。即使开发人员和 DBA 是同一个人,您也应该遵循以下准则:验证每个 DDL。

由于这些原因,我建议不要自动化 DDL 复制。这看起来太麻烦了。反而:

  • 如果您不经常更改表结构,只需在 DBA 清单中添加一条规则即可。
  • 如果您过于频繁地更改表,也许您可​​以研究不需要 DDL 的替代架构。例如,将易失性信息存储为结构较少的格式(如 XML),您还可以添加通用列,这些列可能根据行保存不同类型的信息。即使是本地化的键值表也可以减少更改表结构的需要。
于 2013-02-21T12:42:30.497 回答
1

保持历史数据与当前数据存储方式相同的最佳解决方案是分区。
在11G你也可以设置间隔,oracle会自动创建新的分区。不过有一件事,如果您想使用压缩,请考虑到当有压缩分区时,DDL 更改是不可能的。

于 2013-02-21T17:09:48.510 回答