这个问题与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
答案 0 :(得分:3)
我建议您激活SQL跟踪(ALTER SESSION SET SQL_TRACE=TRUE;
)并再次尝试删除。这将在服务器(在udump
目录中)生成一个跟踪文件,该文件将显示执行的所有SQL会话,包括递归语句。这应该向您显示失败的递归SQL语句。
答案 1 :(得分:0)
我认为问题是您在系统表空间上创建了表。您应该在用户表空间上创建它,或者创建一个来存储数据。