我想知道SSIS如何处理大数据集的交易。我有一个大约150,000行的“大”数据集,每个行都需要根据业务规则进行验证,作为从登台数据库到实时数据库的ETL的一部分。
如果任何记录未通过其业务规则,则不应在实时数据库中记录任何记录(即回滚事务)。
我的问题是SSIS如何处理大型交易 - 或者可以吗?它是否会处理输入149,999条记录,如果最后一条记录未通过其无法处理规则,那么它会回滚全部吗?或者是否有更好的最佳实践来执行此类大型数据传输操作?
我目前的想法是在控制流级别处理序列容器中的每条记录,并在容器上启用transcation设置。所有验证都将在序列容器中完成,插入也将在此容器中完成。
答案 0 :(得分:2)
SSIS可以合理地处理交易。它倒下的地方是使用MSDTC对多个DB或服务器进行交易(仍然有效,但有一些警告)。
您可以将数据流任务上的TransactionOption设置为Required。这将迫使SSIS将其注册到交易中。同样,您可以将其他任务的TransactionOption设置为NotSupported(例如,如果失败,则更新状态表将失败)。
您无法实际处理序列容器中的每条记录(除非您多次循环数据流任务,这可能不是最好的方法)。相反,我将数据流放到所需的事务选项中,然后如果数据流中的任何记录失败并回滚整个事务,它应该使任务失败。
答案 1 :(得分:0)
我同意Dane,SSIS和SQL服务器应该没有任何问题,只要有适当的基础设施来支持这一点。