3

这个问题与我昨天发布的问题有关,但具有进一步的含义。

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

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

手动安装 Oracle Spatial Data 选件的步骤

针对 SDO_GEOM_METADATA_TABLE 删除用户结果导致 ORA-942

4

2 回答 2

3

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

于 2012-03-23T12:19:06.750 回答
0

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

于 2012-03-23T11:42:53.693 回答