Oracle - Zombie Table

蹲街弑〆低调 提交于 2019-12-22 06:45:40

问题


I'm having this odd problem since yesterday. I've tried several options and I actually reinstalled ORACLE and the DB itself.

Here's the problem: I have this table that is somekind of zombie. Here are the symptoms:

SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='MYTABLE'

Returns a record, meaning that the table exists.

SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'MYTABLE'

Returns all the columns of MYTABLE. So far so good, the table exists.

SELECT * FROM MYTABLE

Returns ORA-00942: table or view does not exist. At this point I'm quite confused: the table seems to exist on the USERTABLES but I cannot SELECT over it?

CREATE TABLE MYTABLE (Foo NUMBER) TABLESPACE MYTABLESPACE

Returns: ORA-00604: error occurred at recursive SQL level 1 ORA-00001: unique constraint (SYS.I_OBJ2) violated

I do not understand this error. But the best is yet to come.

SELECT * FROM MYTABLE

Surprisingly, the above query (an exact copy of the 3rd query) returns several records now! Moreover, I noticed that the column Foo is not present: the table I now see is my initial table that had other columns.

DROP TABLE MYTABLE

I now try to drop the table and I get the following errors:

ORA-00604: error occurred at recursive SQL level 1 ORA-00942: table or view does not exist ORA-06512: at line 19

SELECT * FROM MYTABLE

More confused than ever, I try the above query and, surprise surprise, the table no longer exists.

I don't undestand this: the table is on USERTABLES but I cannot SELECT over it, however, if I create a new table with the same name, I get an error but now I can SELECT over the previous version of that table with several records.

Any thoughts ? I really need your help :(

EDIT - I checked now: I'm unable to drop ANY table. This might just be a new symptom.

Solution

The problem was that MDSYS.SDO_GEOR_SYSDATA_TABLE table was missing and a drop event trigger was trying to access it, generating the error. The solution was restoring that table.


回答1:


If have privileges, try this query:

SELECT *
  FROM dba_objects
 WHERE object_name = 'MYTABLE';

And see what objects exist with that name. It might point you in the right direction.




回答2:


You didn't qualify the schema names when trying to select and drop. The CURRENT_SCHEMA of your session may be different form the log-on user. Check by trying

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

Instead of describing what the output was, could you please copy/paste the complete output for us?

Lastly, can you exclude that someone messed up the dictionary? You know, SYSDBA can do anything....



来源:https://stackoverflow.com/questions/9828609/oracle-zombie-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!