使用NEXT子句在oracle中设置周期性的物化视图刷新并验证刷新

1 oracle materialized-view oracle-apex

我找不到有关为 oracle 的物化视图刷新设置特定时间的正确文档。我阅读了文档和那里的一些示例,但是没有关于使用 NEXT 子句的明确文档。例如,我将如何在每天上午 8 点和晚上 8 点设置刷新?我将如何实现每天刷新 3 次?

这是我在我的案例中使用的。我知道这将在明天早上 7 点开始刷新,接下来每 12 小时刷新一次?

alter materialized view MY_VIEW
refresh fast
start with (sysdate+1) + 7/24
next trunc(sysdate) + ((trunc(to_char(sysdate,'HH24')/12)*12)+12)/24
Run Code Online (Sandbox Code Playgroud)

我还想知道是否有办法知道如何在设置时间后验证物化视图是否已刷新。

更新:我试图每小时刷新我的 MV,但没有奏效。我想知道为什么会这样。这是我使用的:

CREATE MATERIALIZED VIEW  "MYVIEW"
  ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "APEX_xxxxxxxxxxxxxxxxxx" 
  BUILD IMMEDIATE
  USING INDEX 
  REFRESH FAST ON DEMAND START WITH sysdate+0 NEXT sysdate+1/24
  USING DEFAULT LOCAL ROLLBACK SEGMENT
  USING ENFORCED CONSTRAINTS DISABLE QUERY REWRITE
  AS select *
from <mydblinktable>
Run Code Online (Sandbox Code Playgroud)

Phi*_*lᵀᴹ 5

我会DBMS_SCHEDULER改用,每次刷新都有一个工作。这样就更容易管理和查看以前的执行。

CREATE OR REPLACE PROCEDURE REFRESH_MY_VIEW
AS
BEGIN
    DBMS_MVIEW.REFRESH('MY_VIEW');
END;
/
Run Code Online (Sandbox Code Playgroud)

每天早上8点刷新:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB
    (
    job_name            => 'REFRESH_MY_VIEW',
    job_type            => 'PLSQL_BLOCK',
    job_action          => 'REFRESH_MY_VIEW',
    number_of_arguments => 0,
    start_date          => SYSTIMESTAMP, 
    repeat_interval => 'freq=daily; byhour=8; byminute=0; bysecond=0;',
    end_date            => NULL,
    enabled             => TRUE,
    auto_drop           => FALSE,
    comments            => 'Refreshes MY_VIEW at 8am'
    );
END;
/
Run Code Online (Sandbox Code Playgroud)

每天晚上8点刷新:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB
    (
    job_name            => 'REFRESH_MY_VIEW',
    job_type            => 'PLSQL_BLOCK',
    job_action          => 'REFRESH_MY_VIEW',
    number_of_arguments => 0,
    start_date          => SYSTIMESTAMP, 
    repeat_interval => 'freq=daily; byhour=20; byminute=0; bysecond=0;',
    end_date            => NULL,
    enabled             => TRUE,
    auto_drop           => FALSE,
    comments            => 'Refreshes MY_VIEW at 8pm'
    );
END;
/
Run Code Online (Sandbox Code Playgroud)

*_SCHEDULER_JOB_LOG*_SCHEDULER_JOB_RUN_DETAILS数据字典视图提供您需要跟踪什么执行时,如果发生任何错误的所有信息。文档链接在这里

正如评论中所指出的,您可以添加多个by hour子句,以逗号分隔,如下所示:repeat_interval => 'freq=daily; byhour=8,20; byminute=0; bysecond=0;'