我正在尝试将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.
我究竟做错了什么?
你以前是否有尝试删除失败的队列表的尝试?孤立队列表的这种情况通常是某些问题的结果,这些问题导致使用AQ API调用时引发异常。
我不知道何时引入它,但是至少11g现在对drop_queue_table调用具有一个FORCE参数,该参数停止并丢弃队列,这是丢弃表过程的一部分。对于你来说,现在工作可能为时已晚,但可能值得尝试。
在9I / 10G天,“ALTER SESSION事件集‘永远的10851名迹背景下,2级’”,随后DROP TABLE TNAME 用来有时工作-不知道,如果它仍然会。
是的,我有几次尝试通过
dbms_aqadm
不按顺序发出呼叫来删除队列表的尝试失败。您的alter session
建议对我而言适用于11g。非常有帮助,谢谢。啊。我重新安装了XE(10.2)来解决此问题:p我试图解决此问题时遇到了这个问题
DROP USER <username> CASCADE
。如果我的目标只是删除整个用户/架构,是否有更好的方法来做到这一点?@梅林-我不知道。如果要常规使用此命令DROP USER来重建,一种解决方案是将队列分离到单独的架构中,并为要删除和重新创建的架构进行适当的入队/出队授予。
这听起来像是个好建议,尽管我认为我将无法使用它。很难在我正在处理的项目中检入对模式的更改。幸运的是,我根本不打算经常删除用户(之所以这样做,是因为在构建数据库的本地dev实例时搞砸了)。似乎仍然应该有某种方法可以强制擦除类似的内容,尽管我想大多数真正的用户只会保留备份。谢谢您的帮助 :)