Ada*_*m H 9 ssis oledbconnection visual-foxpro sql-server-2012 ssis-2012
我有一个我在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目录一无所知,那么有人能够建议我可以进入的任何方向吗?
更新:这是我的工作步骤配置.设置32位运行时标志.

更新#2:
更新#3:
我刚刚检查过,测试和现场环境与我原先说的不一样.实时服务器没有32位版本的dtexec.exe(虽然我认为这不重要,因为TechNet说使用SQL Server代理运行的作业将始终使用64位版本.我想我使用了x86和i64 ISO来设置测试环境,但只有64位版本才能实现.改变这一点需要,我想,从实时框中卸载Integration Services共享组件并使用双iso重新安装它.
我想设置"使用32位运行时"选项只有在使用32位版本时才有效吗?这可能解释了一些事情
bil*_*nkc 13
默认情况下,服务器上的所有内容都将以64位运行.要更改此行为,您需要指明应使用32位版本的dtexec.对于2012 SSISDB,我们有两种简单的方法来调用我们的包:SQL Agent和catalog.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
Run Code Online (Sandbox Code Playgroud)
如您所见,该@use32bitruntime参数的值为True,表示它应该在32位空间运行.
对于重复的包运行,我们通常使用调度工具.要获取代理程序包中的32位设置,它基本上是相同的单击路径,除非您首先需要单击"配置"选项卡,然后单击"高级"选项卡以选择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
Run Code Online (Sandbox Code Playgroud)
您将看到在@command调用中,向导生成/X86调用,该调用是为SQL代理保留的特殊参数(在开头检查BOL链接),以指示是否应使用32位或64位版本的dtexec.命令行调用将要求我们明确使用正确的dtexec.默认情况下,64位dtexec将首先列在PATH环境中
它在一台服务器上运行,而在另一台服务器上运行
第1步 - 验证您已安装驱动程序.愚蠢,显而易见,但有很多问题,人们错误地认为部署SSIS包/ .ispac也会部署所有引用的程序集.这不是nuget所以不,所有先决条件都需要安装和正确安装(看到人们尝试将程序集复制到GAC而不是使用工具)
第2步 - 验证驱动程序安装是否与服务器匹配.再次,似乎很明显,但我经历过痛苦,一般VS_NEEDSNEWMETADATA,在驱动程序版本4.0.2.013上的点差产生了不同于4.0.2.014的结果
步骤3 - 确保您定义的任何DSN都在正确的空间中定义.由于种种原因,这个人咬人.我认为直到Server 2012,你才能获得32位版本的odbcad32.exe(与管理工具相关的可执行文件 - >数据源(ODBC))是通过在文件系统上找到它.令人困惑的是,可执行文件名为odbcad32.exe,无论它是在System32还是SysWOW64中,这两个文件夹分别用于64位驱动程序和32位驱动程序.是的,未来的读者,这不是一个错字.64版本的应用程序在System32中,32位版本在SysWOW64中.这是一项旨在尽量减少影响的设计决策.
在测试和实时服务器上,运行C:\Windows\SysWOW64\odbcad32.exe查找您的FoxPro驱动程序和相关的DSN,它们是否符合预期?
第4步 - 奇怪的权限检查.以"普通"帐户登录到两台服务器,然后从命令行运行该程序包.重复此步骤,但使用代理执行它,使用您可能已定义或未定义的任何代理.如果第一个工作但后者失败,则通常表示权限问题.可能是SQL Server或代理帐户无法访问驱动程序安装到的任何文件夹.可能是所述帐户需要InteractWithDesktop权限或其他被拒绝或未明确授予的权限.
| 归档时间: |
|
| 查看次数: |
13418 次 |
| 最近记录: |