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

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

5 голосов
/ 22 марта 2012

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

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 отсутствовала, и триггер события отбрасывания пытался получить к ней доступ, генерируя ошибку. Решением было восстановление этой таблицы.

Ответы [ 2 ]

1 голос
/ 23 марта 2012

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

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

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

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

1 голос
/ 22 марта 2012

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

SELECT *
  FROM dba_objects
 WHERE object_name = 'MYTABLE';

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

...