Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 保持存档表结构(列等)与活动表同步_Sql_Oracle_Plsql_Triggers_Alter - Fatal编程技术网

Sql 保持存档表结构(列等)与活动表同步

Sql 保持存档表结构(列等)与活动表同步,sql,oracle,plsql,triggers,alter,Sql,Oracle,Plsql,Triggers,Alter,我有一个包含大量数据的表(TMain),它被归档到一个归档表(TArchive)中,其中的记录超过3个月 由于TMain是一个易失性的表,表中的列会随着时间的推移而改变/删除,所以我希望有某种控制,以便在TMain改变时,TArchive始终保持同步 在Oracle中实现这一目标的最佳方法是什么 欢迎提出任何建议和解决方案。Oracle中的DDL不是事务性的。这意味着,在Oracle中跨两个对象复制DDL的任何自动化过程都有一定的缺陷。如果第二个DDL语句失败怎么办?你不能回滚第一个,你被卡住了

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

由于TMain是一个易失性的表,表中的列会随着时间的推移而改变/删除,所以我希望有某种控制,以便在TMain改变时,TArchive始终保持同步

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


欢迎提出任何建议和解决方案。

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

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

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

  • 如果不经常更改表结构,只需在DBA检查表中添加一条规则
  • 如果您过于频繁地修改表,也许可以研究不需要DDL的替代体系结构。例如,将易失性信息存储为非结构化格式(如XML),还可以添加通用列,根据行的不同,这些列可能包含不同类型的信息。即使是本地化的键值表也可以减少更改表结构的需要

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

建立一个组织过程,以便表上的DDL遵循一组规则?@Andy您尝试过什么?你的研究结果是什么?请详细说明。