首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中更改同义词指针的物化视图刷新

在SQL中更改同义词指针的物化视图刷新
EN

Stack Overflow用户
提问于 2014-02-28 14:22:10
回答 2查看 1.2K关注 0票数 0

我有两张桌子,TABLE_1TABLE_2。然后,我们有一个名为TABLE的同义词,它指向TABLE_1TABLE_2。当TABLE_1处于活动状态时,ETL填充TABLE_2,当运行完成时,它将TABLE同义词切换为TABLE_2,使其成为活动表。然后,我有一个物化视图,它执行类似于SQL:select * from TABLE这样的操作。我看到的是,在物化视图第一次运行后,它也缓存了同义词所指向的实际表。因此,当ETL运行并翻转同义词以指向TABLE_2时,当对物化视图进行完全刷新时,它仍然认为同义词指向TABLE_1。为什么当我完成一次完全刷新时,物化视图没有拿起指向TABLE_2的新的同义词指针

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-10 13:00:51

以下是Oracle的bug的解决方案:

代码语言:javascript
复制
alter materialized view MV_NAME nocache;
BEGIN DBMS_SNAPSHOT.REFRESH( MV_NAME,'C'); end;
alter materialized view MV_NAME cache;
票数 1
EN

Stack Overflow用户

发布于 2014-02-28 15:05:41

我在Oracle文档中找不到任何有用的东西,只是启用了逻辑:

  1. 我首先创建了物化视图
  2. 实际上,为了支持这个物化视图,Oracle使TABLE具有特定的结构(取决于您的查询结构)和刷新表的规则(据我所知,它被称为SUMMARY,但名称在这里不起任何作用)。
  3. 我将同义词目标更改为具有另一个结构的表。
  4. 新的目标表不适合以前的结构(例如,它有完全不同的数量/数据类型的列),以前的结构那时是无效的,不再工作了。那么,地下桌子就必须重新建造。

这就是为什么我要说,这是防止错误的唯一方法:引用真正的目标,而不是创建物化视图的同义词。

因此,的答案是:因为物化视图是一个静态的类似表的对象,依赖于它所选择的数据集;这就是为什么要防止不一致,物化视图引用真实的对象。

有时,我真的想知道Oracle隐藏了多少细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22097725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档