Миграция базы данных и файлов¶
Миграция базы данных¶
Миграция базы данных позволяет перенести базу вместе с данными как для той же СУБД (например, с одного сервера Microsoft SQL Server на другой), так и между разными СУБД (из MSSQL в PostgreSQL и обратно). Ниже описаны действия, которые необходимо выполнить для миграции.
Important
При выполнении миграции базы с MSSQL на PostgreSQL в случае, когда файлы хранятся в базе данных необходимо предварительно выполнить миграцию файлов в файловую систему, т.к. PostgreSQL не поддерживает хранение файлов в базе.
Подготовка к миграции¶
Перед выполнением миграции базы необходимо:
-
Попросить всех пользователей завершить работу с системой.
-
Остановить сервис кроноса Syntellect Chronos.
-
Сделать резервную копию исходной базы данных.
-
Сделать резервную копию папки с веб-сервисом web, с сервисом Chronos (чтобы потом можно было найти старые конфигурационные файлы).
-
Создать новую пустую базу данных в целевой СУБД.
Выполнение миграции¶
Для миграции воспользуемся утилитой автоматизированной установки и настройки системы 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 и убедитесь, что приложенные к карточкам файлы доступны.