SSIS包从SQL Server 2019导入数据至MySQL 8.0时报列数不正确错误
SSIS 部署至Integration Services Catalog 报列数错误解决方案
故障根因
该错误并非由包逻辑、列映射或驱动版本不一致导致,核心是SSIS Catalog执行时的默认验证机制、安全上下文,与MySQL 8.0 ODBC驱动的元数据读取行为不匹配导致:本地运行或dtexec调用时使用当前登录用户的权限上下文读取MySQL表元数据正常,而Catalog默认执行上下文权限不足、或额外触发了多余的运行时元数据校验,误判列数不匹配。
解决步骤
- 调整包验证属性
打开SSIS包,将包全局的DelayValidation属性设置为True,同时找到所有对接MySQL的数据流组件,将其ValidateExternalMetadata属性设置为False,确认列映射正确的前提下禁用执行阶段的额外外部元数据校验,重新编译部署包即可,这是优先级最高的修复方案。 - 调整运行时位数配置
在SSIS Catalog手动执行包时,勾选「使用32位运行时」选项;如果通过SQL Server代理调度,在作业步骤的「配置」页签中同样勾选「使用32位运行时」。即使同时安装了32/64位驱动,Catalog默认调用的64位驱动安全上下文权限与本地运行时不一致,切换32位可规避该类元数据读取异常。 - 修正ODBC连接配置
打开MySQL ODBC DSN配置项,在「Details」设置页中勾选「Don't prompt for questions when using connection」,同时在连接字符串中追加参数OPTION=3;NO_PROMPT=1;,禁用驱动运行时的自动元数据修正逻辑,避免驱动在Catalog权限上下文下误判表结构。 - 调整执行身份权限
手动执行包时指定具备本地管理员权限、且拥有MySQL数据库读写权限、ODBC DSN访问权限的账号作为运行身份;如果是代理调度,将SQL Server代理服务账号替换为上述高权限账号,避免默认的SSIS虚拟执行账号权限不足导致元数据读取失败。
验证方法
完成调整后先部署简单测试包到Catalog手动执行,验证无报错后再批量调整所有业务包的属性重新部署,无需修改原有数据流逻辑和列映射配置。
内容的提问来源于stack exchange,提问作者Arseniy
相关产品推荐
相关产品推荐

