[Oracle] マテリアライズド・ビューが消えない! | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

開発環境にて検証のために作ったマテリアライズド・ビューを削除しようとすると、

DROP MATERIALIZED VIEW MV_TEST;

以下のようなエラーが発生しました。

ORA-03113: 通信チャネルでend-of-fileが検出されました

再度接続しなおして、実行してみると今度は以下のようなエラーが発生しました。

ORA-12003: マテリアライズド・ビュー"SCOTT"."MV_TEST"は存在しません。

しかし、ちゃんと消えていたのかと思い再作成してみると、

CREATE MATERIALIZED VIEW MV_TEST AS SELECT ... ;

以下のようなエラーが発生します。

ORA-00955: すでに使用されているオブジェクト名です。

やっぱり消えていないようです。

ディクショナリを参照してみました。

SELECT * FROM USER_OBJECTS;

OBJECT_NAME          OBJECT_TYPE
-------------------- --------------------
MV_TEST              TABLE

なぜか同名のテーブルが存在します。

そこでこのテーブルの削除を試みました。

DROP TABLE MV_TEST;

すると以下のようなエラーが発生しました。

ORA-12083: "SCOTT"."MV_TEST"の削除には、DROP MATERIALIZED VIEWを使用する必要があります。

通常、マテリアライズド・ビューをディクショナリで参照すると、以下のように同じ名前でOBJECT_TYPEが"TABLE"と"MATERIALIZED VIEW"のオブジェクトができるようなのですが、

OBJECT_NAME          OBJECT_TYPE
-------------------- --------------------
MV_TEST              TABLE
MV_TEST              MATERIALIZED VIEW

このうちの"MATERIALIZED VIEW"のほうだけが消えた状態のようです。

この"MV_TEST"をSELECT文で問い合わせるとちゃんとデータも返ってきます。

うーん、どうやったら消えてくれるのでしょう...

ユーザーごと削除したら消えるでしょうか?

DROP USER SCOTT CASCADE;

ダメです。

ORA-00604: 再帰SQLレベル1でエラーが発生しました。
ORA-12083: "SCOTT"."MV_PDF"の削除には、DROP MATERIALIZED VIEWを使用する必要があります。

消えません。

しかたないので名前を変えておきましょうか...

RENAME MV_TEST TO BK_MV_TEST

ダメです。

ORA-32318: マテリアライズド・ビューの名前を変更できません。

変えれません。

どうしても消したければインスタンスごと作り直さなければならないのでしょうか...

開発環境だからまぁ別にいいんですが...