Oracleの具体化されたビューの更新の特定のタイミングの設定に関する適切なドキュメントが見つかりません。ドキュメントといくつかの例を読みましたが、NEXT句の使用に関する明確なドキュメントはありません。たとえば、毎日午前8時と午後8時に更新を設定するにはどうすればよいですか? 1日に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
また、タイミングの設定後にマテリアライズドビューが更新されたかどうかを確認する方法があるかどうかも知りたいです。
更新: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>
代わりにDBMS_SCHEDULER
を使用し、更新するたびにジョブを使用します。これにより、以前の実行を管理および表示することがより簡単になります。
CREATE OR REPLACE PROCEDURE REFRESH_MY_VIEW
AS
BEGIN
DBMS_MVIEW.REFRESH('MY_VIEW');
END;
/
毎日午前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;
/
毎日午後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;
/
*_SCHEDULER_JOB_LOG
および*_SCHEDULER_JOB_RUN_DETAILS
データディクショナリビューは、実行された内容、タイミング、およびエラーが発生したかどうかを追跡するために必要なすべての情報を提供します。ドキュメントリンク ここ 。
コメントで指摘したように、次のように、複数のby hour
句をカンマ区切りで追加できます。repeat_interval => 'freq=daily; byhour=8,20; byminute=0; bysecond=0;'