我有一个 SSIS 包,其中包含 Begin 和 Commit/Rollback 事务块中的 2 个主要块 1. truncate table(使用truncate table查询) 2.导入数据(从平面文件导入数据并插入到这些截断的表中)
当我运行包时,作业被挂起。活动监视器显示创建了一个 LCK_M_SCH_S 锁,该锁会阻止进一步执行。
有时这有效,有时则无效。 要补充的是,如果我单独截断这些表并运行删除截断块的包,它执行得很好。
还要补充一点,导入数据组件不只有一个。我们有大约 6 个导入数据组件用于 6 个不同的表。目前我在屏幕截图中只保留了一张
,
查看您的屏幕截图,我要验证的第一件事是 OLE DB 连接管理器上的属性 RetainSameConnection 设置为 true(右键单击 CM,选择属性,找到 RetainSameConnection)。默认值为 False。
如果问题得到解决,那么根本原因是您在不同的事务中有两个请求试图修改同一资源。
如果您已经将连接管理器的属性切换为 true,那么我的下一个猜测是您希望将数据流“导入数据”的 DelayValidation 属性设置为 True。
如果问题得到解决,则根本原因是组件试图验证目标表的元数据,但被 truncate 语句阻止(反之亦然)。设置 DelayValidation 将阻止包验证该特定任务,直到最后一秒 - 给其他进程时间让路。这似乎不太可能,但这是程序包阻塞自身的唯一机会。
对于仍然在“sys.sp_describe_first_result_set;1”引起的阻塞问题上发现这个有用的旧线程的人们。我通过将 ValidateExternalMetadata 设置为 False 来修复我的包