如何解决针对Oracle数据库运行Liquibase GenerateChangeLog命令导致空闲,并且在特定点之后日志文件/控制台中没有输出
我试图针对具有特定模式的现有Oracle数据库创建新的Liqubase DatabaseChangeLog.xml
文件,以从中获取db结构。目标是将现有的sql脚本替换为changeSet格式,并使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
当我在cli中执行liquibase generateChangeLog
时,我得到以下输出:
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
格式)连接到数据库。
有人试图从现有的oracle数据库创建新的DatabaseChangeLog.xml
时遇到同样的问题吗?我很高兴看到任何建议。
谢谢。
Unexpected error running Liquibase: liquibase.exception.DatabaseException: java.sql.sqlRecoverableException: No data to read from socket
For more information,please use the --logLevel flag
但是架构中有数据/表。
解决方法
您可以使用命令行工具从现有架构中生成变更日志。 使用以下命令,并注意多余的空间,因为liquibase会抱怨这一点。
请确保将ojdbc8-19.3.0.0.jar
复制到从下面提到的位置下载的liquibase-zip的 lib 文件夹中。
我从这里下载了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文件中替换了类似的属性,并且可以正常工作。请注意,之间没有空格
key = value
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=jdbc:oracle:thin:@localhost:1521:sid
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。