目前我使用REFRESH ON DEMAND创建的Materialized视图所以在这种情况下我需要使用以下命令显式刷新MV:
BEGIN DBMS_MVIEW.REFRESH('MV_DATA'); END;
但现在我需要每天刷新这个MV,所以有人可以帮忙写这个。我已经看到我们可以使用编写显式Job或在MV本身中使用COMPLETE / FAST REFRESH语句来刷新此MV。
提前致谢!
答案 0 :(得分: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小时刷新一次mview (sysdate + 1)
。
有关如何操作的详细信息,请按this link
答案 1 :(得分: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>
答案 2 :(得分:0)
我已经编辑了Sarath的脚本,使其可以在特定时间(即上午6点)运行。
class SiteConfigViewSet(PublicViewSet):
serializer_class = serializers.SiteConfigSerializer
def get_queryset(self):
subconfigs = Process.objects.filter(flag=True)
macro_subconfigs = MacroProcess.objects.filter(flag=True)
return permissions.get_allowed_sites(self.request).prefetch_related(
Prefetch("configs__subconfigs", queryset=subconfigs),
Prefetch("configs__subconfigs__macro_subconfigs", queryset=macro_subconfigs),
)
答案 3 :(得分:-1)
每天凌晨1点刷新电视
创建材料视图1 立即建立 使用索引 按需刷新以sysdate + 0下一个开始(trunc(sysdate)+1)+1/24 使用默认的本地回滚段 使用强制约束禁用查询重写 “您的查询”