对于在RAC 12c上用ROWNUM锁定的更新跳过

时间:2018-08-31 19:31:48

标签: sql multithreading oracle

我搜索了所有论坛,但没有找到任何线索。 我有一个多线程消耗的临时表。 为了避免死锁,我使用了类似这样的方法:

SELECT ID_MESSAGE
FROM TB_STAGE_IN S 
WHERE S.CD_STATUS = 0 
AND S.ID_JOB_SCHEDULE IS NULL 
AND ROWNUM <= 10000 
FOR UPDATE SKIP LOCKED; 

它工作正常,但是线程不能达到10,000行的最大值。 就像:

  • 线程1:5000
  • 线程2:3000
  • 线程2:2000

我知道发生这种情况是因为它们的行号相同,但是表有成千上万的行。我真正需要的是线程在每一步都获得10,000行解锁。

我尝试仅使用FETCH FIRST 10000 ROWS,但收到以下消息: ORA-02014:无法从具有DISTINCT,GROUP BY等的视图中选择FOR UPDATE。

请大家帮我吗?

谢谢你的好意。

1 个答案:

答案 0 :(得分:0)

问汤姆(Tom)有一个suggestion,像这样

N