Привет, Хабр!

В предыдущей статье мы рассказали, как установить Digital Q.DataBase на Astra Linux 1.8 и начать работу с этой российской СУБД, которая поддерживает нативную работу с диалектами MS SQL, PostgreSQL и Oracle. Сегодня мы поговорим о том, как перенести уже существующие данные в Digital Q.DataBase из других систем управления базами данных. 

Для решения поставленной задачи мы разработали инструмент – Мастер переноса БД. Он позволяет выгрузить структуру, данные и хранимую логику из уже развернутой БД на одной из трех СУБД (Oraсle, MS SQL и PostgreSQL) и загрузить их в Digital Q.DataBase без переписывания кода приложений в отличие от любых миграторов-конверторов.

Коротко про перенос данных в Digital Q.DataBase

Мастер переноса БД создает базу данных, идентичную оригиналу, включая все таблицы, представления, процедуры, триггеры и другие элементы исходной БД, которые адаптируются к работе под управлением СУБД Digital Q.DataBase. Проще говоря, вы получаете исходную базу данных со всей структурой и логикой, но в новом формате. 

Инструмент поддерживает перенос данных и метаданных из следующих СУБД:

  • Microsoft SQL Server

  • Oracle Database

  • PostgreSQL

Мастер переноса БД реализован реализован для ОС Astra Linux 1.7 и 1.8, ALT Linux 11, РЕД ОС 7.3 и 8, Ubuntu 22.04 и 24.04, Microsoft Windows 10, 11 в двух вариантах:

  1. Десктопная версия – для пользователей, предпочитающих графический интерфейс

  2. Консольная версия – для автоматизации процесса и работы на серверах без GUI (только для ОС Linux)

❗️Перед началом переноса убедитесь, что у вас установлены все необходимые компоненты Digital Q.DataBase и клиентская часть. Весь процесс установки и настройки можно найти в предыдущей статье.

Установка десктопной версии (для переноса БД с помощью GIU)

Установка в Linux

Если во время первоначальной установки Digital Q.DataBase вы сразу вместе с серверной установили клиентскую версию, то приложение у вас уже установлено. Сами файлы находятся в каталоге /opt/qdb/, а десктопная версия доступна среди установленных программ в интерфейсе ОС:

Если нет – Мастер переноса можно поставить отдельно. Для этого подключаем стандартный репозиторий пакетов (без него установка не выполнится), переходим в каталог со скачанным пакетом клиентской части и ставим его стандартной командой, например:

sudo apt install
./qdatabaseclient64xid-17-17.4.25101401-astra1.8_x86_64.deb

После установки заходим в каталог установленных приложений и выбираем «Мастер переноса БД». 

❗️ Этот же пакет содержит и консольные версии Мастера, которые находятся в /opt/qdb/bin/db_migrator . Yaml-шаблоны лежат в каталоге  /opt/qdb/config/db_migrator_templates – они понадобятся нам при переносе БД через консоль.

Установка в Windows

Здесь всё стандартно: скачиваем дистрибутив клиентской части Digital Q.DataBase, запускаем его, указываем место для установки и нужно ли создавать ярлык на рабочем столе:

С точки зрения работы десктопного приложения различий между версиями для Linux и Windows нет.

После запуска Мастер предлагает выбрать, из какой СУБД нужно перенести данные. Дальше мы рассмотрим варианты переноса с каждой из них:

Перенос данных из MS SQL 

Десктопная версия

Первое, что нам нужно сделать, – выбрать способ выгрузки данных:

Рассмотрим «Пользовательскую конфигурацию», которая по сути включает в себя первые 2 варианта (по работе с интерфейсом).

Сначала необходимо указать параметры подключения к базе данных:

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

Затем нам предоставляется выбор объектов для переноса на уровне БД (не привязанные к конкретной схеме). Роли, членство в ролях, привилегии можно включить или выключить из процесса переноса только целиком, а вот пользователей, DDL-триггеры и CLR-сборки можно настроить поименно:

После этого необходимо выбрать список схем, которые необходимо перенести:

Если нужна более глубокая кастомизация переноса схемы, нажимаем «шестерёнку» в «Действиях»:

Перед нами появится окно выбора объектов: что именно мы хотим перенести и в каком режиме:

Перед финальным шагом Мастер переноса БД покажет все параметры переноса, чтобы ещё раз убедиться в том, что мы всё указали верно:

