使用存储过程部署和执行 SSIS 包
在您配置一个 Integration Services 项目以便使用项目部署模型时,可以使用 SSIS 目录中的存储过程部署该项目并且执行包。 有关项目部署模型的信息,请参阅项目和包的部署。
您还可以使用 SQL Server Management Studio 或 SQL Server Data Tools (SSDT) 部署项目和执行包。 有关详细信息,请参阅“另请参见”部分中的主题。
提示 |
---|
您可以通过执行以下操作为下面的过程中列出的存储过程轻松地生成 Transact-SQL 语句,但 catalog.deploy_project 除外:
|
使用存储过程部署和执行包
调用 catalog.deploy_project(SSISDB 数据库) 以便将包含该包的 Integration Services 项目部署到 Integration Services 服务器。
若要检索 Integration Services 项目部署文件的二进制内容,对于 @project\_stream 参数,请将 SELECT 语句与 OPENROWSET 函数和 BULK 行集提供程序一起使用。 通过 BULK 行集提供程序,您可以从文件读取数据。 BULK 行集提供程序的 SINGLE_BLOB 参数将该数据文件的内容以 varbinary(max) 类型的单行、单列行集的形式返回。 有关详细信息,请参阅 OPENROWSET (Transact-SQL)。
在下面的示例中,SSISPackages_ProjectDeployment 项目将部署到 Integration Services 服务器上的“SSIS 包”文件夹。 二进制数据从项目文件 (SSISPackage_ProjectDeployment.ispac) 读取并且存储于 varbinary(max) 类型的 @ProjectBinary 参数中。 @ProjectBinary 参数值将赋予 @project\_stream 参数。
DECLARE @ProjectBinary as varbinary(max) DECLARE @operation_id as bigint Set @ProjectBinary = (SELECT * FROM OPENROWSET(BULK 'C:\MyProjects\ SSISPackage_ProjectDeployment.ispac', SINGLE_BLOB) as BinaryData) Exec catalog.deploy_project @folder_name = 'SSIS Packages', @project_name = 'DeployViaStoredProc_SSIS', @Project_Stream = @ProjectBinary, @operation_id = @operation_id out
调用 catalog.create_execution(SSISDB 数据库) 以便创建包执行的一个实例,并且可以选择调用 catalog.set_execution_parameter_value(SSISDB 数据库) 以便设置运行时参数值。
在下面的示例中,catalog.create_execution 为在 SSISPackage_ProjectDeployment 项目中包含的 package.dtsx 创建一个执行实例。 该项目位于“SSIS 包”文件夹中。 存储过程返回的 execution_id 用于对 catalog.set_execution_parameter_value 的调用中。 此第二个存储过程将 LOGGING_LEVEL 参数设置为 3(详细日志记录),并且将名为 Parameter1 的包参数设置为值 1。
对于 LOGGING_LEVEL 之类的参数,object_type 值为 50。 对于包参数,object_type 值为 30。
Declare @execution_id bigint EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'SSIS Packages', @project_name=N'SSISPackage_ProjectDeployment', @use32bitruntime=False, @reference_id=1 Select @execution_id DECLARE @var0 smallint = 3 EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0 DECLARE @var1 int = 1 EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=30, @parameter_name=N'Parameter1', @parameter_value=@var1 GO
调用 catalog.start_execution(SSISDB 数据库) 以便执行该包。
在下面的示例中,将对 catalog.start_execution 的调用添加到 Transact-SQL 以便开始包执行。 将使用 catalog.create_execution 存储过程返回的 execution_id。
Declare @execution_id bigint EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'SSIS Packages', @project_name=N'SSISPackage_ProjectDeployment', @use32bitruntime=False, @reference_id=1 Select @execution_id DECLARE @var0 smallint = 3 EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0 DECLARE @var1 int = 1 EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=30, @parameter_name=N'Parameter1', @parameter_value=@var1 EXEC [SSISDB].[catalog].[start_execution] @execution_id GO
使用存储过程将项目从一个服务器部署到另一个服务器
可以通过使用 catalog.get_project(SSISDB 数据库) 和 catalog.deploy_project(SSISDB 数据库) 存储过程将项目从一个服务器部署到另一个服务器。
在运行存储过程之前,您需要执行以下操作。
创建一个链接服务器对象。 有关详细信息,请参阅创建链接服务器(SQL Server 数据库引擎)。
在**“链接服务器属性”的“服务器选项”页上,将 RPC 和 RPC Out 设置为 True。 此外,将“为 RPC 启用针对分布式事务的升级”**设置为 False。
通过在对象资源管理器中展开**“链接服务器”下的“访问接口”节点,右键单击该访问接口,然后单击“属性”,对于您为链接服务器选择的访问接口启用动态参数。 选择“动态参数”旁边的“启用”**。
确认分布式事务处理协调器 (DTC) 在两个服务器上均启动。
调用 catalog.get_project 以便返回该项目的二进制文件,然后调用 catalog.deploy_project。 将 catalog.get_project 返回的值插入 varbinary(max) 类型的表变量中。 链接服务器无法返回类型为 varbinary(max) 的结果。
在下面的示例中,catalog.get_project 为链接服务器上的 SSISPackages 项目返回二进制文件。 catalog.deploy_project 将该项目部署到本地服务器上名为 DestFolder 的文件夹中。
declare @resultsTableVar table (
project_binary varbinary(max)
)
INSERT @resultsTableVar (project_binary)
EXECUTE [MyLinkedServer].[SSISDB].[catalog].[get_project] 'Packages', 'SSISPackages'
declare @project_binary varbinary(max)
select @project_binary = project_binary from @resultsTableVar
exec [SSISDB].[CATALOG].[deploy_project] 'DestFolder', 'SSISPackages', @project_binary