Oracle - Невозможно удалить таблицы

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

Ситуация такова: я не могу бросить ЛЮБУЮ таблицу. Вот пример:

SQL> CREATE TABLE FOO (BAR NUMBER) TABLESPACE SYSTEM
 /
Table created.

SQL> SELECT COUNT(1) FROM FOO;
  COUNT(1)
----------
         0

SQL> DROP TABLE FOO;
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist
ORA-06512: at line 19

Итак, стол, кажется, существует, но я не могу его уронить.

Обратите внимание на ошибку ORA-00604: ошибка произошла на рекурсивном уровне SQL 1. Если я пытаюсь удалить несуществующую таблицу, эта ошибка не появляется:

SQL> DROP TABLE NON_EXISTING_TABLE
ERROR at line 1:
ORA-00942: table or view does not exist

Каким-то образом система не может найти таблицу во время сброса.

Установка оракула и сама БД новые (один день назад).

РЕДАКТИРОВАТЬ - я повторил этот тест, используя другое табличное пространство и пользователя (я только что создал), и я получил немного другое поведение: использование SYSпосле того, как я получил DROP Я все еще могу выбрать ошибку из таблицы. Однако, используя этого нового пользователя, после того, как я получил DROP ошибка, я больше не могу выбрать из таблицы.

Решение

Мы обнаружили проблему: отсутствует файл MDSYS.SDO_GEOR_SYSDATA_TABLE, что предотвращает операцию удаления. Решение состоит в том, чтобы восстановить эту таблицу. Вот полное решение от Gaurav Soni (кстати, большое спасибо).

Запустите скрипт catmd.sql (находится в каталоге $ORACLE_HOME/md/admin).

Сценарий catmd.sql - это сценарий, который загружает все объекты, необходимые Oracle, в базу данных. Тогда бросьте пользователя.

Вы также можете обратиться к оракулу металлинкс

Шаги для ручной установки опции Oracle Spatial Data

Удаление пользовательских результатов в ORA-942 против SDO_GEOM_METADATA_TABLE

2 ответа

Я бы предложил активировать трассировку SQL (ALTER SESSION SET SQL_TRACE=TRUE;) и попробуйте снова. Это создаст файл трассировки на сервере (в udump каталог), который покажет весь SQL-запрос, выполненный сеансом, включая рекурсивные операторы. Это должно показать вам рекурсивный оператор SQL, который не выполняется.

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

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