LiquidBase 事务执行被中止

问题描述 投票:0回答:1

当我使用 yml 文件执行一些 yml 文件以在 gcp spanner 数据库上创建和修改时。

由于网络中断,LiquidBase 交易执行被中止。

然后liquidbase被锁了,我执行下面的sql删除锁

delete from DATABASECHANGELOGLOCK where Id=1

我重新运行我的项目,我可以成功获得锁定,但出现错误

SpannerAsyncExecutionException: Execution failed for statement: ALTER TABLE sys_role DROP COLUMN status_apply

我猜字段上次已经被删除了,但是语句被中止了。当我重新执行yml文件时,数据库找不到该字段,因此出现错误。

你能给我一些建议吗?

请告诉如何解决这个问题

liquibase google-cloud-spanner liquibase-sql
1个回答
0
投票

Cloud Spanner 中的 DDL 操作不在事务中执行。这意味着,当操作在 Liquibase 中启动并发送到 Cloud Spanner,并且 Liquibase 与 Cloud Spanner 失去连接时,操作会在后台继续进行。它不需要被承诺。这再次意味着您的

ALTER TABLE sys_role DROP COLUMN status_apply
更改已应用到数据库,重新运行将会失败。

解决此问题的最佳方法是手动告诉 Liquibase 更改集已应用于数据库。

mark-next-change-set-ran
命令应该处理这个问题:https://docs.liquibase.com/commands/change-tracking/mark-next-changeset-ran.html

© www.soinside.com 2019 - 2024. All rights reserved.