アプリケーションでマテリアライズド ビューのチューニングを実行しようとしています。私は実行に着手しました:
dbms_advisor.tune_mview()
プロシージャを作成し、Oracle SQL Developer の SQL_Worksheet に次のコードを記述しました。
variable mvtask varchar2(100);
variable mvddl varchar2(4000);
execute :mvtask := 'MV_FOO_BAR';
execute select query into :mvddl from user_mviews where view_name = 'MV_FOO_BAR';
execute dbms_advisor.tune_mview(:mvtask, :mvddl);
select * from user_tune_mview;
明らかに、具体化されたビューは既に作成されています (refresh fast on commmit
ただし、許容できないほど遅くなります)。Advisor は次のエラーを報告します。
エラーレポート: ORA-13600: アドバイザでエラーが発生しました QSM-03112: CREATE MATERIALIZED VIEW文が無効です ORA-06512: "SYS.DBMS_SYS_ERROR"、86行目 ORA-06512: "SYS.PRVT_ACCESS_ADVISOR"、行 202 ORA-06512: "SYS.PRVT_TUNE_MVIEW"、1026行目 ORA-06512: "SYS.DBMS_ADVISOR"、行 754 ORA-06512: 1行目 13600.00000 - "Advisor でエラーが発生しました\n%s" *原因: アドバイザでエラーが発生しました。 このメッセージの後に 2 番目のメッセージが続きます。 エラーの性質に関する詳細。 *アクション: アドバイザのドキュメントを参照してください 2 番目のエラー メッセージの説明については、
しかし、それ以上の報告はなく、2 番目のエラー メッセージの痕跡もありません。ここで何が問題なのか知っている人はいますか?MV が既に存在し、データベースで動作しているため、ゆっくりではありますが、さらに驚いています。
関連するメモとして、SQL Developer で複数行の文字列を入力する方法を知っている人はいますか。次のようなものを試すと:
execute :mvddl :='create materialized view MV_FOO_BAR
build immediate
refresh fast on commit
...
';
SQL Developer は最初の行でチョークします。文字列の連結が頭をよぎりましたが、100 ~ 150 行の MV がいくつかあり、それらのそれぞれに対して手動で行うのは嫌です。