#xml #oracle #command-line-interface #liquibase #ojdbc
#xml #Oracle #интерфейс командной строки #liquibase #ojdbc
Вопрос:
Я пытаюсь создать новый файл Liqubase DatabaseChangeLog.xml
для существующей базы данных Oracle с конкретными схемами для извлечения структуры БД. Цель состоит в том, чтобы заменить существующие сценарии sql на формат набора изменений и заставить миграции Liquibase работать как с базами данных PostgreSQL, так и с базами данных Oracle.
Я указал свой liquibase.properties
файл как:
changeLogFile: DatabaseChangelog.xml
schemas: schema1,schema2,schema3
driver: oracle.jdbc.OracleDriver
classpath: ojdbc8.jar
url: jdbc:oracle:thin:@host:port:SID
username: User
password: PASSWORD
logLevel: debug
logFile: log.txt
Когда я делаю liquibase generateChangeLog
в cli, я получаю следующий вывод:
Liquibase Community 4.0.0 by Datical
Starting Liquibase at 12:44:52 (version 4.0.0 #19 built at 2020-07-13 19:45 0000)
и через некоторое время выводится ошибка:
Unexpected error running Liquibase: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: Connection could not be created to jdbc:oracle:thin:@host:port:SID with driver oracle.jdbc.OracleDriver. Possibly the wrong driver for the given database URL
For more information, please use the --logLevel flag
вывод log.txt не содержит сообщений об ошибках, и кажется, что liquibase хорошо подключена к базе данных, но журнал неожиданно заканчивается.
Вот фрагмент журнала:
[2020-09-14 12:44:52] FINE [liquibase.database] Properties:
[2020-09-14 12:44:52] FINE [liquibase.database] Key:'password' Value:'**********'
[2020-09-14 12:44:52] FINE [liquibase.database] Key:'user' Value:'USER'
[2020-09-14 12:44:52] FINE [liquibase.database] Connecting to the URL:'jdbc:oracle:thin:@host:port:SID' using driver:'oracle.jdbc.OracleDriver'
[2020-09-14 12:44:52] FINE [liquibase.servicelocator] Loaded liquibase.database.DatabaseConnection instance liquibase.database.jvm.JdbcConnection
[2020-09-14 12:44:52] FINE [liquibase.servicelocator] Loaded liquibase.database.DatabaseConnection instance com.datical.liquibase.ext.database.jvm.ProJdbcConnection
[2020-09-14 12:44:59] FINE [liquibase.database] Connection has been created
[2020-09-14 12:45:00] FINE [liquibase.database] Connected to USER@jdbc:oracle:thin:@host:port:SID
[2020-09-14 12:45:00] FINE [liquibase.database] Setting auto commit to false from true
...
[2020-09-14 12:45:40] FINE [liquibase.executor] Executing with the 'jdbc' executor
Последняя строка является последней в файле журнала.
Версия Liquibase — это Community 4.0.0
, драйвер Oracle — это ojdbc8.jar
.
У меня есть ojdbc8.jar
в том же каталоге, что и liquibase.properties
.
Учетные данные БД и пользователя верны, и я могу подключиться к базе данных с помощью dbForge (в tnsnames.ora
формате с тем же адресом и учетными данными пользователя).
У кого-нибудь была такая же проблема при попытке создать новую DatabaseChangeLog.xml
из существующей базы данных Oracle? Я буду рад видеть любые предложения.
Заранее спасибо.
Отредактировано: на самом деле это дало мне результат после 1 часа работы:
Unexpected error running Liquibase: liquibase.exception.DatabaseException: java.sql.SQLRecoverableException: No data to read from socket
For more information, please use the --logLevel flag
Но в схемах есть данные / таблицы.
Ответ №1:
Вы можете использовать инструмент командной строки для генерации журналов изменений из существующей схемы. Используйте следующую команду и помните о дополнительных пробелах, поскольку liquibase будет жаловаться на это.
Не забудьте скопировать ojdbc8-19.3.0.0.jar
в lib папку liquibase-zip, загруженную из указанного ниже местоположения. Я загрузил liquibase.zip отсюда и используется следующая команда liquibase_zip
liquibase.bat --driver=oracle.jdbc.driver.OracleDriver --url="jdbc:oracle:thin:@localhost:1521/orcl" --username=TEST_A --password=test --changeLogFile=db.test.xml generateChangeLog
Или
вы можете использовать тот же метод.Я заменил свойства, подобные этому, в файле liquibase.properties, и он работает нормально.Обратите внимание, что между
ключ = значение
changeLogFile=DatabaseChangelog.xml
schemas=TEST
driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521/service_name
username=TEST_A
password=password
logLevel=debug
logFile=log.txt
Для SID замените URL следующим образом
url=jdbc:oracle:thin:@localhost:1521:sid
Комментарии:
1. Спасибо за ответ! Я заменил свойства так, как вы упомянули, без пробелов и обозначения ‘=’, но я все равно получаю тот же результат. Использование косой черты
/
вместо точки с запятой:
прямо перед идентификатором SID в URL также не повлияло на поведение команды generateChangeLog. Я также пытался использовать другие версии ojdbc.jar безуспешно.2. Вы получаете ту же ошибку? Можете ли вы попробовать сгенерировать журналы изменений для одной схемы и посмотреть. Вы пробовали первый подход?