【问题标题】:SSIS' DtExec 32bit vs 64bit ConfusionSSIS 的 DtExec 32 位与 64 位混淆
【发布时间】:2021-01-20 13:20:15
【问题描述】:

这个问题以前被问过不同的风格,但我找不到满意的答案。

我们是一家基于 MS 的商店,我们拥有大量 SQL 2016 数据库。我们还经常使用 SSIS 2016,在我所在的地区,我们专门使用目录 (SSISDB) 部署模型。

我们的许多 SSIS ETL 不仅仅是简单的加载或提取。它们是每晚批次的一部分。它们在调度程序上运行。一个典型的批次可能是这样的

  • 运行 SSIS 项目 A
  • 提取A制作的一些文件
  • ftp 到某个地方并存档原件
  • 挑选一些其他文件并将它们放在某个地方
  • 然后运行 ​​SSIS 项目 B 处理上述内容

我们的批处理脚本通常是 python,我们使用 DtExec 来运行 ETls。 python 脚本所在的调度程序机器与 SSISDB 或 SSIS 机器绝不是同一台机器。我们使用 DtExec 调用远程数据库服务器并调用 ETL。

调度程序机器本身不是数据库服务器,没有安装 SQL 2016,只安装了 SSMS 2016,它为我们提供了 32 位 DtExec。

但现在看来我也需要 64 位 DtExec,而且似乎只有在调度程序框上安装集成服务才能得到它。

这是一个问题,因为许可,而且我不希望另一个 SSIS 服务实例在那里运行。无论如何,它不会用于任何事情。我只想要 DtExec 之类的 64 位客户端工具。

问题基本上是如何将 64 位 DtExec 安装到不是 SQL Server 甚至不是集成服务服务器的机器上。如何在简单的客户端机器上获得 64 位 DtExec?

编辑: 另一方面,我真的需要 64 位 DtExec 才能在 64 位服务器上以 64 位模式运行 SSIS 吗?当然那是一个远程调用,而 DtExec 客户端在多少位下编译应该无关紧要?

感谢您的阅读

卡斯滕

【问题讨论】:

  • 我在 SSIS 包中使用脚本任务(C# 代码)时发现了一些问题。我相信我在脚本任务中将脚本任务设置为 64 位执行。如果你有这个,你可能想检查一下。

标签: ssis dtexec


【解决方案1】:

根据MS Docs on DTExec,可能会导致要在64位模式下运行包,您需要64位版本的DtExec。
但是,这不是从 SSISDB 运行 SSIS 包的唯一方法。您还可以使用 T-SQL 命令开始执行包(请参阅catalog.start_executionT-SQL commands)。这种方式根本不需要DtExec,你可以选择@use32bitruntimecatalog.create_execution的32位或64位环境。
一些代码示例

EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Child1.dtsx', 
@execution_id=@execution_id OUTPUT, 
@folder_name=N'TestDeply4', 
@project_name=N'Integration Services Project1', 
@use32bitruntime=False, 
@reference_id=Null  
Select @execution_id  

DECLARE @var0 sql_variant = N'Child1.dtsx'  
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, 
@object_type=20, 
@parameter_name=N'Parameter1', 
@parameter_value=@var0  

DECLARE @var1 sql_variant = N'Child2.dtsx'  
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, 
@object_type=20, 
@parameter_name=N'Parameter2', 
@parameter_value=@var1  

DECLARE @var2 smallint = 1  
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, 
@object_type=50, 
@parameter_name=N'LOGGING_LEVEL', 
@parameter_value=@var2  

EXEC [SSISDB].[catalog].[start_execution] @execution_id  
GO

您可以随时使用 SSMS 中 Execute PackageScript 功能来获取相关的 T-SQL 示例。

good article 对此有一个代码示例,用于检查包内的环境类型。

【讨论】:

  • 如果我使用 (x86) DtExec 运行包,它将以 32 位运行(并且失败,这就是我们注意到的)。如果我从 SSMS 运行,那么它将以 64 位运行。我只是仔细检查了一遍。我不能说如果我使用 (x64) DtExec 会发生什么,因为我无法在不安装 SSIS 服务的情况下从任何地方获取它。但“互联网”表示它将以 64 位模式运行 ETL。仍然没有更明智的...
  • @CalleWirsch,完全修改了答案。您必须使用 T-SQL 命令来控制运行时环境。 DtExec 隐式调用其位环境,因此 32 位 DtExec 无法以 64 位模式启动包。
  • 非常感谢。您已经为此花费了一些时间,我非常感谢您的帮助。链接也不错。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2015-03-22
  • 2014-10-20
  • 1970-01-01
  • 2013-01-11
  • 2013-06-21
  • 1970-01-01
  • 2011-05-22
  • 2014-01-04
相关资源
最近更新 更多