首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server 2012中未作为32位运行的SSIS包

SQL Server 2012中未作为32位运行的SSIS包
EN

Stack Overflow用户
提问于 2015-02-04 01:26:53
回答 2查看 18.2K关注 0票数 10

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

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

SQL实例的唯一不同之处在于,活动环境设置了,而测试没有设置。查看服务器的日志,当活动启动时,它运行sp_ssis_startup,然后记录有关正在加载的不安全程序集的消息。此SP没有在测试环境上运行,因为没有目录。

我创建的作业的标志设置为使用32位运行时,但我不禁觉得SSIS目录与我正在使用的VFPOLEDB有问题,而不是加载它。

我对SSIS目录一点也不了解,所以有人能提出我可以搬进去的方向吗?

更新:这是我的工作步骤配置。设置32位运行时标志。

更新2:

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

更新3:

我刚刚检查了一下,测试环境和活动环境并不像我原来所说的那样完全相同。活动服务器没有32位版本的dtexec.exe (尽管我认为这并不重要,因为TechNet说使用server代理运行的作业总是使用64位版本。我想我使用了x86和i64 ISO来设置测试环境,但是只有64位的版本才能进行实时测试。要改变这一点,我可以想象,需要从活动框中卸载Integration共享组件,然后用双iso重新安装它。

我猜,设置“使用32位运行时”选项只有在有一个32位版本可以使用时才有效?这也许能解释一切。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-04 16:07:21

默认情况下,服务器上的所有操作都将以64位的速度运行。要改变这种行为,您需要指示应该使用32位版本的德特涅克。对于2012年的SSISDB,我们有两种简单的方法来调用包: SQL和catalog.start_execution方法。

catalog.start_execution

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

在结果弹出对话框中,您将需要转到Advanced并选中32-bit runtime框。这将在包的每一次运行中完成。

在幕后,向导生成的SQL如下所示

代码语言:javascript
复制
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位设置,它基本上是相同的单击路径,但首先需要单击Configuration选项卡,然后单击Advanced以选择32-bit runtime

作业步骤定义看起来类似于

代码语言:javascript
复制
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

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

64位dtexec位置

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

32位dtexec位置

  • C:\程序文件(x86)\Microsoft Server\90\DTS\Binn\DTExec.exe
  • C:\程序文件(x86)\Microsoft Server\100\DTS\Binn\DTExec.exe
  • C:\程序文件(x86)\Microsoft Server\110\DTS\Binn\DTExec.exe
  • C:\程序文件(x86)\Microsoft 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 (与管理工具->数据源相关的可执行文件)的32位版本。更令人困惑的是,可执行文件名为odbcad32.exe,不管它是在System32还是SysWOW64中,这两个文件夹分别用于64位驱动程序和32位驱动程序。是的,未来的读者,这不是一个错误。64版本的应用程序在System32中,32位版本在SysWOW64中。这是一个旨在尽量减少影响的设计决定。

在测试和活动服务器上,运行C:\Windows\SysWOW64\odbcad32.exe查找您的FoxPro驱动程序和相关的DSN,它们是否与预期的一样?

第四步-奇怪的许可检查。作为“正常”帐户登录到两个服务器,并从命令行运行包。重复此步骤,但使用代理执行它,无论您是否定义了代理。如果第一种方法有效,但是后者失败了,这通常表示一个权限问题。可能是Server或代理帐户无法访问安装驱动程序的任何文件夹。可能是上述帐户需要InteractWithDesktop权限或其他被拒绝或未显式授予的权限。

票数 14
EN

Stack Overflow用户

发布于 2015-08-10 21:45:06

如果要在32位模式下从64位Server代理作业运行包,请选择作业步骤类型o->操作系统,然后输入命令行或使用调用32位版本的dtexec.exe的批处理文件。

命令: CD "C:\Program (x86)\Microsoft \120\DTS\Binn\“DTExec.exe /f "C:\Download\Root\SQL Package.dtsx”

或命令:“C:\程序文件(x86)\Microsoft SQL Server\120\DTS\Binn\DTExec.exe”/FILE "C:\Download\Root\SQL Package.dtsx“/MAXCONCURRENT”-1“/CHECKPOINTING OFF /REPORTING V /CONSOLELOG NCOSGXMT

注意:我使用的是SQL 2014 64位版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28311938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档