現在、一連のビューとマテリアライズドビューにアクセスしています。実体化は、実体化の頻度と成功に関する情報をほとんど提供しない第三者によって維持されます。最近、マテリアライズドビューの更新に失敗し、不正確/遅延データが含まれる多数のレポートを送信しました。
現在、トランザクションシステム内で最新の更新がいつ発生したかを確立するために使用する各マテリアライズを照会しています。更新されていない場合、残りのコードは実行されませんが、これは多大な労力を費やし、時にはリードする可能性があります誤った仮定(マテリアライズドビューは更新された可能性がありますが、追加のトランザクションは行われなかったため、コードの残りは実行されません)になり、別の方法をお勧めします。
Oracleシステムテーブルを使用してマテリアライズドビューが更新されたかどうかを識別する方法はありますか?そうでない場合、第三者に連絡することなくこれを行う方法について、誰かが考えていますか?
Doc_180はすでにコメントでこれに答えているようですが、なぜ答えとして追加されなかったのか分かりません
SELECT owner, mview_name, last_refresh_date
FROM all_mviews
WHERE owner = <<user that owns the materialized view>>
AND mview_name = <<name of the materialized view>>
DBAテーブルにアクセスできる場合は、DBA_MVIEWS
にとって ALL_MVIEWS
。これにより、アクセスできるマテリアライズドビューのサブセットだけでなく、すべてのマテリアライズドビューが更新されたときの情報にアクセスできます。もちろん、これはおそらくこの場合に特に重要な違いではありません。
残念ながら、oraclesのデフォルトの日付形式はYYYY-MM-DDです。時間が必要な場合は、次のようなものを使用してください。
SELECT owner, mview_name, to_char(LAST_REFRESH_DATE, 'yyyy-mm-dd hh24:mi:ss') last_refresh_date
FROM all_mviews
WHERE owner = 'FOO'
AND mview_name = 'MV_BAR';
個人的に私はall_snapshotsを使用し、この情報はDBA_MVIEWSまたはALL_MVIEWSの情報を補完するものです
select owner, name, last_refresh, error, status, refresh_mode
from all_snapshots
where owner = 'owner';