2011-08-26 91 views
0

我的组织从2000(yay!)升级到SQL Server 2008,我不熟悉Integration Services的交互操作。SQL Server SSIS事务处理

我目前管理非常大型的数据库,每天存储500000到1000000次交易的业务流程事务。过去我们对数据库的管理非常差,因此他们的规模变得难以维系。我正在努力提供数据库的日常归档,以便工作数据库更易于管理。我编写了几个存储过程来执行归档,然后修剪正在运行的数据库。但是,在涉及Integration Services的过程中,我发现我的SP目前所从事的工作具有很好的内置功能。

我创建的是执行导出/导入的几个SSIS包。由于我只对某些数据有兴趣,我用一个自定义查询的是形式的包:

DELETE TransactionTable 
OUTPUT 
DELETED.* 
WHERE (EventTimestamp >= 
DATEADD(D, 0, DATEDIFF(D, 0, (SELECT MIN(EventTimestamp) FROM TransactionTable))) 
) 
AND (EventTimestamp < 
DATEADD(HH, 0, (DATEADD(YY, -1, DATEDIFF(D, 1, GETDATE())))) 
); 

这个查询抓住我感兴趣的数据,并从工作表中删除它。使用SSIS,此查询会生成放置在归档表中的输出。

我的问题(S)是:
因为我想记录导入到我的档案,并从同一SSIS包内的工作数据库中删除这些记录,以确保一致性,该查询似乎是这样做的方式。但是,我担心交易的结构。我将从我的工作数据库中删除记录作为要插入到我的归档数据库中的输出。
SQL Server在这种情况下如何处理错误?
运行此包是否安全?
如果语句生成的输出无效并发生错误,会发生什么情况?
该语句是否回滚?
如果所有输出都可以传输到存档,那么DELETE是否会被提交?
如果不是,我怎么能够达到故障安全状态?

回答

1

好消息是,如果发生任何故障,您可以设置SSIS包以回滚一组任务。

有一个TransactionOption属性可用于几乎每个容器/任务,包括包本身。您可以将其设置为Required,SupportedNotSupported

可以在每个选项的细节在这里:http://msdn.microsoft.com/en-us/library/ms137690.aspx

显然玩弄这一点,迫使不同的步骤错误,看到的结果是什么。