Усечение таблицы

Функция

Ускоренная очистка таблицы и усечение файлов таблиц.

Спецификация
   
< усечение таблицы >::=
TRUNCATE TABLE [имя схемы.]имя таблицы
[DROP STORAGE | REUSE STORAGE | REUSE FILES]
[новые параметры таблицы] [WAIT | NOWAIT]
< описание файлов >::=
< процент заполнения >::=
Синтаксические правила
  1. < Имя таблицы > должно ссылаться на базовую таблицу.

    Примечание

    Команда TRUNCATE TABLE для глобальных временных таблиц игнорируется.

  2. < Имя таблицы > не должно ссылаться на системную таблицу.

  3. Правом на усечение таблицы обладает ее владелец или любой другой пользователь с привилегиями на модификацию структуры таблицы (ALTER), на удаление данных (DELETE) и уровнем прав доступа к БД RESOURCE.

  4. Слова STORAGE, REUSE и FILES являются ключевыми только в команде TRUNCATE.

  5. Описание параметров INDEXFILES, DATAFILES, BLOBFILES, MAXROWID, MAXROW, PCTFILL, PCTFREE и BLOBPCT см. в пункте «Создание таблицы».

  6. Если модификатор WAIT (NOWAIT) не задан, по умолчанию действует WAIT.

Общие правила
  1. В БД с секретностью усекаемая таблица не должна содержать записей.

  2. При усечении таблицы проверяется наличие триггеров на таблицу: если есть триггер на удаление из этой таблицы, то TRUNCATE не выполняется.

  3. На усекаемую таблицу не должно быть ссылок из непустых таблиц БД.

  4. Указания по размерам создаваемых файлов после усечения таблицы:

    • REUSE STORAGE – использовать те размеры файлов, которые были до усечения;

    • REUSE FILES – использовать минимальные размеры файлов;

    • DROP STORAGE – оставить по одному файлу минимального размера каждого типа.

    По умолчанию используется опция DROP STORAGE.

  5. Выполняется выравнивание значения MAXROWID на 1022. Т.е. если указать только значение MAXROW (например, 2000) и не указывать MAXROWID, то значение MAXROWID будет браться из MAXROW с выравниванием (т.е. оно будет равно 2044). Если, наоборот, указать MAXROWID (например, 2000), но не указывать MAXROW, то сначала будет выровнен MAXROWID (до значения 2044), а затем это значение будет присвоено MAXROW (2044).

  6. Параметры INDEXFILES, DATAFILES, BLOBFILES, если они заданы явно, имеют приоритет над опциями DROP STORAGE, REUSE STORAGE, REUSE FILES.

  7. Команда является DDL-операцией, т.е. перед ее обработкой выполняется команда COMMIT (фиксация в БД всех накопленных изменений). Откат операции, которая уже началась по данной команде, не возможен.

  8. Вся таблица блокируется на запись до окончания операции.

  9. Удаляются все файлы таблицы: данных, индексов, BLOB-данных.

  10. Новые файлы таблицы создаются по минимальному количеству (один файл данных; один файл индексов, если нет ссылок из описаний индексов на несколько индексных файлов; один файл BLOB-данных, если есть BLOB-столбцы или возможны длинные записи) и минимальному размеру: одна страница (4 Кбайта) битовой карты и по одной странице файла данных, индексов, BLOB-данных.

Примечание

Команда TRUNCATE TABLE не эквивалентна последовательности команд DROP TABLE и CREATE TABLE с новыми параметрами таблицы, т.к. при использовании TRUNCATE TABLE все системные ссылки на усекаемую таблицу остаются неизменными. В ином случае ссылки на эту таблицу из других таблиц, правила репликации, права доступа к таблице и т.д. будут потеряны.

Пример
create or replace table test(i int);
insert into test values(1);
insert into test values(2);
insert into test values(3);
select count(*) from test;
|          3|
truncate table test;
select count(*)from test;
|          0|