Миграция базы данных Log Server с Microsoft SQL на PostgreSQL
Чтобы перенести данные компонента Log Server, выполните следующие действия:
- Остановите работу Log Server.
- Создайте эталонную схему базы данных в PostgreSQL.
- Перенесите данные с помощью утилиты pgLoader.
- Задайте значение последовательности после переноса данных.
- Установите и запустите новую версию LogServer.
Остановка работы Log Server
- Откройте Консоль управления IIS с помощью комбинации клавиш Win+R и ввода inetmgr.
- В разделе Подключения выберите Пулы приложений.
- Нажмите Indeed.LS и выберите Остановить.
Прежде чем продолжить, рекомендуется сделать резервные копии C:\inetpub\wwwroot\ls\clientApps.config и C:\inetpub\wwwroot\ls\targetConfigs.
Эталонная схема базы данных
- Подключитесь к базе данных PostgreSQL и создайте пустую базу данных с необходимыми правами доступа.
- Создайте схему базы данных с помощью скрипта LogService_9.5.0_pg_int_db.sql.
Миграция данных
Чтобы перенести данные, используйте pgLoader — инструмент загрузки данных для PostgreSQL.
Загрузите pgLoader с помощью Docker:
docker pull ghcr.io/<user>/pgloader:latest
Подготовьте конфигурационный файл с расширением migrate.pgloader со следующим содержимым.
Пример migrate.pgloader
load database
from mssql://user:password@localhost:1433/LogDB
into postgresql://user:password@localhost:5432/am_logs
excluding table names like '__MigrationHistory' in schema 'dbo'
set mssql parameters textsize to '104857600'
alter schema 'dbo' rename to 'public'
with prefetch rows = 1000, include no drop, data only, quote identifiers
set work_mem to '16MB', maintenance_work_mem to '512 MB', timezone to 'UTC';Параметр Описание load database from ... into ...
Команда для копирования данных из одной базы данных в другую. excluding table names like '__MigrationHistory' in schema 'dbo'
Параметр исключает копирование таблицы с миграциями. set mssql parameters textsize to
Увеличение максимальной длины переносимых строк с 2048 до максимального значения. alter schema 'dbo' rename to 'public'
Переименование схемы, так как в Microsoft SQL схема по умолчанию — dbo, а в PostgreSQL — public. prefetch rows
Ограничение количества строк, которые выгружаются в память для последующей обработки.
Значение по умолчанию100000
.include no drop, data only
Копирование только данных, без изменения схемы в целевой базе данных. quote identifiers
Имена идентификаторов заключаются в кавычки (имена таблиц и столбцов). work_mem
Объем оперативной памяти, выделяемой для выполнения операций сортировки и хеширования в запросах. maintenance_work_mem
Объем памяти, выделяемой для операций обслуживания, таких как создание индексов, клонирование таблиц, миграция больших объемов данных. timezone to 'UTC'
Формат времени. Рекомендуется использовать значение по умолчанию — UTC
.Запустите процесс копирования с помощью утилиты pgloader для Linux или Windows.
- Linux
- Windows
Создайте каталог pgloader и добавьте в него файл docker-compose.yml со следующим содержимым:
version: "3.8"
services:
pgloader:
container_name: pgloader_container
image: ghcr.io/dimitri/pgloader:latest
entrypoint: "pgloader /etc/pgloader/migrate.pgloader"
network_mode: "host"
volumes:
- ./config:/etc/pgloaderСоздайте каталог pgloader/config и перенесите в него конфигурационный файл migrate.pgloader.
Структура файлов
pgloader/
config/
migrate.pgloader
docker-compose.ymlИз каталога pgloader выполните команду
docker-compose up
.
Выполните команду:
docker run --rm --network="host" -v "C:\pgloader:/data" ghcr.io/dimitri/pgloader:latest pgloader /data/migrate.pgloader --dynamic-space-size 2048
Где:
"C:\pgloader:/data"
— том Docker, в котором хранится конфигурационный файл migrate.pgloader./data/migrate.pgloader
— название конфигурационного файла migrate.pgloader.--dynamic-space-size 2048
— параметр, задающий максимальный размер оперативной памяти в мегабайтах (Мб). Значение по умолчанию 1024. Этот параметр работает в комбинации с параметромprefetch rows
и другими параметрами обработки пакетов. Чтобы утилитаpgLoader
успевала очищать память при переносе данных, необходимо уменьшить размер пакета и увеличить максимальный лимит.
Обновление последовательностей
После переноса данных необходимо задать значение последовательности EventAttributeEntities_Id_seq
. Эта последовательность отвечает за заполнение первичного ключа в таблице EventAttributeEntities
. По умолчанию значение последовательности равно 1
.
Установите максимальное значение на основе текущих данных, чтобы избежать конфликтов. Выполните следующий запрос Update_seq.sql
:
select setval(quote_ident('EventAttributeEntities_Id_seq'), (select max("Id") from "EventAttributeEntities"));
Результат: функция установит и выведет текущее значение, которое должно быть больше или равно количеству записей в таблице EventAttributeEntities
.
Установка и запуск новой версии LogServer
После успешной миграции установите актуальную версию Log Server.
В конфигурационном файле am/ls/targets/DbTargetSqlAM.config укажите настройки подключения к базе данных PostgreSQL.
Выполните запуск контейнера ls с помощью команды
docker-compose up
.Выполните POST-запрос на чтение данных:
curl -X 'POST' \
'https://localhost/ls/api/ReadLogs' \
-H 'accept: text/plain' \
-H 'Content-Type: application/json' \
-d '{
"applicationName": "ea",
"request": {
"filters": [
],
"startFrom": 0,
"take": 1,
"sortBy": "Name",
"sortDesc": false
}
}'Результат: получен ответ с кодом 200 и первой записью из таблицы логов.