Oracle主库更新后从库未同步,如何通过视图日志检查刷新模式问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计757个文字,预计阅读时间需要4分钟。
相关专题
物化视图在主库更新后从库没同步,根本原因不是“刷新没触发”,而是物化视图日志(materialized view log)本身在data guard备库上不可用——oracle默认不复制物化视图日志表,且备库是只读的,无法写入日志。
物化视图日志不会被DG自动同步
这是最容易被忽略的前提:DG只传输归档日志和在线重做日志,不传输用户创建的物化视图日志表(如 MLOG$_sales)。这些日志表存在于主库的用户schema下,属于普通堆表,不在DG保护范围内。
- 你在主库执行
CREATE MATERIALIZED VIEW LOG ON t1,只会在主库建一张MLOG$_T1表;从库上完全不存在这张表 - 即使主库对
t1做了DML,日志记录只写入主库的MLOG$_T1,从库既看不到、也写不了 - 所以从库上的物化视图(哪怕定义相同)根本无法做快速刷新(
FAST),DBA_MVIEW_ANALYSIS.FAST_REFRESHABLE必然为NO
从库上物化视图只能用COMPLETE刷新模式
如果你硬要在备库建一个同名物化视图,它只能走 COMPLETE 刷新路径,也就是全量重查主表。
本文共计757个文字,预计阅读时间需要4分钟。
相关专题
物化视图在主库更新后从库没同步,根本原因不是“刷新没触发”,而是物化视图日志(materialized view log)本身在data guard备库上不可用——oracle默认不复制物化视图日志表,且备库是只读的,无法写入日志。
物化视图日志不会被DG自动同步
这是最容易被忽略的前提:DG只传输归档日志和在线重做日志,不传输用户创建的物化视图日志表(如 MLOG$_sales)。这些日志表存在于主库的用户schema下,属于普通堆表,不在DG保护范围内。
- 你在主库执行
CREATE MATERIALIZED VIEW LOG ON t1,只会在主库建一张MLOG$_T1表;从库上完全不存在这张表 - 即使主库对
t1做了DML,日志记录只写入主库的MLOG$_T1,从库既看不到、也写不了 - 所以从库上的物化视图(哪怕定义相同)根本无法做快速刷新(
FAST),DBA_MVIEW_ANALYSIS.FAST_REFRESHABLE必然为NO
从库上物化视图只能用COMPLETE刷新模式
如果你硬要在备库建一个同名物化视图,它只能走 COMPLETE 刷新路径,也就是全量重查主表。

