SSIS 包中 ReadUncommitted 隔离级别的解决方法

Posted

技术标签:

【中文标题】SSIS 包中 ReadUncommitted 隔离级别的解决方法【英文标题】:Workarounds for ReadUncommitted Isolation level in an SSIS package 【发布时间】:2012-04-24 12:57:29 【问题描述】:

SSIS 中的 ReadUncommitted IsolationLevel 是 Microsoft 承认的以下错误,但“不会修复”,如下所述。

http://connect.microsoft.com/SQLServer/feedback/details/498891/ssis-setting-isolationlevel-to-readuncommitted-still-uses-read-committed#details

相同的解决方法是什么?

【问题讨论】:

【参考方案1】:

是的,但是你必须在你的源上通知sql命令,而不是在执行之前选择一个表并设置隔离级别:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
select * from test_isolation

并且包应该选择了可序列化的隔离级别(我认为这个错误可能是在组件上选择了未提交的读取)

请参阅此示例。我有一个包可以将值从表 test_isolation 复制到表 test_isolation_destination

我的两张桌子都是空的:

然后我开始了一个事务并运行下面的插入命令在test_isolation上插入一行

此行是脏行,因为事务尚未提交。

然后,我运行包,你可以看到复制了一行:

然后,我回滚了事务,如您所见,该行已从源表中清除,但未从目标表中清除。

这证明包以读取未提交的隔离级别运行

【讨论】:

【参考方案2】:

使用 SQL Server Native Client Provider(如果您的目标平台是 MS-SQL)并设置隔离级别以查看它是否有效?

【讨论】:

以上是关于SSIS 包中 ReadUncommitted 隔离级别的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将数据编写为 SSIS 包中的 Insert 语句?

如何在 SSIS 包中使用 COM 引用?

在 SSIS .dtsx 包中查找表名

在 SSIS 包中使用临时表

如何在 SSIS 包中使用变量和 SQL 代码?

为啥在 SSIS 包中连接到 DB2 时出现错误 58031?