甲骨文 - 僵尸表

jpa*_*res 5 sql oracle database-administration

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

这就是问题所在:我有一张僵尸的表.以下是症状:

SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='MYTABLE'
Run Code Online (Sandbox Code Playgroud)

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

SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'MYTABLE'
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

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

CREATE TABLE MYTABLE (Foo NUMBER) TABLESPACE MYTABLESPACE
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT * FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

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

DROP TABLE MYTABLE
Run Code Online (Sandbox Code Playgroud)

我现在尝试删除表,我得到以下错误:

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

SELECT * FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

比以往更困惑,我尝试上面的查询,惊喜,表不再存在.

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

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

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

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

DCo*_*kie 1

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

SELECT *
  FROM dba_objects
 WHERE object_name = 'MYTABLE';
Run Code Online (Sandbox Code Playgroud)

并查看存在哪些具有该名称的对象。它可能会为您指明正确的方向。