创建数据库后,Liquibase锁定错误

时间:2019-11-27 08:36:06

标签: sql-server liquibase

我当前正在使用Liquibase Java API运行DDL脚本。整个脚本和相应的changeSet成功执行。但是,此执行之后,Liquibase会引发LockException。

错误日志如下,

    21713 [main] DEBUG liquibase.ext.mssql.database.MSSQLDatabase  - Executing Statement: ALTER 
    TABLE [dbo].[VALIDATIONEXECUTORS] CHECK CONSTRAINT [FK_MSTAPPTYPE_VLDTNEXCUTORS]
    21713 [main] INFO liquibase.executor.jvm.JdbcExecutor  - ALTER TABLE [dbo].[VALIDATIONEXECUTORS] 
    CHECK CONSTRAINT [FK_MSTAPPTYPE_VLDTNEXCUTORS]
    21715 [main] DEBUG liquibase.executor.jvm.JdbcExecutor  - 0 row(s) affected
    21715 [main] DEBUG liquibase.ext.mssql.database.MSSQLDatabase  - Executing Statement: COMMIT
    21715 [main] INFO liquibase.executor.jvm.JdbcExecutor  - COMMIT
    21735 [main] DEBUG liquibase.executor.jvm.JdbcExecutor  - -1 row(s) affected
    21735 [main] INFO liquibase.changelog.ChangeSet  - SQL in file 
    E:\\LQBASE\\LiquibaseDemo\\src\\main\\resources\\db\\changelog\\ddl\\DBSchema.sql executed
    21737 [main] INFO liquibase.changelog.ChangeSet  - ChangeSet 
    src/main/resources/db/changelog/ddl_changelog.xml::Create_DB::skini ran successfully in 18064ms
    21738 [main] INFO liquibase.executor.jvm.JdbcExecutor  - select schema_name()
    21739 [main] INFO liquibase.executor.jvm.JdbcExecutor  - SELECT MAX(ORDEREXECUTED) FROM 
    IND_DEV.DATABASECHANGELOG
    21742 [main] INFO liquibase.executor.jvm.JdbcExecutor  - select schema_name()
    21744 [main] DEBUG liquibase.executor.jvm.JdbcExecutor  - Release Database Lock
    21745 [main] INFO liquibase.executor.jvm.JdbcExecutor  - select schema_name()
    21747 [main] DEBUG liquibase.executor.jvm.JdbcExecutor  - UPDATE IND_DEV.DATABASECHANGELOGLOCK 
    SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1
    21749 [main] INFO liquibase.executor.jvm.JdbcExecutor  - select schema_name()
    **21751 [main] INFO liquibase.lockservice.StandardLockService  - Successfully released change log 
    lock
    21752 [main] ERROR liquibase.Liquibase  - Could not release lock
    liquibase.exception.LockException: liquibase.exception.DatabaseException: Error executing SQL 
    UPDATE IND_DEV.DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE 
    ID = 1: Invalid object name 'IND_DEV.DATABASECHANGELOGLOCK'.**
    at liquibase.lockservice.StandardLockService.releaseLock(StandardLockService.java:357)
    at liquibase.Liquibase.update(Liquibase.java:206)
    at liquibase.Liquibase.update(Liquibase.java:179)
    at liquibase.Liquibase.update(Liquibase.java:175)
    at liquibase.Liquibase.update(Liquibase.java:168)
    at 
    com.sk.liquibase.LiquibaseDemo.LiquibaseConfig.createManageIDDatabase(LiquibaseConfig.java:34)
    at com.sk.liquibase.LiquibaseDemo.App.main(App.java:12)
    **Caused by: liquibase.exception.DatabaseException: Error executing SQL UPDATE 
    IND_DEV.DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1: 
    Invalid object name 'IND_DEV.DATABASECHANGELOGLOCK'.**

根据该错误,以某种方式将IND_DEV(这是数据库用户名)附加到DATABASECHANGELOGLOCK表中。有谁知道这个问题可能是什么?

1 个答案:

答案 0 :(得分:0)

有时,如果更新应用程序突然停止,则锁将保持卡住状态。可能是由于被杀死的liquibase进程未释放其锁

然后跑步

UPDATE DATABASECHANGELOGLOCK SET LOCKED=0, LOCKGRANTED=null, LOCKEDBY=null;

针对数据库的帮助。

或者您可以简单地删除DATABASECHANGELOGLOCK表,它将重新创建。或您配置的任何更改日志锁名称。