如果底层表结构发生变化,我们是不是需要重新创建物化视图

Posted

技术标签:

【中文标题】如果底层表结构发生变化,我们是不是需要重新创建物化视图【英文标题】:do we need to recreate a materialized view if the underlying table structure changes如果底层表结构发生变化,我们是否需要重新创建物化视图 【发布时间】:2014-07-28 07:48:11 【问题描述】:

我已经更改了我的基表中列的顺序,但是在此表具体化之后显示为无效,即使在刷新它之后也是如此。

我需要重新创建物化视图还是可以实现其他一些东西。

发生这种情况是因为我删除并重新创建了基础基表吗?

请帮忙。 谢谢!

【问题讨论】:

您是如何“更改订单”的(以及为什么)?通过删除并重新创建表?它(并且确实)有相关的物化视图日志表吗? MV 有什么错误 - 您可以在 user_errorsall_errors 视图中看到。 是的,Alex,我已经删除并重新创建了表。不,它没有相关的物化视图日志表。实际上我没有收到任何错误,问题是它不会从基表中加载最新值,并且即使在刷新后,物化对象上也会有一个小十字图标。 手动刷新不会出现任何错误? user_errors 中没有该视图的内容?向您显示红十字的客户端是否允许您选择刷新它或查看有关它及其错误的更多信息? 是的,在执行手动刷新以及 user_errors 或 all_errrors 时没有错误。是的,我正在使用 SQL Developer,它有一个刷新它的选项,但没有错误检查选项。 select * from user_objects where status = 'INVALID';我可以在这个列表中看到这个物化视图 【参考方案1】:

您不需要重建它。但是,如果您更改物化视图所依赖的对象,则需要重新编译视图以验证和计算它的陈旧性:

ALTER MATERIALIZED VIEW mview_name COMPILE;

您可以检查是否需要重新编译您的视图,方法是检查 USER_MVIEWS 中的 STALENESS 列以查找您的 MV。如果列显示“NEEDS_COMPILE”,则需要执行上述语句。

还可以查看数据库数据仓库指南中的Invalidating Materialized Views 和文档中的ALL_MVIEWS 参考。

【讨论】:

非常感谢!物化视图有编译错误。

以上是关于如果底层表结构发生变化,我们是不是需要重新创建物化视图的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 物化视图中的视图

Oracle SQL 面试关于物化视图的问题?

SQL:视图和表

03 如何修改数据表? | OushuDB 数据库使用入门

底层表更改时更新物化视图

Oracle设置物化视图的自动刷新