Měli jsme podobné problémy u dlouhodobých operací. Operace by byla zahájena (a také vykonala svou práci a skončila), ale hovor se nikdy nevrátil. Nakonec se nám to podařilo vysledovat až k firewallu uzavírajícímu spojení se serverem Oracle.
Tomu bychom mohli zabránit použitím parametru SQLNET.EXPIRE_TIME na serveru, který by periodicky „pingl“ klienta a bránil tak firewallu v uzavření portu. Možná to pomůže i ve vašem případě.