Oracle 11g データベースには、アトミックでないときにすばやく完全に更新される MV がいくつかあります。新しい要件は、そうでなければならないことを意味します。
非アトミック DBMS_MVIEW.REFRESH が一連の挿入の前に切り捨てを実行するが、アトミック => true の場合、最初にすべてのレコードが 1 つずつ削除されることを理解しています。レコードを削除するだけでも 1 時間以上かかりますが、非アトミック バージョンでは数分しかかかりません。
この MV を更新している間も、この MV へのクエリを続行できるようにする方法が必要です。MV クエリはカウントを使用し、とにかくほとんどのレコードが変更されるため、FAST リフレッシュ方法は論外です。
したがって、私が思いついた構成は次のとおりです。
LOCK TABLE FOOBAR_MVIEW_LOCK IN EXCLUSIVE MODE;
SELECT * FROM FOOBAR_MVIEW_DATA1,FOOBAR_MVIEW_DATA2;
COMMIT;
と
LOCK TABLE FOOBAR_MVIEW_LOCK IN EXCLUSIVE MODE;
EXECUTE DBMS_MVIEW.REFRESH( 'FOOBAR_MVIEW_DATA1,FOOBAR_MVIEW_DATA2','cc');
COMMIT;
より良い方法はありますか?注意。私がパーティションの切り替えについて話し始めると、私のチーム リーダーは緊張します。:-)