【问题标题】:DATABASECHANGELOGLOCK and DATABASECHANGELOG tablesDATABASECHANGELOGLOCK 和 DATABASECHANGELOG 表
【发布时间】:2022-06-16 00:54:26
【问题描述】:

在我们的应用程序中有四个 SQL Server 数据库:

db1
db2
db3
db4

在使用 liquibase 连接到 SQL Server 时,我们在连接字符串中使用 db2,然后执行部署。

由于连接字符串中使用了db2,所以在db2数据库中创建了DATABASECHANGELOGLOCK和DATABASECHANGELOG。

作为部署的一部分,每个 SQL 脚本的开头都有数据库名称,如

Script1.sql

USE db1
GO

—update/delete statements

GO

Script2.sql

USE db2
GO

—update/delete statements

GO

Script3.sql

USE db3
GO

—update/delete statements

GO

Script4.sql

USE db4
GO

—update/delete statements

GO

如果部署中的最后一个脚本是 db2(因为它在连接字符串和 DATABASECHANGELOGLOCK 和 DATABASECHANGELOG 中指定),则在 db2 数据库中创建。然后部署成功

但如果最后一个脚本属于其他数据库(db2 除外),则会出现错误:

liquibase.exception.LockException: liquibase.exception.LockException: 没有正确更新更改日志锁。

似乎是在部署最后一个脚本的数据库中搜索 DATABASECHANGELOGLOCK 和 DATABASECHANGELOG。

我该如何处理?

【问题讨论】:

    标签: liquibase


    【解决方案1】:

    发现于:Liquibase lock - reasons?

    有时如果更新应用程序突然停止,那么锁仍然卡住。

    然后运行

    UPDATE DATABASECHANGELOGLOCK SET LOCKED=0, LOCKGRANTED=null, LOCKEDBY=null where ID=1;
    

    对数据库有帮助。

    您可能还需要将LOCKED=0 替换为LOCKED=FALSE

    或者您可以简单地删除 DATABASECHANGELOGLOCK 表,它将被重新创建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 2020-10-12
      相关资源
      最近更新 更多