現在、REFRESH ON DEMANDを使用して作成したマテリアライズドビューなので、この場合、以下のコマンドを使用してMVを明示的に更新する必要があります。
BEGIN DBMS_MVIEW.REFRESH('MV_DATA'); END;
しかし今、私はこのMVを毎日更新する必要があるので、誰かがこれを書くのを手伝ってくれませんか。明示的なジョブを作成するか、MV自体でCOMPLETE/FAST REFRESHステートメントを使用して、このMVを更新できることを確認しました。
前もって感謝します!
STARTWITH句とNEXT句を使用してマテリアライズドビューを作成する必要があります
create materialized view <mview_name>
refresh on demand
start with sysdate next sysdate + 1
as select ............
したがって、mviewを毎日更新する場合は、オンデマンドで更新を維持し、次の更新時間をsysdate + 1
に設定する必要があります。ただし、任意の間隔を設定できます。
これを行うと、マテリアライズドビューが作成され、24時間ごとにmviewを更新するジョブがOracleに設定されます(sysdate + 1)
。
その方法の詳細については、 このリンク をたどってください。
12 AM
で更新するだけのSQLクエリが必要な場合は、以下のクエリで十分です。
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>
特定の時間(午前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