본문 바로가기

컴퓨터활용/자바

ORA-00604 나 ORA-01000 오류가 날 때


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 2012.07.01 17:45

    DB의 init.ora 파라미터에서 Open Cursor 갯수를 늘려줄수도 있습니다. Default커서수는 사실 작기때문에 Enterprise급 OLTP 환경에서는 Open Cursor수를 늘려주는것이 맞습니다. 물론 포스팅내용과 같이 항상 커서를 Close하게끔 코딩이 되어 있어야 합니다.

  • 나그네 2018.07.10 18:18

    정보 감사합니다~ ^^