oracle – 重新定义物化视图,无需停机

oracle – 重新定义物化视图,无需停机,第1张

概述我有一个物化视图,我需要重新定义SQL.我们有一个外部系统可以通过db链接查看视图,并且怪物视图需要5分钟来刷新视图中的数据.我知道如何为视图重新定义SQL的唯一方法是删除它并重新创建它,但如果外部系统找不到表,或者它没有完整的数据集,那将是非常糟糕的.我需要尽可能少的停机时间. 有没有办法在本地或更优雅地执行此 *** 作: >为物化视图创建公共同义词,并使使用该视图的所有内容都使用同义词. >使用新S 我有一个物化视图,我需要重新定义sql.我们有一个外部系统可以通过db链接查看视图,并且怪物视图需要5分钟来刷新视图中的数据.我知道如何为视图重新定义sql的唯一方法是删除它并重新创建它,但如果外部系统找不到表,或者它没有完整的数据集,那将是非常糟糕的.我需要尽可能少的停机时间.

有没有办法在本地或更优雅地执行此 *** 作:

>为物化视图创建公共同义词,并使使用该视图的所有内容都使用同义词.
>使用新sql创建新的物化视图
>将同义词更改为指向新视图
>放弃旧观点.

我有动态执行此 *** 作的代码,但它变得非常难看.似乎应该有更好的方法来处理这个问题.

解决方法 Oracle有一个内置的解决方案.请记住,mvIEw声明与表的声明是分开的.

原来的mvIEw

create materialized vIEw mv1 as select dept,count(*) as cnt from scott.emp;

我们想要更改声明,以便只计算5个以上的部门

drop materialized vIEw mv1 preserve table;

注意PRESERVE table子句 – 表mv1没有下垂 – 只有mvIEw层.

desc mv1

现在我们在现有表的基础上使用不同的查询创建mvIEw

create materialized vIEw mv1 on prebuilt table as   select dept,count(*) as cnt from scott.emp where dept > 5;

注意on prebuilt表子句. mvIEw正在使用现有对象.

exec dbms_mvIEw.refresh_mvIEw('mv1');
总结

以上是内存溢出为你收集整理的oracle – 重新定义物化视图,无需停机全部内容,希望文章能够帮你解决oracle – 重新定义物化视图,无需停机所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/sjk/1165870.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存