我在 EC2 上的 AWS 中运行的 SQL Server 2017 企业版面临一个奇怪的问题。
当我们在 SQL 服务器上并使用连接到集成服务的本地安装的 SSMS 导入 SSIS 包时,它是成功的。但是,包无法运行并出现错误:
The binary code for the script is not found. Please open the script in the designer by clicking Edit Script button and make sure it builds successfully.
但是,如果我们使用安装在 PC 上的 SSMS 从远程连接的 Windows 10 PC 执行完全相同的过程,则该程序包将正常运行。
服务器和 Windows 工作站都运行 SSMS 17.9.1。在 Help -> About 中比较版本会在所有内容上显示完全相同的版本号。同一域用户正在执行该过程,并且该用户是域管理员和 SQL 系统管理员。
这是没有意义的。是否有其他我不知道的组件正在使用?有任何想法吗?
这是我在这个问题上的发现。
首先,我在导入后从服务器导出了损坏的包。导入后我还从服务器导出了工作包。我并排比较了这两个文件,很快发现我们包中发生错误的脚本缺少
BinaryItem
元素中的二进制数据。我还可以使用以下查询直接查看服务器上的包数据:缺少的二进制代码向我表明,在导入过程中脚本没有被正确编译。
在浪费了很多时间试图找出原因之后,我意识到脚本相当简单,所以我应该查看一下脚本,看看里面有什么可能导致导入失败。
我发现了一个引用,
Microsoft.Office.Interop.Excel
它是随 Microsoft Office 一起安装的 Microsoft Office Primary Interop Assemblies 的一部分。在 SQL 服务器上,没有安装 Microsoft Office。因此,SQL 服务器上缺少与此引用相关的 .DLL 文件。删除错误的和不需要的参考解决了这个问题。我能够通过 Process Monitor 确认服务器在导入期间正在寻找这个 .DLL 文件,但无法找到它。
显然,如果在导入期间发生这种情况,则没有失败的迹象。长话短说,错误信息是准确的。二进制代码丢失。这是由于在导入期间未能编译源代码造成的。