【问题标题】:SQL Server SSIS Transaction HandlingSQL Server SSIS 事务处理
【发布时间】:2015-08-11 22:52:16
【问题描述】:

我的组织正在从 2000 年升级到 SQL Server 2008(耶!),但我不熟悉集成服务的交互。

我目前管理着非常大的数据库,这些数据库存储了每天 500000 到 1000000 笔交易的业务流程交易。过去我们对数据库的管理非常差,因此它们已经发展到无法维护的规模。我正在努力提供数据库的每日存档,以便工作数据库更易于管理。我编写了几个存储过程来进行归档并随后修剪工作数据库。但是,在涉足集成服务时,我发现我的 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 只有在所有输出都能够传输到存档时才会提交?
如果没有,我怎样才能实现故障安全条件?

【问题讨论】:

    标签: sql ssis sql-delete


    【解决方案1】:

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

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

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

    显然,稍微玩弄一下,在不同的步骤中强制出错以查看结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多