Усечение таблицы
Функция
Ускоренная очистка таблицы и усечение файлов таблиц.
Спецификация
::=
[DROP STORAGE | REUSE STORAGE | REUSE FILES]
[новые параметры таблицы] [WAIT | NOWAIT]
::=
| DATAFILES описание файлов
| BLOBFILES описание файлов
| MAXROW количество записей
| MAXROWID количество записей
| PCTFILL процент заполнения
| PCTFREE процент заполнения
| BLOBPCT процент заполнения
::=
::=
Синтаксические правила
-
< Имя таблицы >
должно ссылаться на базовую таблицу.Примечание
Команда TRUNCATE TABLE для глобальных временных таблиц игнорируется.
-
< Имя таблицы >
не должно ссылаться на системную таблицу. -
Правом на усечение таблицы обладает ее владелец или любой другой пользователь с привилегиями на модификацию структуры таблицы (
ALTER
), на удаление данных (DELETE
) и уровнем прав доступа к БДRESOURCE
. -
Слова
STORAGE
,REUSE
иFILES
являются ключевыми только в командеTRUNCATE
. -
Описание параметров
INDEXFILES
,DATAFILES
,BLOBFILES
,MAXROWID
,MAXROW
,PCTFILL
,PCTFREE
иBLOBPCT
см. в пункте «Создание таблицы». -
Если модификатор
WAIT
(NOWAIT
) не задан, по умолчанию действуетWAIT
.
Общие правила
-
В БД с секретностью усекаемая таблица не должна содержать записей.
-
При усечении таблицы проверяется наличие триггеров на таблицу: если есть триггер на удаление из этой таблицы, то
TRUNCATE
не выполняется. -
На усекаемую таблицу не должно быть ссылок из непустых таблиц БД.
-
Указания по размерам создаваемых файлов после усечения таблицы:
-
REUSE STORAGE
– использовать те размеры файлов, которые были до усечения; -
REUSE FILES
– использовать минимальные размеры файлов; -
DROP STORAGE
– оставить по одному файлу минимального размера каждого типа.
По умолчанию используется опция
DROP STORAGE
. -
-
Выполняется выравнивание значения
MAXROWID
на 1022. Т.е. если указать только значениеMAXROW
(например, 2000) и не указыватьMAXROWID
, то значениеMAXROWID
будет браться изMAXROW
с выравниванием (т.е. оно будет равно 2044). Если, наоборот, указатьMAXROWID
(например, 2000), но не указыватьMAXROW
, то сначала будет выровненMAXROWID
(до значения 2044), а затем это значение будет присвоеноMAXROW
(2044). -
Параметры
INDEXFILES
,DATAFILES
,BLOBFILES
, если они заданы явно, имеют приоритет над опциямиDROP STORAGE
,REUSE STORAGE
,REUSE FILES
. -
Команда является DDL-операцией, т.е. перед ее обработкой выполняется команда
COMMIT
(фиксация в БД всех накопленных изменений). Откат операции, которая уже началась по данной команде, не возможен. -
Вся таблица блокируется на запись до окончания операции.
-
Удаляются все файлы таблицы: данных, индексов, BLOB-данных.
-
Новые файлы таблицы создаются по минимальному количеству (один файл данных; один файл индексов, если нет ссылок из описаний индексов на несколько индексных файлов; один файл 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|