My suggestion would be to look at using Oracle 11g DRCP connection pooling. This should allow better resource sharing. Also, when there are too many connections, it blocks until one can be established.
If you can't use pooling, then do what you need to do to allow more connections: reduce the number of Apache processes, add memory to the DB server machine, increase the DB limit on 'processes' (see the "Configuring the Database For Testing" section in the testing chapter of The Underground PHP and Oracle Manual), etc.
I have a gut feeling that you are not even using persistent connections.
Regarding error management, you will still need to be able to handle unexpected errors.