Перейти к содержанию

Миграция базы данных и файлов

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

Миграция базы данных позволяет перенести базу вместе с данными как для той же СУБД (например, с одного сервера Microsoft SQL Server на другой), так и между разными СУБД (из MSSQL в PostgreSQL и обратно). Ниже описаны действия, которые необходимо выполнить для миграции.

Important

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

Подготовка к миграции

Перед выполнением миграции базы необходимо:

  1. Попросить всех пользователей завершить работу с системой.

  2. Остановить сервис кроноса Syntellect Chronos.

  3. Сделать резервную копию исходной базы данных.

  4. Сделать резервную копию папки с веб-сервисом web, с сервисом Chronos (чтобы потом можно было найти старые конфигурационные файлы).

  5. Создать новую пустую базу данных в целевой СУБД.

Выполнение миграции

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

В конфигурационном файле Tools\app.json в группе настроек ConnectionStrings укажите подключение к исходной (default) и целевой (migration) базам данных:

Для подключения к SQL Server с использованием Windows аутентификации:

 "Server=.\\SQLEXPRESS; Database=tessa; Integrated Security=true; Connect Timeout=200; pooling='true'; Max Pool Size=200; MultipleActiveResultSets=true;"

Для подключения к SQL Server с использованием пользователя SQL Server:

 "Server=.\\SQLEXPRESS; Database=tessa; Integrated Security=false; User ID=sa; Password=master; Connect Timeout=200; pooling='true'; Max Pool Size=200; MultipleActiveResultSets=true;"

Для подключения к PostgreSQL с использованием Windows аутентификации:

 [ "Host=localhost; Database=tessa; Integrated Security=true; Pooling=true; MaxPoolSize=100", "Npgsql" ]

Для подключения к PostgreSQL с использованием пользователя PostgreSQL:

 [ "Host=localhost; Database=tessa; User ID=postgres; Password=Master1234; Pooling=true; MaxPoolSize=100", "Npgsql" ]

В примере ниже настроена миграция из базы MSSQL tessa в базу PostgreSQL tessa:

"ConnectionStrings": {
    "default": "Server=\\SQLEXPRESS; Database=tessa; Integrated Security=false; User ID=sa; Password=Master1234; Connect Timeout=200; pooling='true'; Max Pool Size=200; MultipleActiveResultSets=true;",
    "migration": [ "Host=localhost; Database=tessa; User ID=postgres; Password=Master1234; Pooling=true; MaxPoolSize=100", "Npgsql" ]
},

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

В файле app.json (при установке по умолчанию он расположен в папке c:\inetpub\wwwroot\tessa\app.json) в группе настроек ConnectionStrings для строки default указываем те же параметры, что указали в конфигурационном файле утилиты tadmin в строке migration.

Т.е. для нашего примера (указанного выше) в конфигурационном файле веб сервиса должно быть указано:

"ConnectionStrings": {
    "default": [ "Host=localhost; Database=tessa_migr; User ID=postgres; Password=Master1234; Pooling=true; MaxPoolSize=100", "Npgsql" ]
},

Warning

После изменения конфигурационного файла веб сервиса необходимо перезапустить пул приложений.

Для миграции воспользуемся Migrate.bat, который входит в сборку. При запуске bat файла будет предложено указать адрес подключения, или нажмите клавишу Enter, чтобы использовать адрес по умолчанию:

Далее будет предложено указать имя целевой базы данных, или нажмите клавишу Enter, чтобы использовать базу, указанную в конфигурационном файле утилиты tadmin. Указание имени базы работает аналогично скрипту установки Setup.bat: если имя не указать, то оно берётся из конфигурационного файла и база НЕ создаётся (т.е. пустая база должна быть предварительно создана на нужном сервере), а если указать, то база будет создана самим скриптом (со всеми настройками по умолчанию).

Далее проверяем параметры и, нажав на клавишу Enter, соглашаемся на выполнение миграции:

После успешного выполнения миграции вы увидите следующее сообщение:

