回滚事务支持

时间:2017-12-13 14:12:57

标签: sql-server ssis etl ssis-2012 ssis-2008

早些时候我们在SSSIS 2008中,我们在一个解决方案下有3个项目,项目A,项目B,项目C.我在项目B中有一个主程序包我从中调用ProjectA和ProjectC中的程序包执行包任务参考文件系统,一切都运行良好,直到这里。我们最近从SSIS 2008迁移到SSIS 2012并使用Project部署模型使用包部署模型将包部署到SSISDB而不是文件系统,因此我在主包中用Execute SQL任务替换了Execute Package任务来调用项目A和C中的包

我创建了连接到SSISDB并在执行SQL任务中使用它并将下面的T-SQL代码放在其中,它在这里工作得很好。

Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution]
@package_name=N'Child_Package.dtsx',
@execution_id=@execution_id OUTPUT,
@folder_name=N'Test',
@project_name=N'ProjectA',
@use32bitruntime=False, @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

我在这里有2个问题

1)如果我将我的软件包从开发部署到生产服务器,那么执行SQL任务中的这个T-SQL代码是否会在那里工作而没有任何问题(我在一篇文章中读到,当部署到差异环境时它会有一些问题)我我没有对我的T-SQL代码中的任何环境参数值进行硬编码,这是否也适用于其他环境?

2)我正在尝试在我的主包中实现回滚事务支持,因此如果任何子包失败,所有内容都需要回滚,所以我将包TransactionOption属性更改为required和所有其他任务(执行SQL TASK) )支持(默认),我最终得到像

这样的错误

" [执行SQL任务]错误:执行查询"声明@execution_id bigint EXEC [SSISDB]。[catalo ..."失败并出现以下错误:"无法在分布式事务中使用SAVE TRANSACTION。"。可能的失败原因:查询问题," ResultSet"属性设置不正确,参数设置不正确或连接未正确建立"

如果支持包的TransactionOption属性,则包正常工作,只有当我将package的TransactionOption属性用作Required时才会出现问题。

非常感谢任何帮助。

0 个答案:

没有答案