ORA-12516 but max_utilization not reaching limit
I think select 1 from dual; is a syntax error. Here's what happens on the wire:

With select 1 from dual a connection's lifecycle is:


Initial establishment
First query (validation does not yet happen)
Return to the pool
Validation: the pool sends select 1 from dual
The database answers: ORA-01403: no data found
Next query


and so on. The connection is normally not closed.

With select 1 from dual; however, the following happens:


Initial establishment
First query
Return to the pool
Validation: the pool sends select 1 from dual;
The database answers: ORA-00911: invalid character
The pool terminates the connection with a normal FIN packet.


The next query then begins with a freshly established connection. Now, as long as the load stays low, you might not even notice this. But under high load, all this reconnecting must exhaust some database resource. Which one, i don't know...