Опыт миграции БД в рамках СЭД на PostgreSQL

Миграция базы данных обеспечивает компании импортонезависимость и снижает лицензионные затраты. При этом стоимость перехода на новую СУБД зависит от 3 составляющих:
1.    Сколько кода обрабатывается на стороне БД.
2.    Сколько данных хранится в БД, какой объём требуется мигрировать и в какой срок.
3.    Насколько отличается язык программирования исходной и новой БД.

В этой статье мы поделимся опытом миграции БД в рамках СЭД на базе платформы Docsvision с использованием утилиты миграции.

Принцип миграции

Мы исходим из принципа, что любые изменения, которые мы планируем внести в промышленную среду, вначале должны быть опробованы на тестовом сервере. Значит, процесс миграции мы начинаем с подготовки тестовой среды. Исторически промышленная база данных была выстроена на MS SQL и будет перенесена на PostgreSQL.

Тестовая среда содержала клон промышленного сервера приложений и сервера БД MS SQL на ОС Windows. Дополнительно мы развернули сервер БД PostgreSQL на Alt Linux.
Когда мы подготовили тестовую среду, распланируем этапы миграции БД:

  • Подготовка исходной БД MS SQL
  • Перенос большинства файлов в файловое хранилище
  • Выгрузка исходной БД в csv файлы (утилита миграции)
  • Конвертация выгруженных csv файлов (утилита миграции)
  • Подготовка PG БД для миграции
  • Миграция csv файлов в PG БД (утилита миграции)

Рассмотрим каждый из этапов.

Подготовка исходной БД MS SQL

Чтобы ускорить процесс миграции, требуется максимально уменьшить размер базы данных. Фактически для этого мы проводим генеральную уборку в системе, вычищаем неактуальные данные – в первую очередь, завершённые бизнес-процессы. Стоит очистить таблицы журналов, оставив только application-лог, удалить объекты из корзины.

Переносим все файлы, кроме системных и справочников, на файловое хранилище. В описанном кейсе мы создали новое файловое хранилище, группу для данного хранилища и правило, которое по приоритету было ниже, чем правила для системных файлов и справочников. С помощью скрипта мы добавили все существующие в базе файлы в очередь и дождались, пока файловый сервис обработает всю очередь. По итогу: за 12 часов файловый сервис перенёс около 400 000 файлов объёмом 100 ГБ.

Изначальный размер базы данных — 170 ГБ. После удаления устаревших данных и переноса бинарных данных из БД в файловое хранилище размер БД был равен 8 ГБ. Эти цифры наглядно показывают важность подготовки исходной базы данных для миграции.

Утилита миграции

В описанном кейсе для переноса БД с MS SQL на PostgreSQL мы использовали утилиту миграции, разработанную в «ДоксВижн». Утилита миграции – это консольное приложение. На вход она принимает ключи, которые мы опишем в продолжении статьи. Названия ключей интуитивно понятны:

  • /help используется для получения информации по поддерживаемым ключам и их назначению;
  • /ms и /pg нужны для указания строки подключения к соответствующему типу базы данных
  • /test используется для проверки подключения;
  • /p позволяет указать путь к папке, в которую будет выполняться экспорт либо производиться импорт.

Сначала с помощью утилиты мы создаём в базе данных вспомогательные объекты, а затем выгружаем данные из таблиц в csv файлы.

  • /install используется для установки вспомогательных объектов в связке с ключом /ms, который указывает строки подключения к исходной базе данных. Такая команда формирует в базе данных служебные таблицы с информацией о ходе работы утилиты.
    CloneDbUtil.exe /ms:"Initial Catalog=source_db; Data Source=server; Integrated Security = SSPI;" /install
  • /export соответственно указывает на необходимость экспорта данных, после ключа /p мы указываем папку для экспорта csv-файлов. Ключ /l фиксирует ограничение на количество обрабатываемых таблиц. Таким образом выглядит команда для экспорта данных из таблицы исходной базы в csv-файлы.
    CloneDbUtil.exe /ms:"Initial Catalog=source_db; Data Source=server; Integrated Security = SSPI;" /p:"D:\clone_db_data" /export /l:10

Обращаем внимание, что утилита миграции экспортирует данные только из таблиц, названия которых соответствуют маскам dvsys*, dvrep*, dvtable*.

После выгрузки данные из таблицы в csv-файлы требуют перекодировки, так как MS SQL отдаёт данные в формате Unicode, а PostgreSQL принимает в UTF8. Дополнительно требуется нормализовать некоторые символы, чтобы в дальнейшем корректно работала БД на PostgreSQL.

  • /f запускает перекодировку, а ключи /infolder и /outfolder указывают папку с исходными csv-файлами и папку для перекодированных файлов. Если вместо папок требуется указать конкретные файлы, то используются ключи /in и /out.
    CloneDbUtil.exe /f /infolder:"C:\clone_db_data" /outfolder:"C:\clone_db_data2"

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

