我在使用 ODBC 驱动程序(版本 2.0.4.155)连接到 Firebird 数据库的 SSIS 作业时遇到问题。
- SSIS 包在安装在 Windows 7 32 位(别问!)上的 Visual Studio 2008 中完美运行
- 在 SQL Server 2008 64 位中部署到 SSIS 时,包无法执行。错误:
未找到数据源名称且未指定默认驱动程序。
这立即让我想到 ODBC 驱动程序不匹配可能是问题所在,SSIS 正在寻找 32 位驱动程序。所以这就是我所做的:
- 卸载 Firebird ODBC 64 位驱动程序
- 安装了 Firebird ODBC 32 位驱动程序
- 修改了 SQL Server 中的作业计划,使其以 32-vbit 执行
- 之后包成功运行——但是有一个转折。
只要我仍然登录到 SQL 服务器(我登录是为了安装 Firebird 驱动程序),我就可以再次执行该程序包。我什至可以从删除的 SQL Server Management Studio 连接中执行它——但只要我不从服务器注销。
如果我从服务器注销,则 SSI 作业将不再工作(与以前相同的错误)。这让我认为这实际上不是 32/64 位不匹配,但由于权限不足,我从服务器注销后可能没有提交某些注册表或环境变量(即使我本应是管理员那个服务器)。
所以对于我的下一个测试:
- 我卸载了 32 位驱动程序
- 重新安装了 64 位驱动程序
- 保持登录到 SQL 服务器
- 从远程 SQL Server Management Studio 一次又一次地执行作业:它每次都有效
我从该 SQL 服务器注销后,该行为再次发生。一开始很难排除故障,因为驱动器安装时没有出现任何错误,甚至一开始就可以正常工作。
但我现在确信这与权限有关。任何想法我可能会错过什么?
这里的问题是我必须创建一个系统 DSN,这实际上很奇怪,因为 SSIS 作业计划使用用户 DSN 所在的帐户运行,并且只要我使用该帐户登录到服务器,它就可以工作帐户。无论如何,我太累了,无法理解为什么用户 DSN 不起作用。所以我决定改用系统 DSN。
并不是我反对系统 DSN(恰恰相反!),但设置此用户 DSN 的不是我,而且我不知道用于创建系统 DSN 的凭据的密码。所以我必须有点创意。
我不得不使用注册表编辑器和记事本将用户 DSN 转换为系统 DSN。这是我的做法:
上面概述的过程基本上将所有用户 DSN 条目复制为系统 DSN 条目。如果您只复制一个条目,那么您将需要删除它们在 .\ODBC.INI 下的对应项以及它们在 .\ODBC.INI\ODBC 数据源中的对应条目。