【发布时间】:2019-11-25 13:02:10
【问题描述】:
我正在尝试使用 SSIS 将数据上传到 MSSQL 2016。
流程是:
如果出现任何故障,我想做的是回滚所有数据。首先我尝试使用TransactionOption=Required,但这会锁定目标表,直到 SSIS 序列完成。然后我尝试使用 SQL 任务来创建 BEGIN、ROLLBACK 和 COMMIT 事务,因为我读到这是某些人的首选,它不会锁定表。但是,我的桌子仍然被锁定。在序列完成之前,我无法从相关表中选择数据。
Transactions:
BEGIN TRANSACTION T1;
ROLLBACK TRANSACTION T1;
COMMIT TRANSACTION T1
我正在尝试做的事情是否可能?如果可以,最好的方法是什么?
【问题讨论】:
-
如果您更改/插入超过 5000 行,您可能会遇到“锁定升级”问题,然后 SQL 将锁定整个表。
-
我以前从未见过手工制作的事务逻辑。使用 SSIS 内置的东西。我经常看到的是先使用 SSIS 将数据批量加载到保存表中,然后调用存储过程将新数据处理到目标位置。
-
在数据流任务中,目标组件是否勾选了 tabblock 选项?这是 OLEDB 目标的默认设置。
-
@MarkWojciechowicz 不,唯一选中的选项是“检查约束”
-
@TDP 问题是我正在删除数据并通过多个任务插入数据,因此如果序列容器内的任何任务失败,我希望回滚所有 3 个任务
标签: sql-server ssis sql-server-2016 ssis-2012