You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liquibase update卡在“Executing on Database”问题求助

Liquibase执行Oracle Changelog卡在"Changelog query completed."

问题详情

执行Maven命令更新Oracle数据库时,进程卡在Executing on Database: <数据库地址>阶段,开启debug模式后确认实际停在Changelog query completed.日志行:

mvn clean verify [指定数据库的标识] liquibase:update  -Dliquibase.url=数据库地址  -Dliquibase.username=用户名  -Dschema=模式名  -Dliquibase.password=密码  -Dliquibase.changeLogFile=changelog路径

已尝试终端直接执行、验证数据库连接、debug排查、搜索资料,均未解决问题。

可行排查与解决步骤

1. 核对JDBC驱动兼容性

  • 替换为与Liquibase、Oracle版本匹配的JDBC驱动:Oracle 12c+建议用ojdbc8,避免使用过时的ojdbc6
  • 确认驱动包已正确引入Maven依赖,无版本冲突

2. 调整Liquibase Oracle专属参数

在命令中追加以下参数测试:

  • -Dliquibase.oracle.use.jdbc.metadata=false:禁用JDBC元数据查询,改用Liquibase原生Oracle适配逻辑
  • -Dliquibase.lock.wait.timeout=30:缩短锁等待超时时间,避免因锁阻塞无限等待
  • 将-Dschema=模式名替换为-Dliquibase.schemaName=模式名:部分版本中schema参数非标准命名,可能不生效

3. 排查Changelog文件问题

  • 简化changelog,仅保留一个基础变更集(如创建测试表),验证是否能正常执行,排除复杂SQL或循环依赖
  • 检查changelog路径是否包含中文/特殊字符,改用纯英文路径
  • 确认changelog文件无语法错误,尤其是XML/YAML格式的闭合标签或缩进问题

4. 检查数据库端状态

  • 查询Oracle会话等待事件:
    SELECT event, wait_time FROM v$session WHERE username = '<你的用户名>';
    
    定位是否存在锁等待或资源占用
  • 检查DATABASECHANGELOGLOCK表是否被锁定,若有则手动释放锁:
    UPDATE DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKGRANTED = NULL, LOCKEDBY = NULL WHERE ID = 1;
    
  • 确认执行用户拥有DATABASECHANGELOG、DATABASECHANGELOGLOCK表的读写权限,以及变更集所需的DDL权限

5. 升级Liquibase版本

若使用的是Liquibase 4.x早期版本,升级到最新稳定版,部分旧版本存在Oracle元数据查询的阻塞bug

内容的提问来源于stack exchange,提问作者user28589451

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:03:14