当我使用 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文件时,数据库找不到该字段,因此出现错误。
你能给我一些建议吗?
请告诉如何解决这个问题
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