Оракул - Стол Зомби

У меня эта странная проблема со вчерашнего дня. Я пробовал несколько вариантов, и я фактически переустановил 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 по ней, однако, если я создаю новую таблицу с тем же именем, я получаю сообщение об ошибке, но теперь я могу SELECT по предыдущей версии этой таблицы с несколькими записей.

Какие-нибудь мысли? Мне действительно нужна твоя помощь:(

РЕДАКТИРОВАТЬ - Я проверил сейчас: я не могу удалить любую таблицу. Это может быть просто новым симптомом.

Решение

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

2 ответа

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

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

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

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

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

SELECT *
  FROM dba_objects
 WHERE object_name = 'MYTABLE';

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

Другие вопросы по тегам