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
相关产品推荐
相关产品推荐

