DBMS_AQADM.DROP_QUEUE_TABLE では Oracle キュー テーブルを削除できません
質問
間違った (SYS など) スキーマに誤ってインストールされた LOG4PLSQL をクリーンアップしようとしています。というキューテーブルがあります。 QTAB_LOG
それはなくなる必要があります。関連するキューを正常に停止して削除しました。
call DBMS_AQADM.STOP_QUEUE('LOG_QUEUE');
call DBMS_AQADM.DROP_QUEUE('LOG_QUEUE');
ただし、キュー テーブル自体を削除すると失敗します。
call DBMS_AQADM.DROP_QUEUE_TABLE('QTAB_LOG');
このエラーが発生すると:
SQL Error: ORA-00942: table or view does not exist
ORA-06512: at "SYS.DBMS_AQADM", line 240
ORA-06512: at line 1
00942. 00000 - "table or view does not exist"
そしてもちろん、テーブルを通常の方法で削除します。
drop table QTAB_LOG;
は許可されていません:
SQL Error: ORA-24005: Inappropriate utilities used to perform DDL on AQ table LOG4PLSQL.QTAB_LOG
24005. 00000 - "must use DBMS_AQADM.DROP_QUEUE_TABLE to drop queue tables"
*Cause: An attempt was made to use the SQL command DROP TABLE for queue
tables, but DROP TABLE is not supported for queue tables.
*Action: Use the DBMS_AQADM.DROP_QUEUE_TABLE procedure instead of the
DROP TABLE command.
私の何が間違っているのでしょうか?
解決
あなたが失敗したことをキュー表をドロップで任意の以前の試みがありましたか?孤立したキュー表のこのような状況は、通常、AQ API呼び出しを使用したときにスローされる例外が発生したいくつかの問題の結果である。
これが導入されたとき、私は知らないが、少なくとも11gは、今のドロップテーブルプロセスの一部として、キューを停止し、ドロップしDROP_QUEUE_TABLEコールにFORCEパラメータを持っています。あなたのケースでは、それは遅すぎるそのための仕事におそらくだが、それは価値がある試みることがあります。
DROP TABLEに続いての9i / 10グラムの日には、 "ALTERセッションセットイベント '10851トレース名コンテキスト永遠に、レベル2'"、のTNAME のの、時にはのために使用されます仕事 - 。それはまだかどうかわからない。
他のヒント
オラクル11g r2を使用しています。以下は私にとってはうまくいきます。すべてのバージョンが以下をサポートしているかどうかはわかりません。
EXEC dbms_aqadm.drop_queue_table ( queue_table => '<OWNER>.<QUEUETABLE>',force=>true);
上記のコマンドは、関連するキューを自動的に停止して削除し、その後キュー テーブルを削除します。
すべての手順を自分で(すべて手動で)実行したい場合は、以下の順序で実行してください。
- 関連付けられたキューを停止します。
- 関連付けられたキューを削除します。
- キューテーブルを削除します。
dbms_aqadm pkg 関数を実行する権限があることを前提としています。そうでない場合、これらの pkg 関数を呼び出すとエラーが発生します。これが理にかなっているといいのですが。
アルターセッションセットイベント「10851トレース名コンテキスト永遠に、レベル2
SOLN 10.2.0.3のための作品の罰金を与えられた - 私たちは、ドロップが試行されたスキーマ所有者のUSER_TABLESに記載されているキュー表をドロップすることができました:それは永遠に「ALTERセッションセットイベント」10851トレース名コンテキストの上使用した後に[OK]を働きました" ます。