Skip to content

FDB Squeeze

Marina Karpukhina edited this page Feb 26, 2019 · 3 revisions

Информация является ценнейшим активом предприятия. Обрезка базы данных -- крайняя мера, когда другие подходы не дают нужного результата. По состоянию на 2014 год, при использовании сервера Firebird 2.5, для файлов баз данных размером до 100 Гб приемлемой производительности можно достичь использованием одних лишь аппаратных средств: многопроцессорных серверов, RAID контроллеров, SSD устройств и т.п. Более подробно о настройке сервера см. статью Рекомендуемая конфигурация сервера базы данных.

Предостережение!

  • После обработки утилитой закрытия периода на определенную дату, детальные отчеты за всю историю предприятия придется строить по двум базам данных, сводя итоговые цифры вручную в электронных таблицах.
  • Убедитесь, что перед началом обработки базы данных вы создали архивную копию и сохранили ее в нескольких экземплярах в надежных местах.

Установка

  • Утилита не требует отдельной установки и состоит из одного выполняемого файла gsDBSqueeze.exe, который следует расположить рядом с файлом gedemin.exe.
  • Если утилита используется автономно, то для подключения к базе данных понадобится клиентская часть сервера Firebird или комплект файлов встроенного сервера.
  • Для работы утилиты требуется новейшая версия библиотеки gudf.dll (скачать 32-х или 64-х разрядную версию).

Обработка базы данных

Подключение к БД

  1. Выберете кодовую таблицу БД, по умолчанию WIN1251.
  1. Укажите размер буффера - значение специфичных атрибутов num_buffers и buffer_length для текущего соединения с БД.
  1. Укажите путь к БД в формате:

 [Сервер/Порт:]Диск:[\Каталог][\Файл]

где Сервер - имя/IP-адрес сервера, Порт - значение RemoteServicePort в firebird.conf, Диск — буква диска, Каталог — имя каталога на диске, Файл — имя файла в каталоге или на диске.

  1. Введите пароль для пользователя администратор, по умолчанию masterkey.
  1. Нажмите Подключиться.

Настройки

После подключения к БД в главном меню станут доступны следующие пункты настроек:

  • Загрузить конфигурацию... - загрузка параметров из существующего ini-файла
  • Сохранить конфигурацию... - сохранение в новый ini-файл всех введенных параметров
  • Сохранять журнал в файл... - создание log-файла, который будет использоваться для логгирования работы программы (рекомендуется всегда использовать).

Объединение карточек

Объединение карточек - инструмент, которым можно воспользоваться без запуска основного процесса обработки БД. Эффективнее будет воспользоваться им ДО запуска обработки БД.

! Пользоваться этим инструментом следует с осторожностью - его использование опциональное.

 Под объединением карточек понимается процесс замены однотипных карточек на одну из них - остальные удаляются и на оставшуюся перепривязываются все ссылки.  Однотипные карточки - карточки, созданные выбранными нами документами, у которых goodkey и выбранные признаки являются одинаковыми.

Обрабатываемое множество карточек: карточки, созданные документами до выбранной даты.

  1. Выберете типы документов.
  1. Осуществите выбор общих признаков карточек.
  1. Укажите дату, до которой будут выбраны карточки.
  1. Нажмите Запуск!

Параметры обработки БД

  1. Укажите дату, до которой Вы хотите удалить документы (дату закрытия периода).
  1. Снимать галочку с Сохранить бухгалтерское и складское сальдо, вычисленное программой НЕ рекомендуется.
  1. Если Вы хотите ограничить множество документов, которые будут обрабатываться программой (если удовлетворят условию удаления - будут удалены), то выберете их типы, нажав на кнопку Выбрать типы документов.

В появившемся окне осуществите выбор необходимых типов путем двойного клика по записи в таблице.

Нажмите Принять для завершения выбора.

Выберете необходимый тип ограничения: исключение либо обработка документов только с выбранными типами.

Опции

Получить статистику до и после завершения процесса - автоматическое получение статистики.

Запуск обработки БД

Перед запуском Вы можете перейти на вкладку Статистика:

здесь отображены свойства БД и такие первоначальные характеристики, как количество записей в основных таблицах.

Рассмотрим подробнее. Основными таблицами являются: GD_DOCUMENT, AC_ENTRY, INV_MOVEMENT, INV_CARD. Раздел Количество записей в таблицах:

информация о количестве записей в таблицах.

Раздел Попадающие под удаление:

GD_DOCUMENT - количество записей с датой < выбранной Вами ранее даты.

AC_ENTRY, INV_MOVEMENT, INV_CARD - количество записей, связанных с этими документами.

Выберете в главном меню Начать процесс для запуска обработки БД. Для корректного разъединения с БД, когда процесс обработки уже был запущен, выберете в меню Остановить процесс - по завершению текущей операции программа прервет обработку БД.

Принцип действия

  1. Вычисление остатков за период до указанной даты.

