【问题标题】:materialized view update time is not correct物化视图更新时间不正确
【发布时间】:2017-08-08 12:40:14
【问题描述】:

我不知道物化视图是如何更新的。我创建了物化视图,并每分钟更新一次。

create materialized view vmat 
refresh force on demand
start with to_date('07-08-2017 10:00:00', 'dd-mm-yyyy hh24:mi:ss') 
next sysdate+(1/(24*60)) 
as
 select * from mat where id>3;`

但它在user_mview_refresh_times 的 2017/8/7 16:21:07 刷新了。更新时间为2017/8/7 16:21:00。所以我很困惑。

【问题讨论】:

  • 所以你是说它在你打算更新后 7 秒更新??
  • 我认为不可能更新7秒。表中只有10行。我从07-08-2017 10:00:00开始,每分钟更新一次表。所以应该更新在每一分钟的开始。我只是做一个测试,然后将它应用到我的工作中。
  • 我做了一点改变,让物化视图每小时更新一次。我觉得很奇怪。当我在'07-08-2017 10:15:24'创建物化视图时,下一次更新时间是'07-08-2017 11:15:24'。似乎'start with'子句不起作用。不管'start with'子句是什么。
  • oracle数据库版本是11gR2。我认为应该在'07-08-2017 11:00:00'更新,而不是'07-08-2017 11:15:24'。

标签: oracle materialized-views


【解决方案1】:

next 参数将刷新时间指定为日期时间,数据库将其转换为时间间隔。我认为问题在于您对 startnext 的定义不同。特别是您使用的是原始sysdate,其中包含精确到秒的时间元素。这就是为什么你会得到 LAST_REFRESH 的那些奇数值。

试试这个公式(使用你原来的时间):

...
, Start => trunc(sysdate)+(10/24)
, Next => trunc(sysdate)+(1/1440)

因此,初始开始时间为 10:00:00,第一次刷新为 10:01:00。

【讨论】:

  • 但是您显示的代码不正确。当我创建物化视图时,第一次更新视图。然后 DBMS 计算下一次更新视图的日期。是的,我得到了。非常感谢。我认为 Next =>trunc(sysdate,'mi')+1/1440
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 2010-09-27
  • 2022-11-30
  • 1970-01-01
  • 2018-08-05
  • 2011-01-02
  • 1970-01-01
相关资源
最近更新 更多