SSIS 包未在 SQL Server 2012 中以 32 位运行

2024-01-01

我有一个在 VS2012 中开发的包(使用 SQL 数据工具组件),它使用 VFPOLEDB 提供程序从 DBF 文件收集数据,并将其放入 SQL Server 2012 X64 服务器上的数据库中。包含该包的项目将 Run64BitRuntime 的 DebugOption 设置为 false。我已将此包导入到测试服务器和实时服务器的 SSIS 包存储中(相同的设置)。 VFPOLEDB 提供程序安装在两台计算机上,我可以在两台计算机的注册表中看到它适用于 32 位运行时。

该包在测试机器上运行良好,但在实际机器上失败。 SQL 的实时实例似乎无法识别已安装的 32 位 VFPOLEDB 提供程序。

SQL 实例的唯一区别是实时环境设置了集成服务目录,而测试则没有。查看服务器的日志,当实时启动时,它会运行 sp_ssis_startup,然后记录有关加载不安全程序集的消息。该 SP 未在测试环境中运行,因为没有目录。

我创建的作业将标志设置为使用 32 位运行时,但我忍不住觉得 SSIS 目录与我正在使用的 VFPOLEDB 存在问题,并且未加载它。

我对 SSIS 目录一无所知,所以有人能建议我可以前进的方向吗?

Update: Here is my job step configuration. The 32bit runtime flag is set. SSIS Job Step Configuration

更新#2:

  1. OLEDB 提供程序已正确安装。
  2. 两台机器上都安装了相同版本的提供程序。
  3. OBDCAD32.exe 显示相同版本的 VFPOLEDB 提供程序。两台机器上均未定义 DSN。我的本地计算机确实定义了 DSN,因此我将尝试为 dBASE 文件添加一个 DSN,看看是否有帮助。
  4. 现在正在尝试这一步。我正在寻找一种使用 dtexec 工具而不创建 SSISDB 目录的方法。尽管我确实删除了现有的 SSIS 目录并停止在服务启动时执行 sp_ssis_startup 。我没有看到有关不安全程序集的日志条目,但作业仍然失败,并出现与往常相同的错误。我将在 4 日进行汇报,并可能进一步请求进一步的指导。

更新#3:
我刚刚检查过,测试环境和实际环境并不像我最初所说的那样。实时服务器没有 32 位版本的 dtexec.exe(尽管我认为这并不重要,因为TechNet https://msdn.microsoft.com/en-us/library/hh231187(v=sql.110).aspx#bit表示使用 SQL Server 代理运行的作业将始终使用 64 位版本。我想我使用了 x86 和 i64 ISO 来设置测试环境,但仅使用 64 位版本进行实时测试。我想,更改此设置需要从 Live Box 中卸载 Integration Services 共享组件,然后使用双 ISO 重新安装。

我想设置“使用 32 位运行时”选项只有在有 32 位版本可供使用时才有效?这或许可以解释一些事情。


默认情况下,一切都将以 64 位在服务器上运行。要更改此行为,您需要指出 32 位版本dtexec https://msdn.microsoft.com/en-us/library/hh231187.aspx应该使用。对于 2012 SSISDB,我们有两种简单的方法来调用我们的包:SQL 代理和catalog.start_execution方法。

目录.start_execution

对于单个服务包运行,您可以在 SSISDB 目录中找到该包并右键单击它们以Execute...

在弹出的对话框中,您需要转到“高级”选项卡并检查32-bit runtime盒子。这将在每次运行包时完成。

在幕后,向导生成的 SQL 看起来像

DECLARE @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution]
    @package_name = N'Package.dtsx'
,   @execution_id = @execution_id OUTPUT
,   @folder_name = N'POC'
,   @project_name = N'SSISConfigMixAndMatch'
,   @use32bitruntime = True
,   @reference_id = NULL
SELECT
    @execution_id
DECLARE @var0 smallint = 1
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
    @execution_id
,   @object_type = 50
,   @parameter_name = N'LOGGING_LEVEL'
,   @parameter_value = @var0
EXEC [SSISDB].[catalog].[start_execution]
    @execution_id
GO

如您所见,@use32bitruntime参数传递一个 True 值,表示它应该在 32 位空间中运行。

SQL代理

对于重复运行的包,我们通常使用调度工具。要在代理中获取程序包的 32 位设置,其单击路径基本相同,只是您首先需要单击“配置”选项卡并then单击“高级”选项卡进行选择32-bit runtime

作业步骤定义看起来像

EXEC msdb.dbo.sp_add_jobstep
    @job_name = N'Do it'
,   @step_name = N'Run in 32bit'
,   @step_id = 1
,   @cmdexec_success_code = 0
,   @on_success_action = 1
,   @on_fail_action = 2
,   @retry_attempts = 0
,   @retry_interval = 0
,   @os_run_priority = 0
,   @subsystem = N'SSIS'
,   @command = N'/ISSERVER "\"\SSISDB\POC\SSISConfigMixAndMatch\Package.dtsx\"" /SERVER "\".\dev2014\"" /X86 /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E'
,   @database_name = N'master'
,   @flags = 0

您将看到在 @command 调用中,向导生成了/X86call 这是为 SQL Agent 保留的特殊参数(检查开头的 BOL 链接),以指示是否应使用 32 位版本或 64 位版本的 dtexec。命令行调用需要我们显式使用正确的 dtexec。默认情况下,64 位 dtexec 将在您的 PATH 环境中首先列出

64 位 dtexec 位置

  • C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTExec.exe
  • C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
  • C:\Program Files\Microsoft SQL Server\110\DTS\Binn\DTExec.exe
  • C:\Program Files\Microsoft SQL Server\120\DTS\Binn\DTExec.exe

32 位 dtexec 位置

  • C:\Program Files (x86)\Microsoft SQL Server\90\DTS\Binn\DTExec.exe
  • C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
  • C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\DTExec.exe
  • C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\DTExec.exe

进一步排除驱动程序故障

它在一台服务器上运行,而不在另一台服务器上运行。

第 1 步 - 验证您已安装驱动程序。愚蠢,显而易见,但存在许多问题,人们错误地认为部署 SSIS 包/.ispac 也会部署所有引用的程序集。它不是 nuget,所以不,所有先决条件都需要安装,并且安装正确(看到人们尝试将程序集复制到 GAC 而不是使用该工具)

第 2 步 - 验证驱动程序安装在服务器之间是否匹配。再次,似乎很明显,但我经历过痛苦,通常是 VS_NEEDSNEWMETADATA,驱动程序版本 4.0.2.013 中的点差异产生了与 4.0.2.014 不同的结果

步骤 3 - 确保您定义的所有 DSN 均定义在正确的空间中。这种动物会因为多种原因咬人。我认为直到 Server 2012,您才只能通过在文件系统上找到 odbcad32.exe(与管理工具 -> 数据源 (ODBC) 相关的可执行文件)来获取 odbcad32.exe 的 32 位版本。更令人困惑的是,可执行文件的名称为 odbcad32.exe,无论它是在 System32 还是 SysWOW64 中,而这两个文件夹分别用于 64 位驱动程序和 32 位驱动程序。是的,未来的读者,这不是一个错字。 64位版本的应用程序位于System32中,32位版本位于SysWOW64中。这是一项旨在最大程度地减少影响的设计决策。

在测试和实时服务器上,运行C:\Windows\SysWOW64\odbcad32.exe找到您的 FoxPro 驱动程序和相关的 DSN,它们是否符合预期?

