Удаление таблиц

Для удаления 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 может использоваться и для восстновления таблицы к состоянию в некотрый момент времени. Однако восстновление объектов из корзины возможно не всегда; это связано с подробностями настройки сервера. Для более детального и полного описания работы с корзиной следует обращаться к документации.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: