SSIS包在SQL Server 2012中未作为32位运行
我有一个在VS2012中开发的包(使用SQL数据工具组件),它使用VFPOLEDB提供程序从DBF文件收集数据,并将其放入SQL Server 2012 X64服务器上的数据库中。包含包的项目的调试选项Run64BitRuntime设置为false。我已将此包导入测试和实时服务器的SSIS包存储(相同的设置)。VFPOLEDB提供程序安装在这两台机器上,我可以在这两台机器的注册表中看到它用于32位运行时 包在测试机器上运行正常,但在活动机器上失败。SQL的实时实例似乎无法识别已安装的32位VFPOLEDB提供程序 SQL实例的唯一区别在于,live环境设置了集成服务目录,而测试没有设置。查看服务器的日志,当live启动时,它运行sp_ssis_startup,然后记录有关正在加载的不安全程序集的消息。此SP未在测试环境上运行,因为没有目录 我创建的作业将标志设置为使用32位运行时,但我忍不住觉得SSIS目录与我正在使用的VFPOLEDB有问题,并且没有加载它 我真的对SSIS目录一无所知,所以有人能给我建议我可以前进的方向吗 更新: 这是我的作业步骤配置。设置32位运行时标志。 更新#2:SSIS包在SQL Server 2012中未作为32位运行,ssis,sql-server-2012,oledbconnection,visual-foxpro,ssis-2012,Ssis,Sql Server 2012,Oledbconnection,Visual Foxpro,Ssis 2012,我有一个在VS2012中开发的包(使用SQL数据工具组件),它使用VFPOLEDB提供程序从DBF文件收集数据,并将其放入SQL Server 2012 X64服务器上的数据库中。包含包的项目的调试选项Run64BitRuntime设置为false。我已将此包导入测试和实时服务器的SSIS包存储(相同的设置)。VFPOLEDB提供程序安装在这两台机器上,我可以在这两台机器的注册表中看到它用于32位运行时 包在测试机器上运行正常,但在活动机器上失败。SQL的实时实例似乎无法识别已安装的32位VFP
我刚刚检查过,测试和现场环境并不像我原来说的那样完全相同。live server没有32位版本的dtexec.exe(虽然我不认为这有什么关系,因为我说使用SQL Server Agent运行的作业将始终使用64位版本。我认为我使用了x86和i64 ISO来设置测试环境,但仅使用64位版本进行live设置。我想,更改这一点需要从live box卸载Integration Services共享组件并重新插入用双iso校准它
我猜设置“使用32位运行时”选项仅在有32位版本可供使用时有效?这可能会解释问题。默认情况下,服务器上的所有内容都将以64位运行。要更改此行为,您需要指示应使用的32位版本。对于2012 SSIDB,我们有两种调用包的简单方法:SQL代理和
catalog.start\u execut离子
方法
catalog.start\u执行
对于单服务包运行,您可以在SSIDB目录中找到该包,然后右键单击它们以执行…
在结果弹出对话框中,您需要转到“高级”选项卡并选中32位运行时
框。这将在每次运行包时完成
在幕后,向导生成的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位设置,它基本上是相同的单击路径,只是您首先需要单击“配置”选项卡,然后单击“高级”选项卡以选择32位运行时
作业步骤定义如下所示
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调用中,向导生成了/X86
调用,这是为SQL代理保留的特殊参数(检查开头的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
- C:\Program Files(x86)\Microsoft SQL Server\90\DTS\Binn\DTExec.exe
- C:\ProgramFiles(x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
- C:\ProgramFiles(x86)\Microsoft SQL Server\110\DTS\Binn\DTExec.exe
- C:\ProgramFiles(x86)\Microsoft SQL Server\120\DTS\Binn\DTExec.exe