第 4 步 - 奇怪的权限检查。以“普通”帐户登录两台服务器,然后从命令行运行该包。重复此步骤,但使用代理执行它,无论您是否已定义代理。如果第一个有效但后者失败,通常表明存在权限问题。可能是 SQL Server 或代理帐户无法访问驱动程序安装到的任何文件夹。该帐户可能需要 InteractWithDesktop 权限或某些其他被拒绝或未明确授予的权限。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSIS 包未在 SQL Server 2012 中以 32 位运行 的相关文章

  • 查询具有相同ID的同一列中具有不同值的SQL表

    我有一个 SQL Server 2012 表ID First Name and Last name The ID每个人都是唯一的 但由于历史提要中的错误 不同的人被分配了相同的 ID ID FirstName LastName 1 ABC
  • 根据单元格位置将选择性字段从 Excel 批量插入到 SQL

    我有一个 SSIS 包 我必须从 Excel 工作表中选择一些值并将它们插入到 SQL Server 数据库表中 我是通过执行 sql 任务来完成的 这些是步骤 从映射表中选择所有记录 单元格位置是动态的 因此将其保留在 SQL 表中 大约
  • SSIS将字符串变量保存到文本文件

    看起来应该很简单 但到目前为止我还没有找到一种方法将存储在 SSIS 字符串变量中的值保存到文本文件中 我研究过在数据流内部使用平面文件目标 但这需要数据流源 关于如何做到这一点有什么想法吗 使用脚本任务 我刚刚尝试过这个 我创建了一个文件
  • OledbConnection.Dispose() 是否关闭连接? [复制]

    这个问题在这里已经有答案了 可能的重复 如果使用 using 子句 是否需要关闭 DbConnection https stackoverflow com questions 12033998 is there any need to cl
  • SSDT-BI 可以与 SQL Server 2008 R2 一起使用吗?

    有人可以告诉我在 Visual Studio 2012 或 2013 中开发的 SSIS 包是否可以在 2008r2 服务器上运行吗 如果是 2008r2服务器上还需要安装其他软件吗 这里不关心部署 我只想通过 sql 代理作业在 2008
  • 使用 OleDbConnection 读取使用 Open xml SDk 创建的 xlsx 文件

    我使用 Open Xml SDK 标准创建了 xlsx 文件 在 Excel 中打开它时 一切都很完美 我的问题是我无法使用 OleDbConnection 打开该创建的文件 但其他未创建的 xlsx 文件 OleDB 也可以打开 将很高兴
  • 敏感 SSIS 包参数字符串中的特殊字符导致包无效

    我的 SSIS 包上有一个敏感字符串参数 用于存储远程服务器的密码 但是 当字符串值包含大括号时 作业代理会在配置该步骤的包参数时引发错误 Microsoft SQL Server Management Studio 在命令行参数中检测到错
  • 搜索具有多个值的多列 SQL

    我知道可以用一个值搜索多个列 我想在 3 4 列中搜索 4 个或者 5 个值 我想检查我选择的任何列是否具有特定值 Example Column 1 Column 2 Column 3 Column 4 Hello True Goodbye
  • SSIS 脚本任务在服务器上失败,并出现错误“无法加载脚本以执行”

    我有 3 个带有脚本任务的 SSIS 包 它们都执行非常相似的操作 查询 SQL Server 数据库 循环遍历结果 然后为每一行调用 SOAP Web 服务 这些包在本地运行良好 并且在开发和 QA 服务器上运行良好 在生产服务器上 1
  • SSIS:如何将项目连接管理器移动到包中

    我有一个 2012 SSIS 项目 其中在项目级别定义了许多连接管理器 该项目还包括许多引用这些连接管理器的包 现在我想将我的项目转换为部署模型 但向导指定我需要删除项目中的连接管理器 这意味着将连接管理器移动到包中 如何将项目级连接管理器
  • SSIS - 将参数传递给 ADO .NET 源查询

    我知道早些时候已经有人问过这个问题 大多数答案都不相关 谷歌了一下 显示解决办法是在 数据流任务 中配置表达式并设置查询 然而 在 ADO NET 源中 当我尝试预览输出时 我不断收到 Must declare the variable 它
  • 在 SSIS 中使用 OLE DB 从 Sybase 提取数据时出错

    我在 SSIS 2017 中使用 Advantage 11 OLE DB Provider 从 Sybase 提取数据时遇到问题 我可以连接到数据库 查看表列表 并且在选择表作为数据源时 我可以看到列 但是 当我单击 预览 或运行数据流任务
  • SSIS使用列位置而不是名称导入Excel文档

    我想知道是否可以通过按位置引用列来使用 SSIS 导入 Excel 文档 例如 导入列 A D M AA 等 我问这个问题是因为我需要从第三方加载多个 Excel 文档 每个文档在相应的列中包含相同的数据类型 但每个文档的列名称不同 Tha
  • 从 PowerShell 运行 SSIS 包,无需部署项目

    This https learn microsoft com en us sql integration services ssis quickstart run powershell view sql server ver16 ssis
  • SQL Server:如果存在会大大减慢查询速度

    正在使用SQL Server 2012 我找到了一些关于查询优化的主题 并将 EXISTS 与 COUNT 进行比较 但我找不到这个确切的问题 我有一个看起来像这样的查询 select from tblAccount as acc join
  • 如何使用 ssis 2008 循环遍历 Excel 文件并获取工作表名称

    我正在尝试将 Excel 文件中的数据加载到 SQL 数据库表中 该文件的工作表名称不是静态的 工作表名称包含 yyyymmdd 它会随每个文件而变化 我按照提供的解决方案进行操作如何使用 SSIS 包循环遍历 Excel 文件并将其加载到
  • 从原始数据创建 n 个新行,例如 (1000....1000+n)

    我需要从 Excel 工作簿中读取数据 其中数据以这种方式存储 Company Accounts Company1 3000 3999 Company2 4000 4019 4021 4024 在 SSIS 中使用 OLE DB 目标的预期
  • SQL Server xp_delete_file 参数

    谁能解释一下清单xp Delete filesql server 中的参数 我没有找到此存储过程的 msdn 文档 我从维护计划中获取了 xp Delete file 脚本 但不理解第一个参数 xp delete file取五个参数 文件类
  • 脚本任务无法在 Visual Studio 2013 中打开编辑器

    我正在使用 SSIS 2014 和 Visual Studio 2013 当我单击脚本任务的 编辑脚本 按钮时 没有错误 没有任何反应 但脚本编辑器没有打开 我在我的机器上安装后什么也没发生 Microsoft Visual Studio
  • 如何跳过 SSIS 数据流中的最后一行

    我在用FlatFile Source Manager gt Script COmponent as Trans gt OLEDB destination在我的数据流中 源从平面文件读取所有行 我想跳过更新数据库的最后一行 预告片记录 由于它