После запуска процесса переноса приложение отобразит лог процесса переноса (его можно посмотреть в отдельном файле) и сообщит по его завершении. После этого окно Мастера переноса БД можно закрывать.

Консольная версия

На случай, если у Вас нет графического интерфейса или вам комфортнее работать через терминал, предусмотрена возможность работать с Мастером переноса БД как с консольным приложением.

Переходим в каталог /opt/qdb/config/db_migrator_templates/ и создаём файл для подключения к исходной базе MS SQL –  mssql.yaml. В квадратных скобках меняем шаблонные имена на свои параметры:

db_type: mssql
server: [hostName_or_IP)]
port: [1433]
user: [userName]
password: [userPassword]
database: [dbName]
schema: [schemaName]

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

db_type: mssql
server: [hostName_or_IP]
port: [port]
user: [userName]
password: [userPassword]
database: [dbName]
schema: [schemaName]

В целом, у нас уже всё готово к переносу данных. Если нам нужен перенос всех объектов в новую базу, выполняем команду:

mssql_migrator -config-source
/opt/qdb/config/db_migrator_templates/mssql.yaml -config-target
/opt/qdb/config/db_migrator_templates/mssql_qdb.yaml -scope all -target-action new

А если в существующую, то меняем последний параметра с new на existing:

mssql_migrator -config-source
/opt/qdb/config/db_migrator_templates/mssql.yaml -config-target
/opt/qdb/config/db_migrator_templates/mssql_qdb.yaml -scope all -target-action existing

Коротко по параметрам:

  • -config-source – отвечает за путь к конфигурации подключения к исходной базе

  • -config-target – путь к конфигурации целевой базы

  • -scope – объём переноса (доступные варианты – all/struct/data/custom)

  • -target-action – куда переносим данные (new/existing/file)

❗️ Полный список параметров вызова можно посмотреть в документации к Мастеру переноса БД, стр. 20.

После запуска команды в консоли мы сразу будем видеть весь процесс переноса данных:

Перенос данных из Oracle Database

Десктопная версия

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

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

Раз мы выбрали пользовательскую конфигурацию, нам нужно указать схемы для переноса. Нажимаем «Добавить» и заполняем параметры схемы:

Аналогично MS SQL можно использовать «шестеренку» для настройки списков объектов:

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

Консольная версия

Аналогично работе с БД MS SQL, при переносе БД Oracle есть возможность работать с Мастером переноса БД как с консольным приложением.

Переходим в каталог /opt/qdb/config/db_migrator_templates и создаём файл для подключения к исходной базе Oracle Database – oracle.yaml. В квадратных скобках меняем шаблонные имена на свои параметры:

db_type: oracle
server: [hostName_or_IP)]
port: [1521]
user: [userName]
password: [userPassword]
database: [dbName]
schema: [schemaName]
sys: [password]

Теперь сделаем то же самое для целевой базы, куда будем выгружать данные: создаём файл oracle_qdb.yaml:

db_type: mssql
server: [hostName_or_IP]
port: [port]
user: [userName]
password: [userPassword]
database: [dbName]
schema: [schemaName]

Дальше всё точно так же, как и с MS SQL, только меняется имя инструмента. Для переноса в новую базу выполняем команду

oracle_migrator -config-source
/opt/qdb/config/db_migrator_templates/mssql.yaml -config-target
/opt/qdb/config/db_migrator_templates/mssql_qdb.yaml -scope all -target-action new

Для переноса в существующую:

oracle_migrator -config-source
/opt/qdb/config/db_migrator_templates/mssql.yaml -config-target
/opt/qdb/config/db_migrator_templates/mssql_qdb.yaml -scope all -target-action existing

❗️ Для Oracle Database в консольном режиме также доступен частичный и кольцевой перенос. Команды и шаблоны схем для них можно найти в руководстве пользователя.

Перенос данных из PostgreSQL и его российских клонов

Десктопная версия

Перенос данных из PostgreSQL и её аналогов производится немного проще:

  1. Указываем параметры подключения к исходной БД

  2. Выбираем, что хотим перенести: тут сразу предоставлен выбор объектов

Если установить самый нижний флаг, то в следующих окнах для всех выбранных типов объектов будет предоставлен выбор конкретных имен:

3. Выбираем, куда перенести данные

4. Указываем параметры подключения к целевой базе

5. Проверяем перед запуском данные и запускаем перенос

Консольная версия

Перенос БД PostgreSQL, так же как и перенос из других СУБД, возможен с помощью консольного приложения.

