Особенности работы с широкими записями и 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-файл стал последним).