ODBC에 ConnectionString 생성하여 접속 후 Disconnect시, 수초/수분후 Error 발생

by separk posted Dec 30, 2016

* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
Window7 32bit, Linux 64bit 등
CUBRID Ver.
9.3.6.0002
CUBRID TOOL Ver.

Manager : 9.3.1.703 / ODBC Unicode : 10.0.0.1

응용 환경(API)
ODBC 사용

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------

저희 프로그램 사용중 Cubrid ODBC Unicode (10.0.0.1) 을 통한 Connection Test 도중,

단지 Connection String 생성하여 Connect 후 바로 Disconnect 실행시,

수초 내지 1분 이내에, 해당 프로그램이 종료되는 현상이 발생하였습니다.


Connect / Disconnect 기능만 있는 ODBC Test용 프로그램을 생성하여

테스트 한 결과, 동일한 오류가 발생하여, 해당 ODBC 에 대한 버그가 아닌지 의심이 되어 이렇게 문의 드립니다.


Connect 시 소스코드

 // initEnv
 rc = SQL_SUCCESS;
 rc = SQLAllocEnv(&EnvHandle);

 // InitDBHandle
 if(rc == SQL_SUCCESS)
  rc = SQLAllocConnect(EnvHandle, &ConHandle);

 // Connect DB
 if(rc == SQL_SUCCESS)
 {
  TCHAR szInfo[1024];

  _tcscpy((TCHAR*)szInfo, (TCHAR*)(LPCTSTR)m_strCon);

  rc = SQLDriverConnect(ConHandle, NULL, (SQLTCHAR*)szInfo, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);

  if(rc != SQL_SUCCESS)
  {
   CString sError = _T("Connection failed!");
   AfxMessageBox(sError);
  }



Disconnect 시 소스코드

 rc = SQLDisconnect(ConHandle);
  if(rc != SQL_SUCCESS)
 {
  CString sError = _T("Disonnection failed!");
  AfxMessageBox(sError);
 }
 if(ConHandle != NULL)
  SQLFreeHandle(SQL_HANDLE_DBC,ConHandle);
 if(EnvHandle != NULL)
  SQLFreeHandle(SQL_HANDLE_ENV,EnvHandle);


Connect 후, Disconnect 작업 완료후,

에러메시지는 다음과 같습니다.


CUBTESTER.exe의 0x77b7160e에 처리되지 않은 예외가 있습니다. 0xC0000005: Access violation


Disconnect 실행후 Output 내용은 다음과 같습니다.

SQLGetDiagRec called
SQLGetFunctions called
SQLGetInfo called
SQLGetInfo called
SQLGetInfo called
SQLDisconnect called
SQLFreeHandle called
SQLFreeHandle called
'CUBTESTER.exe': 'C:Program Files (x86)cubrid-odbc-unicodecubrid_odbc32.dll' 언로드
'CUBTESTER.exe': 'C:WindowsSysWOW64wsock32.dll' 언로드
CUBTESTER.exe의 0x0ffcbfd4에 첫째 예외가 있습니다. 0xC0000005: Access violation
CUBTESTER.exe의 0x77b7160e에 처리되지 않은 예외가 있습니다. 0xC0000005: Access violation
'[12072] CUBTESTER.exe: 네이티브' 프로그램이 종료되었습니다(코드: 0 (0x0)).


이후 호출 스택 확인결과

> ntdll.dll!77b7160e()  
  [아래 프레임은 올바르지 않거나 누락되었거나 ntdll.dll에 대해 로드된 기호가 없음] 
  ntdll.dll!77b7160e()  
  ntdll.dll!77bf8777()  
  ntdll.dll!77c175b9()  
  ntdll.dll!77be0366()  
  ntdll.dll!77b60143()  
  KernelBase.dll!75d33d68()  
  ntdll.dll!77b6fda1()  
  KernelBase.dll!75d33d3c()  
  KernelBase.dll!75d3460c()  
  kernel32.dll!75a3336a()  
  ntdll.dll!77b89902()  

  ntdll.dll!77b898d5()  


위와 같이 나타나고 있었으며,

이 현상은 반드시 나타나고 있었습니다.

꼭 Connect 후 Disconnect 작업 후 수분내에 발생하고 있습니다.


해당하는 테스트 프로그램은 첨부하도록 하겠습니다.


Articles