Estábamos teniendo problemas similares para operaciones de larga duración. La operación se inició (y también hizo su trabajo y terminó), pero la llamada nunca regresó. Eventualmente, pudimos rastrear esto hasta un firewall que cerró la conexión con el servidor de Oracle.
Podríamos evitar esto usando el parámetro SQLNET.EXPIRE_TIME en el servidor, que "haría ping" periódicamente a un cliente y, por lo tanto, evitaría que el firewall cierre el puerto. Tal vez esto también ayude en tu caso.