在瞬间截断并插入同一个表

时间:2016-05-27 07:43:44

标签: sql db2 locking deadlock

我们使用DB2数据库。一些数据仓库表是TRUNCATEd并且每天都重新加载。当另一个进程针对同一个表运行INSERT语句时,我们遇到死锁问题。

方案

TRUNCATE在表上执行。 同时另一个进程在同一个表中插入一些数据。(该进程基于一个触发器,可以随时启动)

有工作吗? 到目前为止我们所想的是优先考虑截断,然后使用插入来进行thruogh。有没有办法补充这个。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在执行截断之前,您应该请求表锁。

如果这样做,你就无法获得死锁 - 在插入完成之前不会授予表锁定,一旦你有锁定,就不会发生另一次插入。

评论更新:

您可以使用 LOCK TABLE 命令。细节取决于您的情况,但您应该能够逃脱共享模式。这将允许读取但不允许插入(这是您相信的问题。)

这可能无法解决您的问题。这可能意味着你的insert语句很复杂 - 也许它是从一堆其他表或联合表中读取。如果是这种情况,请重新构建您的解决方案以包括一个临时表(首先插入到临时表中......慢慢地......然后从登台表插入到目标表中)。