甲骨文 - 僵尸表

时间:2012-03-22 18:50:21

标签: sql oracle database-administration

我从昨天起就遇到了这个奇怪的问题。我尝试了几个选项,实际上我重新安装了ORACLE和DB本身。

问题在于:我的这张桌子是僵尸的一部分。以下是症状:

SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='MYTABLE'

返回一条记录,表示该表存在。

SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'MYTABLE'

返回MYTABLE的所有列。到目前为止,表格存在。

SELECT * FROM MYTABLE

返回 ORA-00942:表或视图不存在。 在这一点上我很困惑:桌子似乎存在于USERTABLES但是我不能选择它吗?

CREATE TABLE MYTABLE (Foo NUMBER) TABLESPACE MYTABLESPACE

返回: ORA-00604:递归SQL级别1发生错误 ORA-00001:违反了唯一约束(SYS.I_OBJ2)

我不明白这个错误。但最好的还未到来。

SELECT * FROM MYTABLE

令人惊讶的是,上面的查询(第三个查询的精确副本)现在返回几条记录! 此外,我注意到Foo列不存在:我现在看到的表是我的初始表,其中包含其他列。

DROP TABLE MYTABLE

我现在尝试删除表格,并收到以下错误:

ORA-00604:递归SQL级别1发生错误 ORA-00942:表或视图不存在 ORA-06512:第19行

SELECT * FROM MYTABLE

比以往任何时候都更加困惑,我尝试了上述查询,令人惊讶的是,表格不再存在。

我没有理解这一点:表是在USERTABLES上但是我不能对它进行SELECT,但是,如果我创建一个具有相同名称的新表,我会收到一个错误,但现在我可以选择以前版本的那个有几个记录的表。

有什么想法?我真的需要你的帮助:(

编辑 - 我现在检查过:我无法删除任何表格。这可能只是一个新的症状。

解决方案

问题是MDSYS.SDO_GEOR_SYSDATA_TABLE表丢失,并且drop事件触发器试图访问它,从而产生错误。解决方案是恢复该表。

2 个答案:

答案 0 :(得分:1)

如果有权限,请尝试以下查询:

SELECT *
  FROM dba_objects
 WHERE object_name = 'MYTABLE';

查看该名称存在的对象。它可能会指出你正确的方向。

答案 1 :(得分:1)

尝试选择和删除时,您没有限定架构名称。会话的CURRENT_SCHEMA可能与登录用户不同。通过尝试检查

select SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') from dual;

您可以为我们复制/粘贴完整的输出,而不是描述输出的内容吗?

最后,你可以排除有人弄乱了字典吗?你知道,SYSDBA可以做任何事情......

相关问题