Warm tip: This article is reproduced from serverfault.com, please click

plsql-无法使用DBMS_AQADM.DROP_QUEUE_TABLE删除Oracle队列表

(plsql - Cannot drop Oracle queue table with DBMS_AQADM.DROP_QUEUE_TABLE)

发布于 2010-05-12 14:48:41

我正在尝试将LOG4PLSQL的意外安装清除到错误的(即SYS)架构中。有一个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.

我究竟做错了什么?

Questioner
nw.
Viewed
0
dpbradley 2010-05-13 00:05:40

你以前是否有尝试删除失败的队列表的尝试?孤立队列表的这种情况通常是某些问题的结果,这些问题导致使用AQ API调用时引发异常。

我不知道何时引入它,但是至少11g现在对drop_queue_table调用具有一个FORCE参数,该参数停止并丢弃队列,这是丢弃表过程的一部分。对于你来说,现在工作可能为时已晚,但可能值得尝试。

在9I / 10G天,“ALTER SESSION事件集‘永远的10851名迹背景下,2级’”,随后DROP TABLE TNAME 用来有时工作-不知道,如果它仍然会。