SELECT S1.SESS_ID AS BLOCKED_SESS_ID,S1.STATE AS BLOCKED_SESS_STAT,TW.WAIT_TIME,S1.SQL_TEXT AS BLOCKED_SQL_TEXT
,S2.SESS_ID AS WAITFOR_SESS_ID,S2.STATE AS WAITFOR_SESS_STAT,S2.SQL_TEXT AS WAITFOR_SQL_TEXT
FROM V$TRXWAIT TW
LEFTJOIN V$TRX T1 ON T1.ID = TW.ID
LEFTJOIN V$SESSIONS S1 ON S1.SESS_ID = T1.SESS_ID
LEFTJOIN V$TRX T2 ON T2.ID = TW.WAIT_FOR_ID
LEFTJOIN V$SESSIONS S2 ON S2.SESS_ID = T2.SESS_ID
如果目前还处于锁冲突的状态,你试着查下下面这句SQL,结果贴个图。
从结果里看看能否找到引发锁冲突的源头会话,并关注来源会话的状态。
如果锁源头会话处于IDLE状态,那看看是不是同时起了多个dts进程在传输同一个表中的数据,向目标表写入相同数据时因主键冲突引起锁等待。
如果并没有多个dts进程同时传输,那就可能是并发传输时有什么问题引起同一条记录的重复插入,进而引起锁冲突。不过按说8w记录,几秒钟也就传完了才对。
SELECT S1.SESS_ID AS BLOCKED_SESS_ID,S1.STATE AS BLOCKED_SESS_STAT,TW.WAIT_TIME,S1.SQL_TEXT AS BLOCKED_SQL_TEXT ,S2.SESS_ID AS WAITFOR_SESS_ID,S2.STATE AS WAITFOR_SESS_STAT,S2.SQL_TEXT AS WAITFOR_SQL_TEXT FROM V$TRXWAIT TW LEFT JOIN V$TRX T1 ON T1.ID = TW.ID LEFT JOIN V$SESSIONS S1 ON S1.SESS_ID = T1.SESS_ID LEFT JOIN V$TRX T2 ON T2.ID = TW.WAIT_FOR_ID LEFT JOIN V$SESSIONS S2 ON S2.SESS_ID = T2.SESS_ID