保持存档表结构(列等)与Live表同步

时间:2013-02-21 11:52:12

标签: sql oracle plsql triggers alter

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

由于TMain是一个易失性表,并且其中的列在一段时间内被更改/删除,我想要进行某种控制,以便在更改TMain时TArchive始终保持同步。

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

感谢任何建议和解决方案。

2 个答案:

答案 0 :(得分:1)

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

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

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

  • 如果您不经常更改表结构,只需在DBA核对清单中添加规则。
  • 如果您经常更改表格,也许您可​​以查看不需要DDL的备用架构。例如,将易失性信息存储为结构较少的格式(如XML),您还可以根据行添加可能包含不同类型信息的通用列。即使是本地化的键值表也可以减少更改表结构的需要。

答案 1 :(得分:1)

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