W przypadku długotrwałych operacji mieliśmy podobne problemy. Operacja miała się rozpocząć (a także wykonać swoją pracę i zakończyć), ale połączenie nigdy nie wróciło. W końcu udało nam się to wyśledzić aż do zapory zamykającej połączenie z serwerem Oracle.
Moglibyśmy temu zapobiec, używając parametru SQLNET.EXPIRE_TIME na serwerze, który okresowo "pingował" klienta, a tym samym uniemożliwiał zaporze zamknięcie portu. Może to pomoże również w Twoim przypadku.