Когда мы подготовили данные для новой БД, требуется создать её структуру в PostgreSQL, предварительно создав пустую базу данных.

  • /clone берёт из источника БД метаданные и генерирует скрипты библиотек и карточек, по которым создаёт таблицы необходимой структуры в PostgreSQL.
    CloneDbUtil.exe /ms:"Initial Catalog=source_db; Data Source=server; Integrated Security = SSPI;" /pg:"Server=127.0.0.1; Port=5432; Database=target_db; User ID=postgres; Password=password;" /clone
  • /import – ключ для импорта файлов используется вместе с ключами /p, который указывает папку, где находятся сконвертированные csv-файлы, /ms и /pg – указывают строки подключения к базам данных источника и приёмника. Если использовать ключ /l, то можно установить ограничение на число обрабатываемых таблиц в команде.
    CloneDbUtil.exe /ms:"Initial Catalog=source_db; Data Source=server; Integrated Security = SSPI;" /pg:"Server=127.0.0.1; Port=5432; Database=target_db; User ID=postgres; Password=password;" /import /p:"/home/pgadmin/migration" /l:25

Действия после миграции данных

Несмотря на то, что в базе данных PostgreSQL уже заполнены данными все таблицы из нашего источника, мы не можем сразу подключить её к консоли настройки. Чтобы подготовить новую базу для работы внутри системы на базе платформы Docsvision, мы должны сформировать хранимые процедуры и джобы.

  • Выполнить полное обновление базы PG через консоль настройки Docsvision с понижением версий библиотек
  • Загрузить заново все серверные расширения 
  • Сделать базу PG основной, отключить базу MS SQL
  • Запустить все остановленные сервисы
  • Проверить основные сценарии работы

Практический кейс миграции СУБД в рамках проектах СЭД

Николай Авдюшкин, генеральный директор «Эркер», поделился опытом реализации проекта по переходу на импортонезависимый стек, в том числе с применением утилиты миграции.

Организация работает в СЭД на платформе Docsvision с 2009 года, при этом часть решения функционирует на устаревшей версии продукта Docsvision 4.5, часть на актуальной версии платформы с доступом к системе через web-клиент. Решение развёрнуто на Windows Server и MS SQL Server. Объём БД без файлов ~200 Гб, объём вытесненных файлов ~ 1,5 Тб.
Заказчик поставил задачу полностью перенести актуальную часть решения на базе Docsvision 5.5 в импортонезависимую среду на серверное ПО – ОС Astra Linux и СУБД – PostgreSQL. Дополнительно требовалось перенести вытесненные файлы на новое хранилище на Linux. И самое важное – сроки были жёстко регламентированы, и нельзя было допустить простоя системы в рабочее время.
Миграция была реализована в 2 этапа. После подготовки к миграции команда проекта выполнила тестовую миграцию, которая выявила узкие места в процессе. В результате было проведено 3 пробных миграции в тестовой среде, определён тайминг всех шагов, разработаны методики испытаний решения после миграции.

Последовательность тестовой миграции
1.    Миграция/конвертация БД с использованием утилиты миграции от вендора. Из опыта «Эркер», для конвертации нужно места ~ в 3–4 раза больше исходной БД, желательно SSD.
2.    Решение конфликтов при конвертации и проверка работы представлений.
3.    Проверка работы веб-расширений и серверных расширений, адаптация для работы на .Net 6.

Миграция основной среды
1.    Отключение продуктивного сервера перед выходными, в пятницу вечером. Миграция БД на PostgreSQL и сервера на Astra Linux.
2.    Проверка работы решения по разработанным методикам.
3.    Загрузка файлов с файлового сервера Windows Server в БД PostreSQL.
4.    Настройка вытеснения файлов из БД PostreSQL на файловую систему Astra Linux.
5.    В понедельник пользователи начали работу в Docsvision через Web-клиент.

Что изменилось в работе пользователей:

  • Изменился интерфейс предпросмотра файлов через Р7-Офис
  • Появилось улучшенное меню создания новых документов

Вывод

Миграция на СУБД PostgreSQL — первый шаг на пути импортозамещения. И такой проект требует системного подхода и сильной команды с высокой компетенцией как в исходном продуктовом стеке, так и в новом. В процессе миграции важно сохранить целостность данных, следовать поставленным целям в рамках проработанного плана. Команда «ДоксВижн» готова поддержать такие проекты миграции. 

Похожие публикации
17 апреля 2024
В этой статье мы рассмотрим практические кейсы перевода СЭД на ОС Linux.
20 марта 2024
Как оптимизировать настройки платформы, изменить обслуживание системы.
Подпишитесь на рассылку
Нажимая на кнопку «Отправить», вы даёте согласие на обработку ваших персональных данных, в соответствии с политикой «ДоксВижн» в отношении обработки персональных данных.
Поддержка МЧД в СЭД Как изменится порядок подписания? Как подготовить предприятие к изменениям? Как адаптировать СЭД?