Для удаления SQL-таблиц используется команда DROP TABLE, например:
DROP TABLE "Клиент(кп)"
При удалении таблицы происходят следующие действия:
1. удаляются все строки таблицы;
2. из системного каталога удаляется определение таблицы;
3. Удаляются все связанные с этой таблицей объекты, а именно: ограничения, индексы и триггеры.
Кроме того, из системного словаря удаляются все настройки прав доступа пользователей на удаленную таблицу.
Таким образом, удаление таблицы при помощи команды DROP TABLE является в значительной степени радикальной мерой, к которой следует прибегать, принимая во внимание ее последствия.
Таблица по умолчанию не может быть удалена, если ее поля использованы в существующих ограничениях FOREIGN KEY других таблиц. Для игнорирования данного правила следует использовать следующий вариант команды:
DROP TABLE "Клиент(кп)" CASCADE CONSTRAINTS
Интересным вопросом является, что же происходит с данными после удаления таблицы. В ранних версиях Oracle удаление таблицы было необратимым действием; единственным способом восстановления данных было восстановление базы данных с резервных копий. В современной системе поддерживается понятие корзины, в которую помещаются удаленные объекты базы данных и из которой эти объекты можно при необходимости восстановить.
|
|
Рассмотрим следующую последовательность команд, иллюстрирующих работу с корзиной:
CREATE TABLE ToDrop
(aaa NUMBER UNIQUE,
bbb CHAR(20));
- создание некоторой таблицы
DROP TABLE ToDrop
- удаление таблицы
SELECT OBJECT_NAME, ORIGINAL_NAME, OPERATION,
TYPE, CAN_UNDROP
FROM RECYCLEBIN
- просмотр содержимого корзины, информация о которой содержится в специальной таблице RECYCLEBIN, после команды удаления:
OBJECT_NAME | ORIGINAL_NAME | OPERATION | TYPE | CAN_UNDROP |
BIN$RNddS4U3QZWepxPrpwXy6Q==$0 | SYS_C0010464 | DROP | INDEX | NO |
BIN$D/N6f2YwS8G6sNmhbzTucg==$0 | TODROP | DROP | TABLE | YES |
В корзине находятся два объекта – сама таблица и индекс, созданный для поля aaa, на которое наложено ограничение уникальности; таблицу можно восстановить.
FLASHBACK TABLE ToDrop TO BEFORE DROP
- восстановаление таблицы из корзины, однако индекс востановлен не будет. Теперь корзина пуста, а таблица восстановлена и может использоваться в запросах; индекс же необходимо создать заново.
Если необходимо удалить таблицу без помещения ее предварительно в корзину, следует использовать следующий вариант:
DROP TABLE ToDrop PURGE
Для очистки корзины можно вопользоваться командой PURGE RECYCLEBIN.
Команда FLASHBACK TABLE может использоваться и для восстновления таблицы к состоянию в некотрый момент времени. Однако восстновление объектов из корзины возможно не всегда; это связано с подробностями настройки сервера. Для более детального и полного описания работы с корзиной следует обращаться к документации.