Sp$docs
Материал из wiki.standart-n.ru
Универсальный алгоритм настройки таблицы БД для хранения BLOB полей во внешних файлах.…
Необходимые файлы
Файл:Sp$docs distrib.rar
Универсальный алгоритм настройки таблицы БД для хранения BLOB полей во внешних файлах. На примере SP$DOCS Подключение UDF. 1. Копируем sp_docs.dll в каталог "UDF" - куда установлен сервер FB. 2. Выполняем sp_docs.dll.sql - объявляем функции в базе, так же будет создана таблица Z$SINGLELINEPARAMS и вставлена одна запись - в ней путь для хранения BLOB'ов. 3. Если надо - настраиваем путь в таблице Z$SINGLELINEPARAMS, по-умолчанию рядом с базой создастся каталог <имя_файл_БД>__sp$docs. Подготовка служебной таблицы 1. Извлекаем скрипт создания таблицы SP$DOCS и вставляем текст в редактор скриптов. 2. Редактируем: - убираем создание генератора - будем использовать тотже - изменяем имя таблицы на SP$DOCS_SRVC - изменяем имена всех индексов и ключей ("SP$DOCS" меняем на "SP$DOCS_SRVC") - убираем триггеры! Они без изменений перейдут на вьюху. - оставляем, если есть описания полей(Fields descriptions), в них тоже меняем имена. 3. Выполняем скрипт - будет создана служебная таблица. 4. Выполняем triggers4blob.sql - !внимание! в скрипте триггеры для "SP$DOCS_SRVC" и для ключа "ID"!!!!! Если ключ UUID - подкорректировать! Перенос данных Тут все просто - выполняем запрос: insert into sp$docs_srvc select * from sp$docs вместо BLOB значений будут созданы соответствующие файлы в созданном каталоге. Кстати! Транзакции не поддерживаются - изменения сразу скидываются на диск!!! И удаляются тоже. Удаление таблицы SP$DOCS 1. Сохраняем гденить скрипт создания таблицы SP$DOCS. 2. Избавляемся от зависимостей: комментируем, подменяем... Все запоминаем, чтобы потом восстановить! 3. Удаляем таблицу SP$DOCS. Создание вьюхи SP$DOCS 1. sp$docs_srvc -> создать просмотр. 2. Отмечаем галочками создание всех триггеров 3. Редактируем SQL-тексты создания вьюхи и триггеров - заменяем "vw_sp$docs_srvc" на "sp$docs" 4. Также в скрипте создания вьюхи подменяем поле BLOB'а вот так: -- data, iif((data='in the file'), /*then*/ sp_docs_getblob((select first 1 SP$DOCS_PATH from Z$SINGLELINEPARAMS),id), /* else */ data), 5. Выполняем. 6. Берем из сохраненного скрипта создания таблицы SP$DOCS секцию с триггерами, если надо, меняем названия и выполняем. Завершающий этап 1. Возвращяем все зависимости - все, кроме внешних ключей травим на созданную вьюху. Внешние ключи на P$DOCS_SRVC. Готово! Теоретически никто не заметит подмены, а база будет махонькая и аккуратненькая).