在我们的应用程序中有四个SQL服务器数据库:
db1
db2
db3
db4
在使用liquibase连接到SQL Server时,我们在连接字符串中使用db2,然后执行部署。
由于db2用于连接字符串,所以DATABASECHANGELOGLOCK和DATABASECHANGELOG是在db2数据库中创建的。
作为部署的一部分,每个SQL脚本在开始时都有数据库名称,如
Script1.sql
USE db1
GO
—update/delete statements
GO
脚本2.sql
USE db2
GO
—update/delete statements
GO
脚本3.sql
USE db3
GO
—update/delete statements
GO
Script4.sql
USE db4
GO
—update/delete statements
GO
如果部署中的最后一个脚本是db2(如连接字符串中指定的那样,并且在db2数据库中创建了DATABASE CHANGELOCK和DATABASE CHANGELOG)。然后部署成功
但是,如果最后一个脚本来自其他数据库(db2除外),我会得到一个错误:
liquibase.exception.LockException:liquibase.exception.LockException:没有正确更新更改日志锁。
似乎要在部署最后一个脚本的数据库中搜索DATABASECHANGELOGLOCK和DATABASECHANGELOG。
我该怎么办?
发现:液化锁-原因?
有时,如果更新应用程序突然停止,则锁仍然卡住。
然后跑
UPDATE DATABASECHANGELOGLOCK SET LOCKED=0, LOCKGRANTED=null, LOCKEDBY=null where ID=1;
对数据库有帮助。
您可能还需要将锁定=0替换为锁定=FALSE。
或者您可以简单地删除DATABASECHANGELOGLOCK表,它将被重新创建。
我是liquibase的新手,我想在生产中的数据库上使用它。这是一个很小的应用程序,但我不想手工创建模式,而是想使用更专业的东西,比如LiquiBase。 我计划做的是在生产中的当前模式和新模式之间为新应用程序准备一个changelog。我已经遵循了许多教程,但仍然缺少一些东西。输出changelog.xml总是导入所有模式,并且与现有模式没有区别。我看到liquibase必须创建表DATABAS
我正在从事一个项目,该项目在少数几个服务器上管理许多数据库,我们正在使用liquibase来保持我们的数据库结构是最新的。 根据我的理解,liquibase的目的是在第一次识别到为特定数据库执行的变更日志文件时生成databasechangelogLock和databasechangelogLock表。 谢谢
我想从我的changelog文件生成一个SQL文件,该文件只包含databasechangelog表,并在其中插入数据库的当前状态。在liquibase文档中有一篇文章(http://www.liquibase.org/2015/07/without-a-connection.html),其中写道,您可以将设置为,但在我的例子中它不起作用。我的属性文件如下所示: 但是,当我通过命令行使用时,它生成
在进行了一些程序内操作之后,我最终得到了一个包含我要执行的变更日志的xom文档对象。根据我的理解,我必须在ChangeLogParser的帮助下将其转换为liquibase XML格式ParsedNode。但该接口在parse方法中假设一个外部表示形式。使用ResourceAccessor将Document对象注入解析器也是不可能的,因为方法getResourcesAsStream返回一组Inpu