使用dtexec运行SSIS包

时间:2012-10-26 14:36:02

标签: sql-server ssis export-to-excel

我正在使用dtexec运行SSIS包。我的系统上的BIDS运行正常。当我创建SQL Server代理程序作业以按计划运行包时。程序包运行步骤被安排为T-SQL任务,而不是SSIS程序包)。作业报告没有错误,但它甚至没有在服务器上创建输出excel文件@我想要的目的地。

此外,当我在命令shell中单独运行命令时,它会返回下面显示的错误。间歇性地,它还会返回我用来复制文件的FileSystem Task上的错误,说源或目标不存在!!当相同的变量值在BIDS中适用于我时,为什么SQL作业失败?

Started:  7:33:27 PM
Error: 2012-10-26 19:33:27.60
   Code: 0xC0016016
   Source:
   Description: Failed to decrypt protected XML node "DTS:Password" with error 0
x8009000B "Key not valid for use in specified state.". You may not be authorized
to access this information. This error occurs when there is a cryptographic err
or. Verify that the correct key is available.
End Error
Error: 2012-10-26 19:33:27.78
   Code: 0xC00F9304
   Source: GICSReport Connection manager "Excel Connection Manager"
   Description: SSIS Error Code DTS_E_OLEDB_EXCEL_NOT_SUPPORTED: The Excel Conne
ction Manager is not supported in the 64-bit version of SSIS, as no OLE DB provi
der is available.
End Error
Error: 2012-10-26 19:33:27.78
   Code: 0xC020801C
   Source: Data Flow Task Excel Destination [22]
   Description: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAG
ER.  The AcquireConnection method call to the connection manager "Excel Connecti
on Manager" failed with error code 0xC00F9304.  There may be error messages post
ed before this with more information on why the AcquireConnection method call fa
iled.
End Error
Error: 2012-10-26 19:33:27.78
   Code: 0xC0047017
   Source: Data Flow Task SSIS.Pipeline
   Description: component "Excel Destination" (22) failed validation and returne
d error code 0xC020801C.
End Error
Error: 2012-10-26 19:33:27.78
   Code: 0xC004700C
   Source: Data Flow Task SSIS.Pipeline
   Description: One or more component failed validation.
End Error
Error: 2012-10-26 19:33:27.79
   Code: 0xC0024107
   Source: Data Flow Task
   Description: There were errors during task validation.
End Error
DTExec: The package execution returned DTSER_FAILURE (1).
Started:  7:33:27 PM
Finished: 7:33:27 PM
Elapsed:  0.343 seconds

请帮忙! :) ....我应该将所有变量,连接管理器和所有内容添加到我的配置文件中吗?目前我只添加了变量和连接管理器的一些ppty值,但没有一个组合似乎有效。

2 个答案:

答案 0 :(得分:11)

我要解决的第一个错误是“64位版本的SSIS不支持Excel连接管理器,因为没有可用的OLE DB提供程序。”

开箱即用的Excel驱动程序仅存在于32位地址空间中。 BIDS / SSDT是一个32位应用程序,因此Excel源和目标工作正常。但是,当您从命令行/ SQL代理运行它们时,您需要显式使用32位版本的DTEXEC程序。

步骤1,将确保您可以从代理程序在其上执行的服务器上的命令行运行该程序包。假设您的SQL Server安装在惯用位置,您可能已经拥有以下DTEXEC.exe之一

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:\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

您将需要使用(x86)版本。未来的读者,如果您碰巧使用32版本的Windows(可能是Windows 2003),前3个将是您可用的唯一选项。正如Vivek的错误消息所示,他正在以64位模式执行SSIS包。

dtexec提供命令行开关 / X86 ,允许您为32位和64位操作无缝使用相同的可执行文件。 LIES!文档确实会调用,但谁会阅读文档?

  

此选项仅供SQL Server代理使用。该选项被忽略   如果在命令提示符下运行dtexec实用程序。

因此,您需要通过提供显式路径来运行您的包

C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe /file C:\folder\GICSReport.dtsx

我在输出中看到“无法解密受保护的XML节点”,并且您还声明您正在使用配置文件,因此您很可能将PackageProtectionLevel从默认的EncryptSensitiveWithUserKey更改为DontSaveSensitive。该功能的存在是为了防止敏感数据(密码)的意外泄露,但由于您已经使用配置文件处理,因此这不应成为问题。 ...这可能实际上是我想到的其他一个包保护级别的错误。

无论如何,首先尝试从32位可执行文件运行。如果这不起作用,请尝试按指示更改包保护级别。如果其中任何一个使程序包按预期运行,则尝试从SQL代理运行相同的命令。

如果一切正常,请将此标记为答案。如果没有,请更新票证并显示当前错误,我们会要求您提供更多信息。

答案 1 :(得分:0)

如果您尝试从包含excel导入的transact SQL运行带有dtexec的SSIS包,则可以使用以下解决方案。

  1. 创建包含以下代码的批处理文件。

    cd C:\ Program Files(x86)\ Microsoft SQL Server \ 100 \ DTS \ Binn \ DTEXEC.exe / DE"密码" / F" C:\ mySSISfolder \ package.dtsx"

  2. 创建指向批处理文件的快捷方式,在快捷方式上设置properties\advanced以管理员身份运行。

  3. 从您的transact sql过程
  4. 运行以下命令

    exec xp_cmdshell' C:\ myfolder \ runssis_sc.lnk'