我在Visual Studio 2013中使用SQL Server 2014和SSIS。 我需要在一个OLTP数据库(这里是我的目标数据库)中使用我的一个SSIS包在一些表中进行一些更改,有时需要花费大量时间来执行,并且在此期间它会锁定OLTP数据库中的一些表我不能再使用与OLTP数据库兼容的may应用程序了。
在我的包装运行一天之前,它是在午夜,但现在我们决定每隔30分钟运行一次这个包裹。
我需要在OLTP数据库中使用快照隔离级别,以确保SSIS包不会长时间锁定表。
首先,我想使用IsolationLevel等于快照,但它不起作用。
然后我发现我应该在ControlFlow中手动处理Isolation leve以使用隔离快照。
我创建了一个示例,因为我真正的SSIS包非常庞大。
我创建了一个数据库然后,我已将Allow snapshot isolation设置为true。
之后我创建了一个SSIS包,其中包含以下变量:
然后我创建了一个像这样的控制流:
在第一个SQL执行任务中,我运行了这个命令:
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
然后在第二个SQL执行任务中,我启动了一个事务:
BEGIN TRANSACTION
然后我添加了一个Dataflow任务。在我的DataFlow任务中有两个OLE DB。一个是源,另一个是目的地。
源和目标都位于同一服务器和不同的数据库中。
然后我改变了Connection Manager的属性,如下所示:
然后我在我的电脑上安装并配置了MSDTC。 (Source和Destination都在同一台服务器上,而ssis包在同一台服务器上运行)。
然后我按照这样配置我的服务:
然后在我的防火墙中,我可以像这样访问MSDTC:
然后我配置了防火墙的高级配置:
我的SSIS包中的所有任务都具有IsolationLevel和TransactionOption的这些配置:
我的控制流程具有以下配置:
当我运行包时,我在OLE DB目的地中收到此错误。
[OLE DB Destination [2]] Error: SSIS Error Code
DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.
The AcquireConnection method call to the connection manager
".<ServerName>.<DatabaseName>" failed with error code 0xC001A004.
There may be error messages posted before
this with more information on why the AcquireConnection method call failed.
[SSIS.Pipeline] Error:
OLE DB Destination failed validation and returned error code 0xC020801C.
如果能够将事务和隔离级别手动设置为SSIS包中的快照,我该怎么办?