1.1. Вычисление бухгалтерского сальдо в разрезе компании, счета, валюты, аналитик:

  SELECT
    accountkey,
    'C',                                   --< accountpart
    companykey,
    currkey,
    ABS(SUM(debitncu)  - SUM(creditncu)),  --< creditncu
    ABS(SUM(debitcurr) - SUM(creditcurr)), --< creditcurr
    ABS(SUM(debiteq)   - SUM(crediteq)),   --< crediteq
    CAST(0.0000 AS DECIMAL(15,4)),         --< debitncu
    CAST(0.0000 AS DECIMAL(15,4)),         --< debitcurr
    CAST(0.0000 AS DECIMAL(15,4)),         --< debiteq
    /*активные аналитики счета*/
  FROM
    AC_ENTRY
  WHERE
    entrydate < :ClosingDate
  GROUP BY
    accountkey,
    companykey,
    currkey,
    /*активные аналитики счета*/
  HAVING
    (SUM(debitncu)     - SUM(creditncu))  < CAST(0.0000 AS DECIMAL(15,4))
    OR (SUM(debitcurr) - SUM(creditcurr)) < CAST(0.0000 AS DECIMAL(15,4))
    OR (SUM(debiteq)   - SUM(crediteq))   < CAST(0.0000 AS DECIMAL(15,4))

  UNION ALL

  SELECT
    accountkey,
    'D',                                   --< accountpart
    companykey,
    currkey,
    CAST(0.0000 AS DECIMAL(15,4)),         --< creditncu
    CAST(0.0000 AS DECIMAL(15,4)),         --< creditcurr
    CAST(0.0000 AS DECIMAL(15,4)),         --< crediteq
    ABS(SUM(debitncu)  - SUM(creditncu)),  --< debitncu
    ABS(SUM(debitcurr) - SUM(creditcurr)), --< debitcurr
    ABS(SUM(debiteq)   - SUM(crediteq))    --< debiteq
    /*активные аналитики счета*/
  FROM
    AC_ENTRY
  WHERE
    entrydate < :ClosingDate
  GROUP BY
    accountkey,
    companykey,
    currkey,
    /*активные аналитики счета*/
  HAVING
    (SUM(debitncu)     - SUM(creditncu))  > CAST(0.0000 AS DECIMAL(15,4))
    OR (SUM(debitcurr) - SUM(creditcurr)) > CAST(0.0000 AS DECIMAL(15,4))
    OR (SUM(debiteq)   - SUM(crediteq))   > CAST(0.0000 AS DECIMAL(15,4))

1.2. Вычисление складского сальдо:

  SELECT
    im.contactkey,
    ic.goodkey,
    im.cardkey,
    doc.companykey,
    SUM(im.debit - im.credit) AS Balance,
  FROM inv_movement im
    JOIN GD_DOCUMENT doc ON im.documentkey = doc.id
    JOIN INV_CARD ic ON im.cardkey = ic.id
  WHERE
    im.movementdate < :ClosingDate,
    AND im.disabled = 0,

если были выбраны типы для ограничения обрабатываемого множества документов:

    AND doc.documenttype IN/NOT IN (:Типы_Выбранные_Пользователем_На_Форме)
  GROUP BY
    im.contactkey,
    im.cardkey, ic.goodkey,
    doc.companykey
  1. Перепривязка карточек, необходимых для этого складского сальдо, на наш документ, который будет хранить сальдо:
  MERGE INTO inv_card ic
  USING (
    SELECT DISTINCT c.id
      FROM DBS_TMP_INV_SALDO s --< вычисленное выше складское сальдо
      JOIN INV_CARD c ON c.id = s.cardkey
  ) inp ON inp.id = ic.id
  WHEN MATCHED
    THEN UPDATE SET firstdocumentkey = :SaldoDocKey, documentkey = :SaldoDocKey
  1. Очистка от неактуальных данных:
  • AC_ENTRY_BALANCE
    DELETE FROM ac_entry_balance
    SET GENERATOR gd_g_entry_balance_date TO 0

:* INV_BALANCE

    DELETE FROM inv_balance

:* AC_RECORD и INV_MOVEMENT, связанные с удаляемыми документами.

  1. Создание множества, содержащего идентификаторы записей таблиц, составляющих единое целое с gd_document, которые должны остаться.

  2. Подготовка БД к удалению записей:

  • удаление FKs
  • удаление PKs
  • деактивация индексов
  • дективация триггеров.
  1. Удаление из gd_document и таблиц, составляющих с ним единое целое, записей.

Условие удаления: отсутствие идентификатора записи в созданном нами множестве.

Удаление записи inv_card: отсутствие записей inv_movement, связанных с ней.

  1. Очистка GD_RUID от записей c несуществующими xID.

  2. Сохранение сальдо за период до указанной даты.

  3. Восстановление БД.

  4. Сохранение складского сальдо за весь период:

   INSERT INTO inv_balance (
     cardkey,
     contactkey,
     balance,
     goodkey)
   SELECT
     m.cardkey,
     m.contactkey,
     SUM(m.debit - m.credit),
     m.goodkey
   FROM
     inv_movement m
   WHERE
     m.disabled = 0
   GROUP BY
     m.cardkey,
     m.contactkey,
     m.goodkey

Category:Документация