【问题标题】:Stopping MV from refreshing while other database offline在其他数据库离线时停止 MV 刷新
【发布时间】:2013-10-28 18:40:12
【问题描述】:

我有一个 oracle 数据库 (DB1),它通过到 DB2 的 db-link 使用预定的作业在每个午夜刷新物化视图。

MV 的刷新使用一个过程来运行,该过程遍历模式中的每个表名并逐个刷新每个表。

最近,DB2 所在的地方出现了电力问题。如果 DB2 在 DB1 开始其工作时处于脱机状态,那么 DB1 上的物化视图将变为空。如果没有连接,为什么刷新不会简单地失败?我怎样才能阻止这种情况发生?

提前致谢

【问题讨论】:

    标签: database oracle materialized-views dblink


    【解决方案1】:

    您确定刷新过程没有出错(在这种情况下,错误会写入警报日志)?

    您是否正在完全刷新?还是增量刷新?你在做原子刷新吗?还是非原子刷新?我的猜测是您正在进行完整的非原子刷新(这在幕后意味着您正在执行TRUNCATE 和直接路径INSERT),其中TRUNCATE 成功但直接路径@ 987654324@ 失败。您可以执行完整的原子刷新,而不是执行DELETEINSERT。但是,当远程数据库可用时,这将比非原子刷新慢,并且会生成更多REDO。或者,您可能会改为执行增量刷新,但这至少需要在远程数据库上创建物化视图日志。

    【讨论】:

    • ATOMIC_REFRESH => 错误。我无法仅对 DB1 对远程数据库 (DB2) 进行任何更改。
    • @AYR - 好的。您是否愿意为进行原子刷新而承担刷新速度较慢的成本?
    • 是的。只要它在不应该刷新的时候不刷新,它就可以花费尽可能长的时间。我是否简单地将其更改为 true 就可以了?
    • @AYR - 即使 atomic_refresh 设置为 true,物化视图仍将刷新。刷新仍然会失败。失败仍将写入alert.log。不同之处在于目标将能够回滚刷新的效果,因为它是原子的。是的,如果您使用atomic_refresh => false 调用dbms_mview.refresh,您只需将其更改为true 即可获得原子刷新行为。
    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 2020-02-27
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多