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

Миграция с Microsoft SQL на PostgreSQL

Миграция базы данных Log Server

Чтобы перенести данные компонента 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.

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

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

Миграция базы данных Core Server

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

  1. Создайте эталонную базу данных в PostgreSQL.
  2. Перенесите данные с помощью утилиты psql.

Для миграции используйте утилиту psql для Linux или psql.exe для Windows. Утилита поставляется с дистрибутивами PostgreSQL или pgAdmin.

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

  1. Подключитесь к базе данных PostgreSQL и создайте новую базу данных:

    psql -h <host_address> -U postgres -W
    create database <db_name>;

    Где <host_address> — это адрес хоста с PostgreSQL.

    Чтобы выйти из psql, используйте команду:

    \q
  2. Запустите скрипт для установки схемы базы данных sql/schema_v.0.0_clean.sql:

    psql -h <host_address> -U postgres -d <db_name> -f sql/schema_v.0.0_clean.sql
    Примечание

    Имя пользователя по умолчанию — postgres. Если имя пользователя в вашей системе отличается, после выполнения скрипта откройте файл sql/schema_v.0.0_clean.sql и найдите строку /set DatabaseOwner 'user_name'. В параметре user_name укажите корректное имя пользователя.

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

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

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

    docker pull ghcr.io/<user>/pgloader:latest
  2. В файле config/ms.load укажите строки подключения для Microsoft SQL и PostgreSQL:

    load database
    from mssql://{user}:{password}@{host}:{port}/{database}
    into pgsql://{user}:{password}@{host}:{port}/{database}
    Пример config/ms.load
    load database
    from mssql://user:password@localhost:1433/Core_DB
    into postgresql://user:password@localhost:5432/am_logs
  3. Чтобы выполнить миграцию данных, запустите утилиту pgloader в Docker:

    docker-compose up
  4. Запустите скрипт для применения изменений:

    psql -h <host_address> -U postgres -d <db_name> -f sql/datafix.sql