创建物化视图,每天刷新记录

问题描述 投票:9回答:3

目前我使用REFRESH ON DEMAND创建的Materialized视图,所以在这种情况下我需要使用以下命令显式刷新MV:

BEGIN DBMS_MVIEW.REFRESH('MV_DATA'); END; 

但是现在我需要每天刷新这个MV,所以有人可以帮忙写这个。我已经看到我们可以使用在MV本身中编写显式Job或使用COMPLETE / FAST REFRESH语句来刷新此MV。

提前致谢!

oracle view refresh materialized-views
3个回答
14
投票

您需要使用START WITH和NEXT子句创建物化视图

create materialized view <mview_name>
refresh on demand 
start with sysdate next sysdate + 1
as select ............

因此,如果您想每天刷新mview,您需要按需刷新它,并将下一个刷新时间设置为sysdate + 1。您可以设置任何间隔。

执行此操作后,将创建物化视图,并在Oracle中设置作业,每24小时(sysdate + 1)将刷新mview。

有关如何执行此操作的详细信息,请访问this link


2
投票

如果你只需要一个SQL查询来简单地在12 AM刷新,那么下面的查询就足够了。

CREATE MATERIALIZED VIEW MV_DATA
BUILD IMMEDIATE 
REFRESH FAST START WITH (SYSDATE) NEXT (SYSDATE + 1) WITH ROWID
ON COMMIT
DISABLE QUERY REWRITE
AS SELECT * FROM <YOUR TABLE>

如果你需要在6 AM周围刷新它,那么使用下面的脚本。您可以看到+ 6 / 24和其他逻辑。如果您需要更改为4 AM,请使用逻辑+ 4 / 24

CREATE MATERIALIZED VIEW MV_DATA
BUILD IMMEDEATE 
REFRESH FAST START WITH (SYSDATE) NEXT (SYSDATE + 1) + 6 / 24 WITH ROWID
ON COMMIT
DISABLE QUERY REWRITE
AS SELECT * FROM <YOUR TABLE>

0
投票

我编辑了Sarath的脚本,以便在特定时间(即早上6点)运行。

CREATE MATERIALIZED VIEW MV_DATA
BUILD IMMEDEATE 
REFRESH FAST START WITH (SYSDATE) NEXT (TRUNC(SYSDATE) + 1) + 6 / 24 WITH ROWID
ON COMMIT
DISABLE QUERY REWRITE
AS SELECT * FROM YOURTABLE
© www.soinside.com 2019 - 2024. All rights reserved.