-1

リモート データベース ビュー (db リンク) 用に作成されたマテリアライズド ビューがあります。mt viewは毎晩リフレッシュ(コンプリート)しています。更新が成功したかどうか (何らかの理由で) にかかわらず、更新の毎日の電子メール ステータスをクライアントに提供する必要があります。現在、更新は DBMS_JOB を通じて行われています。システムはどのようにして更新のステータスを自動的にチェックし、それに基づいて行動することができますか? DBMS_MVIEW.REFRESH (私の mt ビュー、'C') を呼び出すプロシージャを作成した場合、更新の呼び出しが成功しない場合 (ネットワークの問題など)、プロシージャは失敗しますか? EXCEPTION でキャッチしてエラーをログに記録できますか? また、DBMS_ERRLOG.CREATE_ERROR_LOG は MT ビューの更新に役立ちますか?

ありがとうございました

4

1 に答える 1

0

いくつかのこと:

dbms_job は 10g の時点で非推奨になっているため、dbms_job の代わりに dbms_scheduler を使用する必要があります (少なくとも 10g を使用している場合...そうでない場合は、アップグレードを検討することをお勧めします)。

dbms_scheduler を使用して mview の更新をスケジュールできますが、mview にはその機能が既に組み込まれています。以下のコマンドは、毎日午前 1 時に mview を更新 (完了) するようにスケジュールします。

ALTER MATERIALIZED VIEW <mviewname>
 REFRESH COMPLETE
 NEXT (TRUNC (SYSDATE+1) + 1/24);

間隔の構文は、慣れるまで少し難しいかもしれません...私はOracleのドキュメントから始めます。

mview が最後に更新された日時を確認するには:

select owner, mview_name, last_refresh_date  from dba_mviews;

したがって、毎朝 mview を更新している場合は、(上記のクエリの結果に基づいて) mview がその朝に更新されたかどうかにかかわらず、電子メールを送信するようにスケジューラ ジョブを設定できます。

于 2016-02-19T18:17:34.357 に答える