Oracle - 无法删除表

时间:2012-03-23 11:01:31

标签: oracle oracle10g ora-00942 drop-table

这个问题与one I posted yesterday有关,但还有其他影响。

情况是:我无法删除 ANY 表。这是一个例子:

SQL> CREATE TABLE FOO (BAR NUMBER) TABLESPACE SYSTEM
 /
Table created.

SQL> SELECT COUNT(1) FROM FOO;
  COUNT(1)
----------
         0

SQL> DROP TABLE FOO;
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist
ORA-06512: at line 19

因此,该表似乎存在,但我无法放弃它。

请注意错误 ORA-00604:在递归SQL级别1发生错误。如果我尝试删除不存在的表,则不会出现此错误:

SQL> DROP TABLE NON_EXISTING_TABLE
ERROR at line 1:
ORA-00942: table or view does not exist

不知何故,系统无法在停机时间找到该表。

oracle安装和数据库本身是新的(一天之久)。

编辑 - 我使用另一个表空间和用户(我刚创建了一个)重试了这个测试,我得到了一个略有不同的行为:使用SYS后,我收到DROP错误我可以仍然从表中选择。但是,使用这个新用户后,我收到DROP错误后,我再也无法从表中选择

解决方案

我们发现了问题:MDSYS.SDO_GEOR_SYSDATA_TABLE丢失,阻止了丢弃操作。解决方案是恢复该表。这是完整的解决方案,由 Gaurav Soni (顺便说一下,非常感谢)。

运行脚本catmd.sql(位于$ ORACLE_HOME / md / admin目录中)。

catmd.sql脚本是加载Oracle数据库中Oracle Spatial所需的所有对象的脚本。然后放弃用户。

你也可以参考oracle metalinks

Steps for Manual Installation of Oracle Spatial Data Option

Dropping user results in ORA-942 against SDO_GEOM_METADATA_TABLE

2 个答案:

答案 0 :(得分:3)

我建议您激活SQL跟踪(ALTER SESSION SET SQL_TRACE=TRUE;)并再次尝试删除。这将在服务器(在udump目录中)生成一个跟踪文件,该文件将显示执行的所有SQL会话,包括递归语句。这应该向您显示失败的递归SQL语句。

答案 1 :(得分:0)

我认为问题是您在系统表空间上创建了表。您应该在用户表空间上创建它,或者创建一个来存储数据。