引入liquibase-core依赖默认启用后报ORA-01031权限不足问题
问题根因
如果你使用的是Spring Boot框架,默认的LiquibaseAutoConfiguration自动装配类会在检测到classpath下引入了liquibase-core依赖时,默认启动Liquibase能力,无需显式声明配置。
- Liquibase运行前无论是否配置自定义changelog,都会优先校验两张核心元数据表是否存在:
DATABASECHANGELOGLOCK(分布式锁表,防止多实例同时执行变更冲突)、DATABASECHANGELOG(变更记录轨迹表),如果不存在就会自动触发建表逻辑,你遇到的报错就是建锁表时权限不足导致。 - 你没有单独声明
@LiquibaseDataSource时,Liquibase会直接复用Spring容器中注册的主DataSource,也就是你配置的Kerberos认证Oracle数据源,该数据源对应的账号没有MYSCHEMA下的建表权限,所以抛出ORA-01031错误。 - 即使你未配置任何changelog,Liquibase的初始化逻辑也会先执行元数据表的创建检查,之后才会校验changelog配置,因此你没配changelog也会触发建表操作。
解决方案
场景1:不需要使用Liquibase做数据库变更管理
直接关闭Liquibase自动装配即可,两种实现方式二选一:
- 在application.yml/application.properties中添加配置:
spring: liquibase: enabled: false
- 在启动类的
@SpringBootApplication注解中排除自动配置类:
@SpringBootApplication(exclude = LiquibaseAutoConfiguration.class)
场景2:需要使用Liquibase
- 先给当前Oracle账号授予对应schema下的建表、建索引权限:
GRANT CREATE TABLE, CREATE INDEX TO <你的数据库账号>;
- 如果你不想把元数据表存在当前
MYSCHEMA下,可以额外指定有权限的schema存储元数据:
spring: liquibase: liquibase-schema: <指定有建表权限的schema名>
- 后续补充changelog配置即可正常执行数据库变更逻辑。
内容的提问来源于stack exchange,提问作者duppydodah
相关产品推荐
相关产品推荐

