我在一台服务器上有一个由 DB 链接创建的物化视图。该 Mview 上正在运行一项作业。(之前使用 dbms_refresh.make 创建)。
现在我在原始表中创建了 3 个新字段。我的疑问是。
1)我是否需要再次删除并创建 Mview,如果是,我是否需要再次在主服务器上创建 Mview 日志 2)在 Mview 上运行的作业会发生什么,我需要重新创建它吗?
还有在 Mview 上创建的视图,所以 -- 如果我运行创建或替换视图查询,它会产生任何问题吗?
请指导。
谢谢!
我在一台服务器上有一个由 DB 链接创建的物化视图。该 Mview 上正在运行一项作业。(之前使用 dbms_refresh.make 创建)。
现在我在原始表中创建了 3 个新字段。我的疑问是。
1)我是否需要再次删除并创建 Mview,如果是,我是否需要再次在主服务器上创建 Mview 日志 2)在 Mview 上运行的作业会发生什么,我需要重新创建它吗?
还有在 Mview 上创建的视图,所以 -- 如果我运行创建或替换视图查询,它会产生任何问题吗?
请指导。
谢谢!
如果您需要在物化视图中包含新列,那么是的,您需要重新创建物化视图。您必须显式删除视图,因为没有“创建或替换物化视图”语句。
DROP MATERIALIZED VIEW blah;
CREATE MATERIALIZED VIEW blah...
删除/重新创建物化视图应该重新创建刷新作业。不是 100% 确定的,但您可能也应该重新创建日志。
而且,如果您不需要在视图中包含新列,那么您真的不需要做任何事情......
在删除/创建物化视图之后,您应该在之后重新编译其他视图,因为它们可能已经失效。
您可以检查是否发生了这种情况
select *
from user_objects
where status = 'INVALID';
重新编译视图可以用
alter view the_view compile;
或者
exec dbms_utility.compile_schema(user);
这只是重新编译架构中的所有内容。确保在执行此操作时没有正在运行的作业!