使用Liquibase对Snowflake执行snapshot操作失败如何排查?
可能故障原因及排查方案
- 账号权限不足
当前使用的数据库账号对目标Schema下的某一个视图缺少REFERENCE_USAGE或SELECT权限,Liquibase枚举对象列表时能感知到视图存在,但查询视图定义时无法获取对应数据返回0行。可执行以下SQL验证权限:
确认权限缺失的话给账号对应视图授权即可解决。-- 查看当前账号的权限配置 SHOW GRANTS TO USER <实际用户名>; -- 验证是否能读取所有视图的定义 SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'schemaname' AND TABLE_CATALOG = 'dbname'; - 并发变更导致对象不存在
执行snapshot命令的过程中,有其他用户在目标Schema下执行了视图删除操作,Liquibase预枚举对象列表时视图仍然存在,查询定义时视图已被删除。可在无变更的低峰期重试命令验证是否复现。 - 大小写敏感适配问题
Snowflake默认对象名大写,若创建视图时使用双引号指定了小写/混合大小写的视图名,4.4.3版本的Liquibase Snowflake扩展拼接查询语句时未自动添加双引号,导致查询时视图名不匹配返回0行。可排查Schema下是否存在大小写混合命名的视图,定位是否为这类视图触发报错。 - 版本已知Bug
Liquibase 4.4.3版本的Snowflake扩展存在视图处理的已知缺陷,可临时添加参数跳过视图快照验证问题是否由视图模块导致:
跳过视图后命令可正常执行的话,可升级Liquibase及对应Snowflake扩展到最新稳定版修复该问题。liquibase --username=XXX --password='XXX' --driver=net.snowflake.client.jdbc.SnowflakeDriver --url='jdbc:snowflake://lala.east-us-2lala.azure.snowflakecomputing.com?db=dbname&schema=schemaname&warehouse=warehousename' --snapshotFormat=json snapshot --output-file=snapshot.json --exclude-objects=view:*
内容的提问来源于stack exchange,提问作者Keshav Agrawal
相关产品推荐
相关产品推荐

