关于deadlock有关问题求解(ETL相关)

关于deadlock问题求解(ETL相关)
现有表TAB,其中字段 A(年月),B(行政区划),C(rownum),D
表数据量很大,一个月大约数据为1000W左右,所以考虑分并发处理
即把每月,单行政区划(B)按数据量大小分成若干个子任务进行,
并发的分离由C决定,即用C的行号来确定其属于某个子任务,处理即更行D字段
在更新之前先把D按子任务UPDATE为空,此处报死锁,已确定rownum分并发并无重复,
且死锁为多行政区划互相产生,bitmap索引已重建为普通索引,仍无法解决
怀疑为资源不足导致次问题

发生死锁SQL如下
SQL code
UPDATE TAB@DB   set D= '' WHERE A= 201108   AND B= TO_CHAR(510107)   AND C>= 1 AND C<= 131072


错误报告如下:
ORA-00060: deadlock detected while waiting for resource
ORA-02063: preceding line from DB ORA-06512: at "PKG_ETL", line 2409

ORA-02049: timeout: distributed transaction waiting for lock
ORA-02063: preceding line from DB ORA-06512: at "PKG_ETL", line 2409

2409行即EXCUTE该SQL,求各位大神帮忙分析下,非常感谢

------解决方案--------------------
死锁是由于两个SESSION之间互相等待锁资源而产生的,你需要查看下死锁生成的trace文件,看两个SESSION分别执行了哪些SQL引起错误,然后看这些SQL更改的数据是否重合。
------解决方案--------------------
同求大神解决!!!!!
------解决方案--------------------
检查DBLINK远端数据库是否有SESSION在锁表:
select OBJECT_ID from dba_objects where object_name='TAB');
SELECT * FROM DBA_BLOCKERS;
确认没有bitmap索引。
确认并发进程更改的数据没有重合。
单个进程执行是否正常?