Инструмент копирования базы данных
Инструмент копирования базы данных SCA-SRSE предоставляется в виде отдельного файла JAR. Для работы с ним необходимо соблюдать следующие условия:
- файл JAR не должен быть установлен в исходном или целевом экземплярах SCA-SRSE. Можно поместить файл JAR в любое место на компьютере, если компьютер авторизован для доступа к исходной и целевой базам данных SCA-SRSE.
- требуется использовать как минимум версию 1.3.3.627 файла JAR.
Чтобы подготовиться к использованию средства копирования БД, необходимо подготовить целевой экземпляр, так как исходный и целевой экземпляры должны иметь одинаковую схему базы данных.
Чтобы настроить схему SCA-SRSE:
- Убедитесь, что целевая база данных запущена и работает.
- В целевой базе данных создайте SCA-SRSE-схему.
- Загрузите и расширьте копию используемой SCA-SRSE, которая точно соответствует версии.
- Настройте копию SCA-SRSE для подключения к целевой базе данных. Если копия SCA-SRSE размещена на том же сервере, на котором запущен основной экземпляр SCA-SRSE, то также потребуется настроить порты не по умолчанию для экземпляра SCA-SRSE.
- Запустите копию экземпляра SCA-SRSE. Он подключится к пустой цели и заполнит схему. Как только экземпляр копии будет запущен (это указывает на то, что схема полностью заполнена), то можно остановить и удалить его.
- Обновите статистику базы данных в целевой базе данных перед перезапуском SCA-SRSE.
В результате будет сформирован одинаковый список таблиц в исходной и целевой базах данных.
Чтобы запустить инструмент копирования БД:
-
Остановите основной экземпляр SCA-SRSE.
-
Выполните базовую команду jar с соответствующими параметрами.Пример базовой команды:
java -jar sonar-db-copy-1.3.3.627-jar-with-dependencies.jar
Параметры:Имя параметра Описание Необходимость данного параметра -helpВывести справку по этим параметрам Нет -urlSrcURL-адрес исходной базы данных JDBC Да -userSrcИмя пользователя исходной базы данных Да -pwdSrcПароль исходной базы данных Да -urlDestURL-адрес целевой базы данных JDBC Да -userDestИмя пользователя целевой базы данных Да -pwdDestПароль целевой базы данных Да -driverDestДрайвер целевой базы данных JDBC Нет -driverSrcДрайвер исходной базы данных JDBC Нет -TРазделенный запятыми список таблиц для переноса Нет -
Обновите конфигурацию основного экземпляра SCA-SRSE, чтобы она указывала на целевую БД.
-
Перезапустите основной экземпляр SCA-SRSE.
-
Утилита sonar-db-copy проверяет, доступны ли URL-адреса и версии базы данных:
***************** CONFIGURATION VERIFICATIONS *************** Database SOURCE has been reached at : jdbc:h2:tcp://localhost:9092/sonar-db-copy Database DESTINATION has been reached at : mysql://localhost:13306/sonar?autoReconnect=true The version of SCA-SRSE schema migration are the same between source (433) and destination (433).
-
Когда версии разные, приложение останавливается.
***************** CONFIGURATION VERIFICATIONS *************** Database SOURCE has been reached at : jdbc:h2:tcp://localhost:9092/sonar-db-copy Database DESTINATION has been reached at : mysql://localhost:13306/sonar?autoReconnect=true Exception in thread "main" Version of the schema migration are not the same between source (433) and destination (494).
Иногда после перезапуска копии целевая версия базы данных равна 0. Это некритическая ситуация, копирование бужет продолжено.***************** CONFIGURATION VERIFICATIONS *************** Database SOURCE has been reached at : jdbc:h2:tcp://localhost:9092/sonar-db-copy Database DESTINATION has been reached at : mysql://localhost:13306/sonar?autoReconnect=true ! WARNING – The versions of SCA-SRSE schema migration source is (433) when destination is (0).
-
Выполняется поиск таблицы в исходной и целевой базах данных:
*************** SEARCH TABLES *************** START GETTING METADATA IN SOURCE... 53 TABLES GETTED. START GETTING METADATA IN DESTINATION... 53 TABLES GETTED. *************** FOUND TABLES *************** FOUND TABLE : action_plans SOURCE: COLUMNS : (id,kee,name,description,deadline,user_login,project_id,status,created_at,updated_at) TYPES: : (INTEGER,VARCHAR,VARCHAR,VARCHAR,TIMESTAMP,VARCHAR,INTEGER,VARCHAR,TIMESTAMP,TIMESTAMP) DESTINATION: COLUMNS : (id,create_at,updated_at,name,description,deadline,user_login,project_id,status,kee) TYPES : (BIGINT,TIMESTAMP,TIMESTAMP,VARCHAR,VARCHAR,TIMESTAMP,VARCHAR,INTEGER,VARCHAR,VARCHAR) FOUND TABLE : active_dashboards SOURCE: COLUMNS : (id,dashboard_id,user_id,order_index) TYPES : (INTEGER,INTEGER,INTEGER,INTEGER) DESTINATION: COLUMNS : (id,dashboard_id,user_id,order_index) TYPES : (INTEGER,INTEGER,INTEGER,INTEGER)
Если есть отсутствующие таблицы, то отобразится этот журнал:FOUND TABLE : action_plans SOURCE: COLUMNS : (id,person_id,login,create_at,updated_at) TYPES: : (INTEGER,INTEGER,VARCHAR,TIMESTAMP,TIMESTAMP) DESTINATION: ! WARNING - TABLE authors is not present in the DESTINATION database.
-
Утилита sonar-db-copy усекает таблицы в целевой базе данных и указывает количество очищенных таблиц (отсутствующие таблицы не могут быть очищены):
*************** DELETE TABLES FROM DESTINATION *************** START DELETING... ! WARNING - Can't DELETE TABLE :authors because it doesn't exist in the destination database. 52 TABLES DELETED IN DESTINATION.
-
Утилита sonar-db-copy воспроизводит данные из источника в место назначения и корректирует последовательность базы данных назначения после копирования:
*************** COPY DATA *************** action_plans 0 / 0 action_plans 0 / 0 active_dashboards 0 / 5 active_dashboards 5 / 5 active_rules 0 / 629 active_rules 629 / 629 active_rule_changes 0 / 0 active_rule_changes 0 / 0 active_rule_notes 0 / 0 active_rule_notes 0 / 0 active_rule_parameters 0 / 58 active_rule_parameters 58 / 58
Если какие-то таблицы отсутствуют, то отобразится следующее предупреждение:
! WARNING - Can't WRITE in TABLE :authors because it doesn't exist in destination database.
Если во время копирования появляются ошибки, процесс не останавливается, но ошибки отображаются:
** ERROR ** IN TABLE: users when read and write at col: 10 and id=1. ** ERROR ** SORUCE COLUMNS ( name,admin,remarks,id,id,login,name). ** ERROR ** DESTINATION COLUMNS ( id,login,name,email,crypted_password). ** ERROR ** LINES NOT COPIED at ROW (0) WITH id = (1). ** ERROR ** Cannot parse "TIMESTAMP" constant "TRUE" [22007-172]
В конце sonar-db-copy повторяет разницу между исходной и целевой базами данных.
Сообщение об ошибке отображается, если базы данных отличаются.
INFO *************** CHECK DESCREPANCIES *************** WARN TABLE projects has 65 ROWS in SOURCE while 0 ROWS in DESTINATION INFO ******************************************** INFO ** THE COPY HAS FINISHED UNSUCCESSFULLY !!! WATCH OUT THE LOG!!! ** INFO ********************************************