Особенности работы с широкими записями и BLOB-файлами
При работе с записями шириной более 4К и данными типа BLOB необходимо учитывать следующие особенности:
-
широкие записи хранятся в BLOB-файлах, поэтому указанные при создании таблицы значения параметров PCTFREE и PCTFILL фактически не применяются, а применяется значение параметра BLOBPCT, которое по умолчанию имеет значение 50%;
-
одна запись целиком пишется в один BLOB-файл;
-
при записи нового значения (выполнение INSERT-команды) будет использован BLOB-файл с минимальным номером из всех BLOB-файлов, в которых есть свободные страницы, если их нет ни в одном BLOB-файле – BLOB-файл с минимальным размером из всех BLOB-файлов, которые можно расширить;
-
при дописывании значения (выполнение UPDATE-команды) будет использован тот BLOB-файл, в котором расположено это значение, при необходимости он расширяется;
-
если все BLOB-файлы достигнут максимального размеры будет выдан код завершения 1709 и даже после добавления еще одного BLOB-файла UPDATE-команда может завершиться с кодом завершения 1709.
Рекомендация: для предотвращения переполнения BLOB-файлов таблицы необходимо периодически следить за размером последнего BLOB-файла. Проверку можно выполнять с помощью запроса вида:
select cast GetByte($$$S14, 102) as int, linter_file_info($$$S11,2,GetByte($$$S14, 102),'size') * 4096 from LINTER_SYSTEM_USER.$$$SYSRL, LINTER_SYSTEM_USER.$$$USR where $$$S32=0 and $$$S31=$$$S12 and $$$S34=< имя_схемы > and $$$S13=< имя_таблицы >;
Запрос возвращает количество BLOB-файлов и размер последнего BLOB-файла. Как только размер последнего BLOB-файла превысит 60 GB (или 1.5 GB для ОС не поддерживающих большие размеры файлов, например ЗОСРВ «Нейтрино»), рекомендуется добавить ещё один BLOB-файл командой:
alter table < имя_таблицы > add blobfile;
и далее следить за размером этого нового файла с помощью указанного запроса (новый BLOB-файл стал последним).