В случае, если в процессе миграции были ошибки, их можно посмотреть в лог файле по пути: Tools\log.txt. Необходимо разобраться в причинах и исправить их, после чего пересоздать пустую базу (целевую) и выполнить миграцию повторно.

Note

Подробное описание доступных параметров утилиты tadmin см. в разделе Команды для миграции данных.

Далее необходимо настроить подключение сервиса Chronos к новой базе. В конфигурационном файле Chronos\app.json в группе настроек ConnectionStrings аналогично настраиваем подключение к новой базе (в нашем примере это подключение к базе tessa сервера PostgreSQL):

"ConnectionStrings": {
    "default": [ "Host=localhost; Database=tessa_migr; User ID=postgres; Password=Master1234; Pooling=true; MaxPoolSize=100", "Npgsql" ]
},

Проверка работы системы на новой базе

Запустите сервис Syntellect Chronos. Убедитесь, что в лог файле сервиса Chronos\log.txt нет ошибок. Если в нём есть ошибки по выполнению запросов для динамических ролей и метаролей, то вам надо переписать эти запросы под новую СУБД.

После успешной миграции, т.к. мы предварительно настроили веб сервис на подключение к новой базе, можно сразу запускать приложение Tessa Client и убедиться, что база работоспособна, а также все данные перенесены.

Миграция файлов

Миграция файлов используется для переноса файлов из базы MSSQL и обратно, а также для миграции файлов из одной папки в другую или из одной базы в другую.

Note

СУБД PostgreSQL не поддерживает хранение файлов в базе.

Important

Перед выполнением миграции необходимо сделать резервную копию базы данных (резервная копия необходима в любом случае, даже если исходное хранилище - файловая папка). А также резервную копию папки с файлами, если исходное хранилище - файловая папка.

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

Для выполнения миграции предварительно в карточке настроек сервера (Tessa Client, запущенный от имени Администратора, правая панель → Настройки → Настройки сервера) надо добавить новое хранилище данных и сделать его по умолчанию. Более подробно см. в разделе Настройки сервера.

Например, перенесем файлы, из базы данных в папку (т.е. файловое хранилище с id = 1 - это исходное, а хранилище id=2 - целевое):

Миграция файлов выполняется с помощью консольной утилиты tadmin, расположенной в подпапке Tools папки сборки. Необходимо в консоли, запущенной из данной папки выполнить команду MigrateFiles, указав в параметрах id исходного и целевого хранилищ. В нашем примере команда будет следующая:

tadmin MigrateFiles /from:1 /to:2

В консоль будут выведены сообщения по процессу миграции, а также будет возможность нажать Esc, чтобы корректно прервать процесс миграции, дождавшись окончания копирования текущих файлов. Потом можно будет возобновить миграцию, выполнив ту же команду ещё раз, причём всё это время с системой могут продолжать работать пользователи.

Note

Даже если в процессе миграции возникла сетевая ошибка и что-то пошло не так, не до конца мигрированные файлы будут по-прежнему доступны из исходного хранилища, т.е. пользователи не заметят проблем с такими файлами.

Note

Если миграция прервалась из-за какой-либо ошибки, то запустите ещё раз ту же команду с указанием ключа /c, это позволит обработать ситуацию, когда в целевой папке есть некорректно скопированные файлы (например, если при копировании файла прервалось сетевое соединение). Не используйте ключ /c при обычном запуске утилиты, т.к. он замедляет выполнение операции.

Более подробно все параметры данной команды описаны в разделе Команды для миграции данных.

После успешной миграции в консоль будет выведена соответствующая информация:

Все файлы из исходного файлового хранилища в процессе миграции были удалены.

Для того чтобы убедиться в корректности выполненной миграции:

  • Проверьте, что в исходном файловом хранилище удалены все файлы:

    • если исходное хранилище было файловой папкой - убедитесь, что размер данной папки 0 байт;

    • если исходное хранилище было в базе данных, выполните запрос на базе select count(*) from FileContent, он должен вернуть ноль.

  • Запустите приложение Tessa Client и убедитесь, что приложенные к карточкам файлы доступны.

Back to top