Перенос данных на чистую базу (постановка)
Материал из GedeminWiki
Версия от 17:10, 8 февраля 2011; SYSDBA (обсуждение | вклад)
В данной постановке рассматривается альтернативное решение проблемы полного закрытия периода. Вместо удаления данных за пределами активного периода предлагается перенести актуальную информацию в чистую БД согласно следующего алгоритма:
- Создаем чистую БД, только метаданные от исходной БД, используя ключ -m утилиты gbak. Присваиваем ей новый DBID.
- Запоминаем состояние и отключаем все триггеры.
- Удаляем все чеки.
- Удаляем все ограничения (ПК, ФК).
- Удаляем все индексы.
- Переносим данные.
- Восстанавливаем индексы и ограничения, подключаем тригеры и чеки.
Содержание |
Перенос данных
Перед началом процесса пользователь может выбрать для каждого типа документов или справочников как переносить данные:
- Полностью все записи.
- Начиная с определенной даты (для документов -- это дата документа, для справочников дата последнего изменения или создания объекта).
В процессе переноса потребуются структуры:
- Массив перенесенных идентификаторов.
- Cписок массивов требуемых идентификаторов. Каждый массив характеризуется именем таблицы.
Последовательность действий при переносе данных:
- Выводим суммарные значения и помещаем их в новую БД.
- Переносим документы.
- Переносим справочники.
- Трансформируем и переносим складское движение.
В процессе переноса, для каждой перенесенной записи:
- Запоминаем ИД в массиве перенесенных идентификаторов.
- Удаляем ИД из списка требуемых ИД для данной таблицы, если он там присутствует.
- Для каждой ссылки в записи проверяем не перенесен ли уже соответствующий ИД. Если нет, то помещаем в список требуемых ИД.
По окончании переноса проверяем список требуемых ИД и переносим нужные записи. Повторяем, пока список требуемых ИД не будет пуст.