2012-03-22 2 views
5

У меня возникла эта странная проблема со вчерашнего дня. Я попробовал несколько опций, и я действительно переустановил ORACLE и сам БД.Oracle - Zombie Table

Вот проблема: у меня есть эта таблица, которая является чем-то зомби. Вот эти симптомы:

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 

Удивительно, что приведенный выше запрос (точная копия 3-го запроса) возвращает несколько записей прямо сейчас! Кроме того, я заметил, что столбец Foo отсутствует: таблица, которую я теперь вижу, это моя начальная таблица, в которой были другие столбцы.

DROP TABLE MYTABLE 

теперь я пытаюсь удалить таблицу, и я получаю следующие ошибки:

ORA-00604: ошибка произошла на рекурсивном уровне SQL 1 ORA-00942: таблица или представление не существует ORA не -06512: в строке 19

SELECT * FROM MYTABLE 

Более запутанной, чем когда-либо, я пытаюсь выше запрос и, неожиданный сюрприз, таблица больше не существует.

Я не понимаю это: таблица находится на USERTABLES, но я не могу выбрать ее, однако, если я создаю новую таблицу с тем же именем, я получаю сообщение об ошибке, но теперь я могу ВЫБРАТЬ над предыдущей версией эта таблица с несколькими записями.

Любые мысли? Мне очень нужна ваша помощь :(

EDIT - Я проверил в настоящее время:.. Я не могу отказаться от любой таблицы Это может быть просто новый симптом

Решение

Проблема была что таблица MDSYS.SDO_GEOR_SYSDATA_TABLE отсутствовала, и триггер события кавычки пытался получить к ней доступ, генерируя ошибку. Решение восстанавливало эту таблицу.

+0

Похоже, вам нужно взглянуть на реальную таблицу - избежать проблемы с синонимом и т. Д. Поэтому, когда вы запускаете запрос, чтобы увидеть, существует ли таблица, с кем вы связаны? Это обычный пользователь или система, или что? Выберите OWNER, TABLE_NAME в первом запросе. И попробуйте указать полное имя, как в OWNER.TABLE_NAME, чтобы увидеть, происходит ли то, что вы ДУМАЕТ, действительно то, что происходит. – MJB

+0

Вы на 100% уверены, что это _exactly_ '' MYTABLE'', а не '' MyTable'' или что-то в этом роде. – Ben

+0

@ MJB Хорошая мысль, но я уже пробовал это. USER_TABLES не имеет колонки OWNER, но ALL_TABLE имеет. Я проверил ВЛАДЕЛЕЦ на ALL_TABLE, и я подключен к этому пользователю. Я также попробовал указать полное имя, но не повезло. – jpaires

ответ

1

Если есть привилегии, попробуйте этот запрос:

SELECT * 
    FROM dba_objects 
WHERE object_name = 'MYTABLE'; 

А какие объекты существуют с этим именем. Это может указывать на вас в правильном направлении.

+0

Результат этого запроса возвращает две записи. Существуют две разные таблицы с этим именем для двух разных владельцев (одна из которых - одна я связанный с, но я не могу отказаться от другой таблицы). Я ожидал, что (две таблицы с одинаковым именем для разных владельцев), здесь нет ничего удивительного. Любые идеи – jpaires

1

При попытке выбрать и отбросить имена схем не удалось. CURRENT_SCHEMA вашей сессии может отличаться от пользователя входа в систему. Проверьте, попробовав

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

Вместо описания того, что было на выходе, не могли бы вы скопировать/вставить полный вывод для нас?

Наконец, вы можете исключить, что кто-то испортил словарь? Вы знаете, SYSDBA может что-то сделать ....

+2

Спасибо за помощь, я обнаружил проблему. Таблица MDSYS.SDO_GEOR_SYSDATA_TABLE отсутствовала, и триггер события кавычки пытался получить к ней доступ. – jpaires