티스토리 뷰


java.sql.SQLException: ORA-00604: 순환 SQL 레벨 1 에 오류가 발생했습니다

ORA-01000: 최대 열기 커서 수를 초과했습니다


위와 같은 오류가 날 때는 Statement 나 ResultSet 을 open 하기만 하고 close 가 없어서 나는 오류 입니다. 

특히 while, for 같은 루프문에서  적절한 위치에서 close 를 하고 있는 지 확인할 필요가 있습니다.


아래와 같은  샘플 코드가 있다고 했을 때 rsColumns.close(); 를 누락시켰을 때 위와 같은 오류가 발생되었다. 실제 코드는 while loop 가 길어서 ResultSet 닫는 것을 놓쳐도 눈에 잘 띄지 않아서 오류를 찾는데 어려움이 있었다.  


ResultSet rsTables = dbMeta.getTables(null, schemaName, "%", types);

 

int count = 0;

while (rsTables.next()) {

        

         String countQuery = "SELECT count(*) AS TOTAL_COUNT

+ FROM ALL_COL_COMMENTS

+ WHERE OWNER = 'GPDBD' AND TABLE_NAME= ? AND COMMENTS is not null ";

 

         PreparedStatement countPsmt = connection.prepareStatement(countQuery);

        

         countPsmt.close();

 

         ResultSet rsColumns = dbMeta.getColumns(null, schemaName, tableName, "%");

 

         while( rsColumns.next() )

         {

                  String typeName = rsColumns.getString("TYPE_NAME");

                  String colName = rsColumns.getString("COLUMN_NAME");

 

         }  // end of while

         rsColumns.close();

}

 

rsTables.close(); 

댓글
  • 프로필사진 Jason DB의 init.ora 파라미터에서 Open Cursor 갯수를 늘려줄수도 있습니다. Default커서수는 사실 작기때문에 Enterprise급 OLTP 환경에서는 Open Cursor수를 늘려주는것이 맞습니다. 물론 포스팅내용과 같이 항상 커서를 Close하게끔 코딩이 되어 있어야 합니다. 2012.07.01 17:45 신고
댓글쓰기 폼