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

时间:2014-03-18 13:37:22

标签: oracle view refresh materialized-views

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

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

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

提前致谢!

4 个答案:

答案 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 使用默认的本地回滚段 使用强制约束禁用查询重写 “您的查询”