【问题标题】:Liquibase update errorLiquibase 更新错误
【发布时间】:2013-10-07 18:51:34
【问题描述】:

我正在尝试使用 Liquibase 在数据库中创建一些表。

一些背景知识:我在本地 h2 数据库上执行了相同的 changelog.xml 文件,它运行成功。我用松鼠测试了下面的oracle数据库、用户名、密码和驱动程序,它连接成功。所以我相当肯定我正面临一个 liquibase 问题。我进行了广泛的谷歌搜索,但没有在 SO 或其他任何可以帮助我的地方找到任何东西。

我在命令提示符中输入了以下内容:

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 myUsername@jdbc: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

【问题讨论】:

    标签: oracle liquibase


    【解决方案1】:

    我在这里找到了答案:https://forum.liquibase.org/t/message-regarding-an-empty-result-set-for-databasechangeloglock/1487/2

    删除 databasechangeloglock 表为我解决了这个问题。

    【讨论】:

      【解决方案2】:

      如果您的 DATABASECHANGELOGLOCK 为空,则始终会出现错误。 (我不小心删除了这个表的记录后遇到了这个问题)。

      我找到的解决方案很简单:

      只需插入一个 ID=1, LOCKED=0, LOCKGRANTED=null, LOCKEDBY=null 的虚拟行

      就是这样!

      【讨论】:

        【解决方案3】:

        我们在尝试使用 postgresql 10.4 使用 liquibase 时遇到了相同核心异常的问题:

        Caused by: liquibase.exception.DatabaseException: Expected single row from 
        liquibase.statement.core.GetViewDefinitionStatement@1de5f25 but got 0`
        

        对我们来说,这似乎是我们的 jdbc 驱动程序的问题。

        我们的解决方案是将 jdbc 驱动程序从 9.3-1102-jdbc41 升级到 9.4-1202-jdbc41。

        【讨论】:

        • 这拯救了我的一天。非常感谢@Giorgos Gaganis ^^
        • 你拯救了我的一天!
        【解决方案4】:

        就我而言,问题是我使用过

        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>
        

        而不是

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.5</version>
        </dependency>
        

        对于 PostgreSQL 10.6。这样就解决了问题

        【讨论】:

          猜你喜欢
          • 2017-09-29
          • 1970-01-01
          • 1970-01-01
          • 2022-06-15
          • 2021-07-10
          • 2023-04-11
          • 2018-01-01
          • 2019-02-14
          • 2017-04-10
          相关资源
          最近更新 更多