繁体   English   中英

SQL Server SSIS事务处理

[英]SQL Server SSIS Transaction Handling

我的组织正在从2000升级到SQL Server 2008(是!),但我不熟悉Integration Services的交互作用。

我目前管理非常大的数据库,这些数据库每天存储的业务流程交易量为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,此查询将产生输出,该输出将放置在存档表中。

我的问题是:
由于我想将记录导入到存档中,并从同一SSIS包中的工作数据库中删除这些记录以确保一致性,因此此查询似乎是实现此目的的方法。 但是,我担心交易的结构。 我正在从工作数据库中删除记录,作为要插入到存档数据库中的输出。
在这种情况下,SQL Server如何处理错误?
运行此程序包安全吗?
如果该语句生成的输出无效并且发生错误,该怎么办?
语句会回滚吗?
仅当所有输出都可以传输到归档时,才提交DELETE吗?
如果没有,我如何能够达到故障安全条件?

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

在几乎每个容器/任务(包括包本身)上都有一个TransactionOption属性。 您可以将其设置为RequiredSupportedNotSupported

您可以在此处详细了解每个选项: http : //msdn.microsoft.com/zh-cn/library/ms137690.aspx

显然,您需要进行一些操作,在不同的步骤上强制执行错误,以查看结果是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM