Oracle idle connections lost
Add the option ENABLE=BROKEN into tnsnames.ora. This will enforce sending TCP Keepalive packets over TCP connection. These keepalives are not sent by Oracle client but by OS Kernel directly.

Then you must configure your TCP stack. Set TCP sending interval to value lower than 20 minutes.

Most probably you have a FW on the path and this FW drops tracking information for every in-active TCP connection.