如何创建物化视图日志_CREATE MATERIALIZED VIEW LOG记录基表DML变更

张开发
2026/4/6 5:40:45 15 分钟阅读

分享文章

如何创建物化视图日志_CREATE MATERIALIZED VIEW LOG记录基表DML变更
物化视图日志必须显式创建且绑定基表ON COMMIT刷新依赖其存在建日志需指定WITH PRIMARY KEY、INCLUDING NEW VALUES等关键参数否则FAST刷新失败或降级为COMPLETE。物化视图日志必须在基表上显式创建否则 ON COMMIT 刷新会失败物化视图日志不是自动产生的哪怕你只建一个 on commit 刷新的物化视图也得先手动建日志。没它refresh 会直接报错 ora-12004: refresh fast cannot be used 或更直白的 ora-12006: a materialized view log already exists on the table注意这个错误其实是“日志存在但不满足要求”不是“不存在”。关键点日志绑定的是基表不是物化视图一个基表可被多个物化视图共享同一个日志只要字段需求兼容。建日志前确认基表有主键WITH PRIMARY KEY 是最常用且推荐的选项如果物化视图要查 ROWID日志必须带 WITH ROWID但 Oracle 12c 默认启用 ROWID 跟踪所以多数情况不用显式写如果物化视图含聚合或 GROUP BY日志必须包含对应列且需 INCLUDING NEW VALUES否则 FAST 刷新会退化成 COMPLETECREATE MATERIALIZED VIEW LOG ON 表名的常见参数组合与陷阱参数选错轻则刷新变慢重则 FAST 刷新完全不可用。Oracle 对日志结构非常敏感尤其是涉及 JOIN 或 AGGREGATE 的物化视图。WITH PRIMARY KEY90% 场景够用但若基表主键是复合主键且物化视图只引用其中一部分列仍可能触发 ORA-12033无法使用过滤器INCLUDING NEW VALUES必须加尤其当物化视图含 SUM()、COUNT(*) 等聚合函数漏掉它会导致 FAST 刷新拒绝执行降级为 COMPLETE不要随便加 SEQUENCE除非物化视图定义里明确用了 SEQUENCE 关键字极少场景否则纯属冗余还占空间日志建好后别手动删基表上的索引——MLOG$_xxx 日志表依赖基表主键索引删了索引可能导致后续 DML 报 ORA-00600 内部错误为什么 ALTER TABLE ADD CONSTRAINT 主键后物化视图日志不生效Oracle 不会自动把已有日志升级适配新主键。即使你后来给基表加了主键之前建的 WITHOUT PRIMARY KEY 日志依然无效——FAST 刷新照样失败。 Cleanup.pictures 智能移除图片中的物体、文本、污迹、人物或任何不想要的东西

更多文章