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.

Готово! Теоретически никто не заметит подмены, а база будет махонькая и аккуратненькая).