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