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

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

我有一个在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:

  • 已正确安装OLEDB提供程序
  • 两台计算机上都安装了相同版本的提供程序
  • OBDCAD32.exe显示了VFPOLEDB提供程序的相同版本。两台计算机上均未定义DSN。我的本地机器确实定义了DSN,所以我将尝试为dBASE文件添加一个DSN,看看这是否有帮助
  • 正在尝试这一步骤的过程中。我正在寻找一种不用创建SSIDB目录就可以使用dtexec工具的方法。尽管我确实删除了现有的SSIS目录,并停止了服务启动时执行的sp_SSIS_启动。我没有看到关于不安全程序集的日志条目,但作业仍然失败,错误与往常一样。我将在4号报告,并可能进一步寻求进一步指导
  • 更新#3:
    我刚刚检查过,测试和现场环境并不像我原来说的那样完全相同。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
    32位dtexec位置
    • 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
    进一步排除驱动程序故障 它在一台服务器上运行,不在另一台服务器上运行

    第1步-验证您是否安装了驱动程序。这很傻,很明显,但是有很多问题是人们错误地认为部署SSIS包/。ispac还将部署所有引用的程序集。这不是nuget,所以不,所有的先决条件都需要安装,并且安装正确(看到有人试图将程序集复制到GAC中,而不是使用该工具)

    第2步-验证驱动程序安装是否与服务器匹配。同样,这似乎很明显,但我经历了痛苦,通常是因为驱动程序版本4.0.2.013与4.0.2.014的点差异导致了不同的结果