这个问题与我昨天发布的问题有关,但具有进一步的含义。
情况是:我无法删除任何表。这是一个例子:
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: error occurred at recursive SQL level 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,阻止了 drop 操作。解决方案是恢复该表。这是Gaurav Soni的完整解决方案(顺便说一句,非常感谢)。
运行脚本 catmd.sql(位于 $ORACLE_HOME/md/admin 目录中)。
catmd.sql 脚本是在数据库中加载 Oracle 空间所需的所有对象的脚本。然后删除用户。
你也可以参考 oracle metalinks