加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 百科 > 正文

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

发布时间:2021-03-06 03:10:26 所属栏目:百科 来源:网络整理
导读:我有一个物化视图,我需要重新定义SQL.我们有一个外部系统可以通过db链接查看视图,并且怪物视图需要5分钟来刷新视图中的数据.我知道如何为视图重新定义SQL的唯一方法是删除它并重新创建它,但如果外部系统找不到表,或者它没有完整的数据集,那将是非常糟糕的.

我有一个物化视图,我需要重新定义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');

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读