@Thiago Duarte Azadinho
No momento que estiver “travado” execute a query:
SELECT BLOCKER.INST_ID BLOCKER_INST_ID
,BLOCKER.SID BLOCKER_SID
,BLOCKER.USERNAME BLOCKER_USERNAME
,BLOCKER.CLIENT_INFO BLOCKER_CLIENT_INFO
,BLOCKER.OSUSER BLOCKER_OSUSER
,BLOCKER.PROGRAM BLOCKER_PROGRAM
,BLOCKER.MACHINE BLOCKER_MACHINE
,BLOCKED.INST_ID BLOCKED_INST_ID
,BLOCKED.SID BLOCKED_SID
,BLOCKED.USERNAME BLOCKED_USERNAME
,BLOCKED.CLIENT_INFO BLOCKED_CLIENT_INFO
,BLOCKED.OSUSER BLOCKED_OSUSER
,BLOCKED.PROGRAM BLOCKED_PROGRAM
,BLOCKED.MACHINE BLOCKED_MACHINE
,CASE
WHEN BLOCKED.LAST_CALL_ET = 60 THEN
BLOCKED.LAST_CALL_ET / 60 || ' (MINUTE)'
WHEN BLOCKED.LAST_CALL_ET >= 60 * 60 THEN
BLOCKED.LAST_CALL_ET / 60 / 60 || ' (HOUR)'
END BLOCKED_WAIT
,'ALTER SYSTEM KILL SESSION ''' || BLOCKER.SID || ',' || BLOCKER.SERIAL# || ',@' || BLOCKER.INST_ID || ''' IMMEDIATE;' KILL_SESSION
FROM GV$SESSION BLOCKED
INNER JOIN GV$SESSION BLOCKER ON BLOCKER.INST_ID = BLOCKED.BLOCKING_INSTANCE
AND BLOCKER.SID = BLOCKED.BLOCKING_SESSION
ORDER BY BLOCKER.INST_ID
,BLOCKER.SID
Se retornar alguma linha, pode ser que o seu UPDATE está esperando outra transação liberar o recurso.
Provavelmente é LOCK.
Outra coisa, operação em massa deve ser feito COMMIT aos poucos, se ficar tudo em uma operação, a grande chance de você provocar LOCK em outras transações.