最近需要在Oracle 19c上创建几个物化视图,所有的基表都位于远程oracle数据库上,查询使用dblink连接表,不允许快速刷新。他们中的大多数可以在添加一些提示后在几秒钟内完成刷新,比如 use_hash 等。但是当在查询上创建一个带有 union 的提示时,提示根本不起作用,幸运的是只有一个 union,所以我拆分了查询分为两个部分,但另一个问题出现了,其中一个物化视图的创建时间不超过10秒,但需要数小时甚至数天都无法完成刷新。我在网上搜索并得到以下答案:
- 使用 dbms_mview.refresh(mv_name, 'C', atomic_refresh=>false)。此解决方案不起作用。
- 快速刷新。该解决方案不允许。
- 而不是刷新,每次都重新创建物化视图,这是一种解决方法,但不是解决方案。
- 使用提示 optimizer_features_enable(9.0.0),我在表上模拟了问题(因为我无法在物化视图上插入...选择...),似乎提示确实有效,但是当我尝试将提示应用到物化视图,从执行计划中可以看出提示已被忽略。我还尝试在 dbms_refresh.refresh(mv_name) 之前的调度程序作业上添加 alter session set optimizer_features_enable='9.0.0',但它不起作用。想知道有没有人对这个问题有任何想法?谢谢你。