随机推荐

  • 来自 Xib 的 Cell 与 Swift 3

    我已经阅读并看过一些有关此主题的视频 但我无法让它发挥作用 我正在尝试使用 xib 中的单元格而不是故事板 这是我的 ViewController 其中有表视图 import UIKit class ViewController UIVie
  • panelgrid 内的复合组件未“扩展”

    基本上 我一直在 panelgrid 中一次又一次地使用这种模式
  • 如果我在 Python 脚本运行时修改它会发生什么?

    想象一下 一个Python脚本需要很长时间才能运行 如果我在它运行时修改它会发生什么 结果会不同吗 没什么 因为 Python 将你的脚本预编译成 PYC 文件并启动它 但是 如果发生某种异常 您可能会得到一个稍微误导性的解释 因为行X可能
  • PHP:我如何知道函数的调用者?

    我如何知道 php 中函数的调用者 不知道为什么你会关心这个 但你可以从debug backtrace http php net debug backtrace功能
  • 调整窗口大小时自动调整文本大小(字体大小)?

    我一直在尝试 徒劳地 构建一个页面 其元素会随着我更改窗口大小而调整大小 我让它在图像的 CSS 中工作没有问题 但我似乎无法在文本中完成同样的工作 而且我不确定它在 CSS 中是否可能 我似乎找不到一个 jquery 脚本来完成这个任务
  • Chrome 教程 - 选项页面

    我正在开发我的第一个 chrome 扩展 我关注了这篇文章http code google com chrome extensions options html http code google com chrome extensions
  • 合并大量netCDF文件

    我有一个包含 netCDF nc 文件的大文件夹 每个文件都具有相似的名称 数据文件包含时间 经度 纬度和月降水量的变量 目标是获取 X 年内每个月的平均月降水量 所以最后我会得到 12 个值 代表 X 年内每个纬度和经度的平均月降水量 多
  • 使用 HttpModule 的 WCF URL 重定向

    我想将 Service1 的所有请求重定向到 Service2 我尝试使用 HTTPModule 进行此操作 但我没有运气 请建议任何方法来实现这一目标 非常感谢 可以通过内置的方法来完成代码密集程度较低的重定向调用的方法WCF 路由服务
  • 有序字典,保留初始顺序

    有序字典 import collections d banana 3 apple 4 pear 1 orange 2 collections OrderedDict sorted d items key lambda t t 0 上面的例子
  • Angular 5 材质多垫菜单

    I am quite new to Angular 5 and have just started learning it Recently I have been trying to create a menu bar with mult
  • 样式 AutoCompleteBox 错误指示器

    是否可以更改当 WPF 工具包中的 AutoCompleteBox 出现错误时出现的红色矩形的样式 我成功地在 TextBox 上更改了它 只是为控件创建了一个新样式 但无论我对 AutoCompleteBox 做什么 我都无法摆脱那个红色
  • 将 LibGDX 与 Android 首选项结合使用

    我正在尝试将 Android 的首选项系统与 LibGDX 的首选项系统结合使用 它们都使用 SharedPreferences 作为后端 所以我认为它们应该能够一起工作 但是当我尝试在 LibGDX 的首选项中加载数据时 我没有得到任何数
  • 瓢虫调试器的一些功能在 symfony2 php 应用程序中不起作用

    我正在用这个 https github com raulfraile LadybugBundle https github com raulfraile LadybugBundle 它们具有三个功能 ld var1 var2 shortcu
  • 运行 pod 和节点的 Kubernetes prometheus 指标?

    我已经设置了 prometheus 通过遵循 prometheus 来监控 kubernetes 指标文档 https github com prometheus docs blob master content docs operatin
  • MySQL - 持久连接与连接池

    为了避免每次需要向 MySQL 发起查询时建立新连接的开销 有两个选项可用 持久连接 请求新连接时会检查 相同 连接是否已打开 如果已打开 则使用它 连接池 客户端维护一个连接池 以便每个需要使用连接的线程将从池中取出一个连接 并在完成后将
  • 查看 CFHTTP 调用的原始 HTML

    有没有办法输出原始htmlCFHTTP称呼 我试图了解一些标头身份验证信息是如何出现的 我对浏览器插件或代码更新持开放态度 只要能帮助我了解期间发生的情况即可cfhttp call 例如
  • 为什么 Hibernate Search 需要花费这么多时间来构建索引?

    我正在尝试通过 hibernate 搜索构建 lucene 索引FullTextSession createIndexer startAndWait 但即使测试数据非常少 它也不会结束 这是我的代码 Component hibernateS
  • ExtJS 4 中服务器调用后取消 store.remove

    我正在使用 ExtJS 4 并有一个带有 ajax 代理和 api 的 Ext data Store var gridStore Ext create Ext data Store autoSync true proxy type ajax
  • 如何在 PHP 中进行 URL 重写?

    这是一个双重问题 正确的答案将是 How you do it in PHP 解释是否有任何优势 如果可能的话也很重要 我只是很好奇 因为我真的不知道 而且我在网页上看到很多 编辑 我不知道技术名称 但例如 Stackoverflow 上的示
  • SSIS 包未在 SQL Server 2012 中以 32 位运行

    我有一个在 VS2012 中开发的包 使用 SQL 数据工具组件 它使用 VFPOLEDB 提供程序从 DBF 文件收集数据 并将其放入 SQL Server 2012 X64 服务器上的数据库中 包含该包的项目将 Run64BitRunt