我需要将3000个奇数行从一个SQL Server实例复制到另一个SQL Server实例。
目的地包含现场网站使用的现有数据。
使用SSIS中的数据流,插入了一个Transfer,它使用SQL View从源中获取数据,然后将其导入目标表。这可确保数据在我们的外部网站上保持最新。
我想要实现的是,如果由于某种原因SSIS失败,目标表不会留空,从而破坏我们外部网站的功能。
由于包中只使用了一个任务,SSIS会使这个原子化吗?即如果它在复制数据时失败,它将不会使目标表空或部分完成?
更新 感谢那些指出“替换”没有意义的人 - 这是我们之前使用复制对象功能的尝试。
目前使用Copy,它会输入3000行,但是下次运行时,它会再次输入相同的3000行!我需要做的是拥有以下
在SSIS中执行此操作的最佳方式是什么?
答案 0 :(得分:1)
听起来你正在寻找一个事务,如果一路上发生任何故障,它将回滚(撤销)。
全部或全无。
SSIS可以很好地处理交易。
This article描述了一种类似于你的情况,其中它通过删除一些行开始。
其中一个重要步骤是:
PackageOption属性存在于包中 水平,容器水平(例如For Loop, Foreach循环,序列等) 就像任何控制流任务一样 (例如,执行SQL任务,数据流 任务等)。 TransactionOption可以 设置为以下之一:
* Required - if a transaction exists join it else start a new one
* Supported - if a transaction exists join it (this is the default)
* NotSupported - do not join an existing transaction
答案 1 :(得分:0)
我有一个任务失败(例如pk违规),并且复制的行不会被回滚,我必须在重新启动任务之前删除它们。
你应该测试它。
我不知道'替换'是什么意思。
你正在替换现有的行吗?更新现有行?答案 2 :(得分:0)
考虑合并数据,而不是杀戮和填充策略。
此方法的优点是零停机时间和无缝集成。