我正在使用带快速刷新的MVIEW来复制网络中的某些表。一切都很好,但在考虑我的删除/清除过程时遇到了一个问题。
提供日志表的MVIEW的源数据保留期为7天。即我将运行夜间清除过程以删除当前日期之后7天以上的数据。 但是,目标MVIEW位于ODS上,并且具有30天的数据保留策略。此外,这些MVIEW目前还没有填充另一个模式或一组表。
问题是,当我从源表中删除时,那些删除语句将传播到目标MVIEW,现在我不再有30天的数据 - 只有7个。
有没有办法为MVIEW日志表排除日志记录DELETE?我注意到在MLOG $ _Table_Name中有一个列'DMLTYPE $$'。我可以以某种方式从Log表中删除DMLTYPE $$ ='D'的所有记录吗?
谢谢大家,是的,我确实尝试过在线研究。 问候, 史蒂夫
答案 0 :(得分:0)
我认为您可以在运行刷新之前手动删除物化视图日志中的数据。这可能会奏效。但这不是我真正感到满意的解决方案。这将是一个非常定制的解决方案,可能不会得到官方支持。如果可能有另一个物化视图依赖于物化视图日志,则必须确保只删除与物化视图订阅相关的那些行。此外,目标上的物化视图需要是可更新的,以便您能够通过单独的过程手动删除超过30天的行。
如果这些是业务要求,那么Oracle Streams(或GoldenGate)之类的东西将是更合适的架构解决方案。这些产品旨在为您提供更灵活的应用逻辑变更记录(LCR)。例如,在Streams中,创建一个丢弃删除LCR的自定义应用程序处理器就很容易了。由于您将LCR应用于目标上的表而不是物化视图,因此您的30天清除过程更容易管理。这将是一个相对常见的Streams设置,而不是一个非常独特的物化视图设置。