Переходим в каталог /opt/qdb/config/db_migrator_templates и создаём файл для подключения к исходной базе PostgreSQL  –  pg.yaml:

db_type: postgres
server: [hostName_or_IP]
port: [5432]
user: [userName]
password: [userPassword]
database: [dbName]
schema: [schemaName]

Теперь сделаем то же самое для целевой базы в файле pg_qdb.yaml:

db_type: postgres
server: [hostName_or_IP]
port: [5445]
user: qdbadmin
password: [userPassword]
database: [dbName]
schema: [schemaName]

Для запуска переноса в новую базу выполняем команду

pg_migrator -config-source
/opt/qdb/config/db_migrator_templates/mssql.yaml -config-target
/opt/qdb/config/db_migrator_templates/mssql_qdb.yaml -scope all -target-action new

Для переноса в существующую:

pg_migrator -config-source
/opt/qdb/config/db_migrator_templates/mssql.yaml -config-target
/opt/qdb/config/db_migrator_templates/mssql_qdb.yaml -scope all -target-action existing

После запуска одной из этих команд дождитесь окончания процесса и если все пройдет штатно – перенос данных успешно завершен.

Как проверить качество переноса данных

Для проверки качества переноса данных используем встроенный Мастер сравнения БД – инструмент для сравнения схем и данных между исходной и целевой базами данных. Он поддерживает MS SQL, Oracle Database и PostgreSQL.

Десктопная версия

Мастер сравнения БД с графической оболочкой использовать довольно просто:

  • запускаем Мастер сравнения БД;

  • указываем тип исходной БД (например, MS SQL) и параметры для подключения к ней;

  • то же делаем для целевой БД Digital Q.DataBase;

  • подтверждаем введенные данные и там же в интерфейсе сразу видим результаты работы инструмента.

Консольная версия

При необходимости работы через терминал также есть возможность запускать инструмент через консольные команды. 

Для сравнения баз данных нам потребуется конфигурационный файл, в котором хранятся настройки подключения БД. Для удобства мы добавили готовые шаблоны – в них сразу можно поправить параметры подключения. Сами общие шаблоны хранятся в /opt/qdb/config/db_comparator_templates – там 4 конфигурационных файла (по одному на каждую БД и общий):

Вот как выглядит файл в общем виде:

Ключевое здесь – указать параметры для каждой базы данных, исходной и целевой (в которую мы перенесли исходную БД). 

Теперь о том, как происходит сравнение данных после переноса. Мы покажем работу Мастера сравнения БД на примере MS SQL, для других БД принцип работы будет тем же самым.

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

db_compare_mssql -config config.yaml

Некоторое время спустя увидим сообщение, что сравнение успешно завершено. Для проверки качества сравнения можно посмотреть логи в папке, которую указал нам Мастера сравнения БД:

Первый файл  db_compare.log хранит общую информацию о процессе работы:

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

Во втором файле (report.log) находится результат работы – детальный отчёт с ходом сравнения БД:

Если перенос данных прошел без ошибок и после сравнения баз различий также не выявлено, значит, всё необходимое было успешно перенесено в Digital Q.DataBase и можно начинать работу с новой БД.

Посмотрим, что получилось?

Давайте подключимся к только что перенесенной нами базе MS SQL Server через нативный SQL Server Management Studio:

или через бесплатно распространяемый DBeaver CE:

В обоих случаях видим одинаковую структуру БД.

Результат

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

Мы очень хотим помочь организовать процесс перехода с зарубежных СУБД на нашу максимально безболезненным, именно поэтому вкладываем большие усилия как в «клонирование» функциональности MS SQL и Oracle (аккуратное копирование всего, что может понадобиться с точностью до малейших нюансов - синтаксис, встроенные функции, популярные пакеты и хранимые процедуры), так и в развитие инструментов, что призваны помочь даже начинающим пользователям легко перенести свою информацию в нашу СУБД. Надеюсь, что наши усилия пойдут Вам на пользу и Вы их положительно оцените. Если же Вы обнаружите конструкцию, что корректно работает в MS SQL или Oracle и при этом не работает в Digital Q.DataBase - сообщите об этом нам, мы обязательно внесем необходимые исправления в нашу СУБД.

Что дальше

В следующей статье расскажем об одном из самых важных и критичных моментов для многих компаний: как запустить 1С на Digital Q.DataBase и что для этого нужно.