Cursor Leak / ORA-1000 From PreparedStatement.getMetaData() Method On Malformed Statements (Doc ID 2124104.1)

Last updated on MARCH 21, 2017

Applies to:

JDBC - Version 11.2.0.4.0 to 12.1.0.2.0 [Release 11.2 to 12.1]
Information in this document applies to any platform.

Symptoms


Cursor leak / ORA-1000 from PreparedStatement.getMetaData() method on malformed statements when using JDBC 11.2.0.4 and 12.1.0.2.

An application allows users to enter SQL statements that will be saved for later use in processing. All these statements need to be validated against a schema, so Oracle JDBC's driver capability to parse/validate the statement without actually executing it through the use of PreparedStatement.getMetaData() method is used. Unfortunately, when the statement is incorrect, the PreparedStatement.getMetaData() method would leak the cursor and the session would eventually become "dead" due to running out of open cursors and generating ORA-01000: maximum open cursors exceeded.
The only way to recover is by closing the physical database connection through restarting the application server.

The issue occurs with JDBC versions 11.2.0.4, 12.1.0.2

STEPS
-----------------------
The issue can be reproduced at will with the following steps:
1) Execute as sys "alter system set open_cursors=50 scope=memory;" to set some low limit for the test.
2) Make sure that your schema does not have table "foo".
3) Compile and execute the following method:



Cause

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms