2013-10-01 106 views
4

我想用Liquibase在數據庫中創建幾個表。Liquibase更新錯誤

一些背景:我在本地h2數據庫上執行了相同的changelog.xml文件,它的工作非常成功。我用鼠標測試了下面的oracle數據庫,用戶名,密碼和驅動程序,並且它連接成功。所以我很確定我正面臨液化石油氣問題。我做了廣泛的谷歌搜索,沒有找到任何可以幫助我的東西或任何其他地方。

我進入下面進入命令提示符:

C:\>java -jar liquibase-core-2.0.5.jar --driver=oracle.jdbc.OracleDriver 
--classpath=ojdbc6-11.2.0.3.0.jar --changeLogFile=changelog.xml 
--url="jdbc:oracle:thin:@myDatabase" 
--username=myUsername --password=myPassword --logLevel=debug update 

其中返回:

DEBUG 9/30/13 3:09 PM:liquibase: Unable to load/access Apache Derby driver class 
to check version 
DEBUG 9/30/13 3:09 PM:liquibase: Connected to [email protected]:oracle:thin:@myDatabase 
DEBUG 9/30/13 3:10 PM:liquibase: Executing QUERY database command: SELECT LOCKED 
FROM DATABASECHANGELOGLOCK WHERE ID=1 FOR UPDATE 
Liquibase Update Failed: Empty result set, expected one row 
SEVERE 9/30/13 3:10 PM:liquibase: Empty result set, expected one row 
liquibase.exception.LockException: liquibase.exception.DatabaseException: Empty 
result set, expected one row 
    at liquibase.lockservice.LockService.acquireLock(LockService.java:121) 
    at liquibase.lockservice.LockService.waitForLock(LockService.java:61) 
    at liquibase.Liquibase.update(Liquibase.java:102) 
    at liquibase.integration.commandline.Main.doMigration(Main.java:825) 
    at liquibase.integration.commandline.Main.main(Main.java:134) 
Caused by: liquibase.exception.DatabaseException: Empty result set, expected one 
row 
    at liquibase.util.JdbcUtils.requiredSingleResult(JdbcUtils.java:124) 
    at liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java: 
159) 
    at liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java: 
167) 
    at liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java: 
163) 
    at liquibase.lockservice.LockService.acquireLock(LockService.java:96) 
    ... 4 more 

回答

7

如果您的DATABASECHANGELOGLOCK爲空,則錯誤將始終顯示。 (我意外地刪除了此表的記錄後,我有這個問題)。

我找到了解決辦法很簡單:

只需插入一個虛擬一行ID = 1,鎖定= 0,LOCKGRANTED = NULL,LOCKEDBY = NULL

這就是它!