5

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

问题是:我的这张桌子有点像僵尸。以下是症状:

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 事件触发器试图访问它,从而产生错误。解决方案是恢复该表。

4

2 回答 2

1

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

SELECT *
  FROM dba_objects
 WHERE object_name = 'MYTABLE';

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

于 2012-03-22T19:57:16.133 回答
1

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

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

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

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

于 2012-03-23T12:51:59.510 回答