1

这个问题以前曾以不同的方式提出过,但我找不到满意的答案。

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

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

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

我们的批处理脚本通常是 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 客户端在多少位下编译应该无关紧要吗?

感谢您阅读

卡斯滕

4

1 回答 1

0

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

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

对于相关的 T-SQL 示例,您始终可以使用SSMS 中执行包的脚本功能。

一篇很好的文章,包括一个代码示例来检查包内的环境类型。

于 2021-01-20T14:48:24.293 回答