Быстрая очистка таблиц Oracle. Выражение TRUNCATE TABLE

Статьи про Oracle -> Программирование

Быстрая очистка таблиц Oracle. Выражение TRUNCATE TABLE

v:1.1 13.03.2010

Довольно-таки часто при работе с СУБД Oracle возникает необходимость удалить все данные из таблицы, причем максимально быстро. Кроме того, надо физически освободить место на носителе.

С помощью выражения delete можно просто удалить записи из таблицы. Но это не всегда будет достаточно быстро и не освободит место на носителе. Для выполнения поставленной задачи хорошо подходит выражение TRUNCATE TABLE - работает быстро, чистит чисто.
В простейшем случае синтаксист такой:



Более сложные синтаксические конструкции смотрите в документации Oracle® Database SQL Reference.

При использовании truncate table, можно столкнуться с такой ошибкой:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
Эта ошибка появляется, если на таблицу, которую Вы хотите очистить, ссылаются другие таблицы (т.е. используются foreign keys). Причем, эта ошибка появляется даже в том случае, если в таблицах нет записей.

Чтобы решить это ограничение Oracle, перед выполнением TRUNCATE TABLE надо отключить все foreign keys, выполнить очистку, после чего ключи включить.
Чтобы найти все foreign keys, можно выполнить такой запрос:



Получить эту же информацию можно еще и таким запросом:



Узнав все foreign keys и таблицы, в которых они находятся, Вы их можете отключить.
Это можно сделать следующим выражением:



После отключения foreign keys можно выполнить очистку - TRUNCATE TABLE. А после этого надо не забыть включить отключенные ключи:



Как видите, даже, казалось бы, у простого выражения Oracle, есть свои особенности.

Петрелевич Сергей
petrelevich@yandex.ru
www.OraHome.ru

Метки: PL/SQL  

Комментарии.

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.