Sql SSIS模式切换死锁
我有一个SSIS包,它接收过去1/2小时内更改的数据,并将其从DB2数据库传输到SQL server。该数据被加载到一个空的导入表(import.tablename)中,然后插入到一个临时表(newlive.tablename)中。然后,在事务中,将staging表与live(dbo)表进行模式切换。仅供参考,dbo表是可视化工具(Looker)的后端 我的问题是模式切换现在正在创建死锁。每次运行包时,它都会影响不同的表。我以前在较大的表中使用过这个过程(也是后端到Looker),以前没有遇到过这个问题 我在另一篇文章中读到,由于索引,用户遇到了类似的问题,但所有数据都已写入目标表 如果您有任何关于去哪里找的想法或建议,我们将不胜感激 代码位于SSIS包中的执行SQL任务中,包含:Sql SSIS模式切换死锁,sql,sql-server,ssis,Sql,Sql Server,Ssis,我有一个SSIS包,它接收过去1/2小时内更改的数据,并将其从DB2数据库传输到SQL server。该数据被加载到一个空的导入表(import.tablename)中,然后插入到一个临时表(newlive.tablename)中。然后,在事务中,将staging表与live(dbo)表进行模式切换。仅供参考,dbo表是可视化工具(Looker)的后端 我的问题是模式切换现在正在创建死锁。每次运行包时,它都会影响不同的表。我以前在较大的表中使用过这个过程(也是后端到Looker),以前没有遇到过
BEGIN TRAN
ALTER SCHEMA LAST_LIVE TRANSFER DBO.TABLENAME
ALTER SCHEMA DBO TRANSFER NEW_LIVE.TABLENAME
GRANT SELECT ON DBO.TABLENAME TO LOOKER_LOOKUP
COMMIT TRAN
@bilinkc I更新了主postMy假设中的模式切换代码,即死锁发生在第一条语句上—尝试将表从dbo切换到last_live会被Looker工具中的读卡器活动阻止。一种快速的测试方法是将DBO.TABLENAME上的
REVOKE SELECT添加到LOOKER\u查找中代码>在您的交易之前。这样,alter模式应该能够在执行切换所需的时刻在表上获得独占锁。看看分区切换是否会遇到同样的挑战可能会很有趣。可能会,但我不知道<代码>将TABLE dbo.TABLENAME切换为NEW_LIVE.TABLENAME代码>@bilinkc谢谢。我会尝试你的想法在撤销测试,但任何想法,为什么它发生在不同的表,而不是相同的。另外,这是在开发环境中运行的,没有其他用户,只有我自己,所以dbo会被访问是很奇怪的,因为我没有运行任何来自Looker工具的查询。哦,如果它是安静的,那么您需要查看死锁图,以找出还有哪些进程在表上阻止您获得独占锁。