Перейти к основному содержимому
Версия: Indeed Access Manager 9.2

Миграция базы данных Log Server с Microsoft SQL на PostgreSQL

Чтобы перенести данные компонента Log Server, выполните следующие действия:

  1. Остановите работу Log Server.
  2. Создайте эталонную схему базы данных в PostgreSQL.
  3. Перенесите данные с помощью утилиты pgLoader.
  4. Задайте значение последовательности после переноса данных.
  5. Установите и запустите новую версию LogServer.

Остановка работы Log Server

  1. Откройте Консоль управления IIS с помощью комбинации клавиш Win+R и ввода inetmgr.
  2. В разделе Подключения выберите Пулы приложений.
  3. Нажмите Indeed.LS и выберите Остановить.
Примечание

Прежде чем продолжить, рекомендуется сделать резервные копии C:\inetpub\wwwroot\ls\clientApps.config и C:\inetpub\wwwroot\ls\targetConfigs.

Эталонная схема базы данных

  1. Подключитесь к базе данных PostgreSQL и создайте пустую базу данных с необходимыми правами доступа.
  2. Создайте схему базы данных с помощью скрипта LogService_9.5.0_pg_int_db.sql.

Миграция данных

Чтобы перенести данные, используйте pgLoader — инструмент загрузки данных для PostgreSQL.

  1. Загрузите pgLoader с помощью Docker:

    docker pull ghcr.io/<user>/pgloader:latest
  2. Подготовьте конфигурационный файл с расширением 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.
  3. Запустите процесс копирования с помощью утилиты pgloader для Linux или Windows.

    1. Создайте каталог 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
    2. Создайте каталог pgloader/config и перенесите в него конфигурационный файл migrate.pgloader.

      Структура файлов
      pgloader/
      config/
      migrate.pgloader
      docker-compose.yml
    3. Из каталога pgloader выполните команду docker-compose up.

Обновление последовательностей

После переноса данных необходимо задать значение последовательности EventAttributeEntities_Id_seq. Эта последовательность отвечает за заполнение первичного ключа в таблице EventAttributeEntities. По умолчанию значение последовательности равно 1.

Установите максимальное значение на основе текущих данных, чтобы избежать конфликтов. Выполните следующий запрос Update_seq.sql:

select setval(quote_ident('EventAttributeEntities_Id_seq'), (select max("Id") from "EventAttributeEntities"));

Результат: функция установит и выведет текущее значение, которое должно быть больше или равно количеству записей в таблице EventAttributeEntities.

Установка и запуск новой версии LogServer

  1. После успешной миграции установите актуальную версию Log Server.

  2. В конфигурационном файле am/ls/targets/DbTargetSqlAM.config укажите настройки подключения к базе данных PostgreSQL.

  3. Выполните запуск контейнера ls с помощью команды docker-compose up.

  4. Выполните 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 и первой записью из таблицы логов.