Skip to end of metadata
Go to start of metadata

 

개요 


응용프로그램에서 커넥션이 단절되는 경우와 각 상황에서의 에러 코드,메시지를 설명합니다.

 

적용버전  


  • ALTIBASE HDB 6.3.1 을 기준으로 작성 되었습니다.
  • 추가사항 또는 업데이트가 필요한 경우 http://support.altibase.com/kr/ 또는 이 페이지에 댓글로 요청 글 남겨주세요.


응용프로그램에서 Connection이 단절되는 경우


다음과 같은 상황은 Connection이 되지않은 상태입니다.

  1. Connect를 안한 경우
  2. 통신소켓이상이나 서버쪽에서 연결을 끊은 경우
  3. 이전에 끊어진 연결을 감지 못했을 경우 (이전에 Connection이 단절된 경우)
  4. Timeout에 의해 끊어진 경우.
    Query Timeout, Fetch Timeout, UTrans Timeout, Idle Timeout이 있으며, Query Timeout의 경우에는 Connection이 끊기지 않으나 이외에 나머지 경우는 모두 Connection이 끊어집니다.
  5. DB Server가 종료된 경우
  6. DB Server가 종료되어 있어 연결은 못하는 경우 (Connect 실패)

응용프로그램별 에러 코드와 에러 메시지 확인방법


응용프로그램이 ALTIBASE Embedded SQL(APRE*C/C++) 로 작성된 경우 확인할 수 있는 값은 다음과 같습니다.

  1. sqlca.sqlcode (쿼리 수행 리턴값 - SQL_SUCCESS, SQL_ERROR, etc)
  2. sqlca.sqlerrm.sqlerrmc (에러메시지)
  3. SQLCODE (에러코드)
  4. SQLSTATE (상태코드)


응용프로그램이 SQLCLI로 작성된 경우 확인할 수 있는 값은 다음과 같습니다.
SQLError(env,dbc,stmt,state,err,msg,msgMax,msgLength) 를 호출하여 확인할수 있습니다.

  1. state (상태코드)
  2. err (에러코드)
  3. msg (에러메시지)

 

Connection 에러 상황 및 에러 메시지 


  1. Connect를 안했거나 이전에 Disconnect 한 경우

    [APRE*C/C++]
    	====================================================
    	sqlca STRUCTURE
    	.sqlcode [-2] (SQL_ERROR)
    	.sqlerrm.sqlerrmc The connection does not exist. (Name:default connection)
    	SQLCODE [-2]
    	SQLSTATE ["08003"]
    	====================================================
    
    [SQLCLI/ODBC] 
    1. 이전에 한번도 connect를 안한 경우
    	====================================================
    	return value [-2]
    	SQLError(env,dbc,stmt,state,err,msg,msgMax,msgLength)
    	error state (state) [""]
    	error number (err) [0] in Hex(0)
    	error message (msg) [ ?]
    	====================================================
    2. 이전에 disconnect 한 경우
    	====================================================
    	return value [-1] (SQL_ERROR)
    	SQLError(env,dbc,stmt,state,err,msg,msgMax,msgLength)
    	error state (state) ["08003"]
    	error number (err) [331830] in Hex(51036)
    	error message (msg) [Connection does not exist (err8)]
    	====================================================
  2. Connection이 단절된 경우 (서버에서 끊었거나 네트워크 에러)

    [APRE*C/C++]
    ====================================================
    sqlca STRUCTURE
    .sqlcode [-1]
    .sqlerrm.sqlerrmc [Communication link failure('errno')]
    SQLCODE [-331843] in Hex(51043)
    SQLSTATE ["08S01"]
    ====================================================
    
    [SQLCLI/ODBC] 
    ====================================================
    return value [-1]
    SQLError(env,dbc,stmt,state,err,msg,msgMax,msgLength)
    error state (state) ["08S01"]
    error number (err) [331843] in Hex(51043)
    error message (msg) [Communication link failure('errno')]
    ====================================================
  3. 이전에 연결이 단절된 것을 감지 못하고 다시 쿼리를 수행한 경우

    [APRE*C/C++]
    ====================================================
    sqlca STRUCTURE
    .sqlcode [-1]
    .sqlerrm.sqlerrmc [Connection does not exist (err11)]
    SQLCODE [-1]
    SQLSTATE ["08003"]
    ====================================================
    
    [SQLCLI/ODBC] 
    ====================================================
    return value [-1]
    SQLError(env,dbc,stmt,state,err,msg,msgMax,msgLength)
    error state (state) ["08003"]
    error number (err) [331830] in Hex(51036)
    error message (msg) [Connection does not exist (err8)]
    ====================================================


  4. Timeout에 의해 단절된 경우
    Fetch Timeout, UTrans Timeout, Idle Timeout 모두 같은 에러가 리턴됨. 
    (altibase_boot.log에 timeout 내용이 기록됨.)

    [APRE*C/C++]
    ====================================================
    sqlca STRUCTURE
    .sqlcode [-1]
    .sqlerrm.sqlerrmc [Communication link failure(131)]
    SQLCODE [-331843] in Hex(51043)
    SQLSTATE ["08S01"]
    ====================================================
    
    [SQLCLI/ODBC]
    ====================================================
    return value [-1]
    SQLError(env,dbc,stmt,state,err,msg,msgMax,msgLength)
    error state (state) ["08S01"]
    error number (err) [331843] in Hex(51043)
    error message (msg) [Communication link failure(131)]
    ====================================================
  5. DB Server가 종료된 경우

    [APRE*C/C++]
    ====================================================
    sqlca STRUCTURE
    .sqlcode [-1]
    .sqlerrm.sqlerrmc [Communication link failure(131)]
    SQLCODE [-331843] in Hex(51043)
    SQLSTATE ["08S01"]
    ====================================================
    
    [SQLCLI/ODBC]
    ====================================================
    return value [-1]
    SQLError(env,dbc,stmt,state,err,msg,msgMax,msgLength)
    error state (state) ["08S01"]
    error number (err) [331843] in Hex(51043)
    error message (msg) [Communication link failure(131)]
    ====================================================


  6. Connect 실패

    [APRE*C/C++]
    ====================================================
    sqlca STRUCTURE
    .sqlcode [-1]
    .sqlerrm.sqlerrmc [Client unable to establish connection]
    SQLCODE [-327730] [50032]
    SQLSTATE [08001]
    ====================================================
    
    [SQLCLI/ODBC]
    ====================================================
    return value [-1]
    SQLError(env,dbc,stmt,state,err,msg,msgMax,msgLength)
    error state (state) [08001]
    error number (err) [327730] in Hex(50032)
    error message (msg) [Client unable to establish connection]
    ====================================================

 

결론  


 각 상황별로 에러코드로 확인한 결과 다음과 같이 3가지의 경우가 있습니다.

 
- SQLSTATE(state) ["08001"] SQLCODE [1(0x01)] errno [32770(0x050032)]
* connect 실패

- SQLSTATE(state) ["08003"] SQLCODE(errno) [331830(0x051036)]
* Connect를 안하고 (disconnect 한 후) 수행하는 경우
* 이미 Connect가 끊어져 있는 경우

- SQLSTATE(state) ["08S01"] SQLCODE(errno) [331843(0x051043)]
* socket 단절
* timeout에 의해 끊어진 경우
* 서버가 종료되있는 경우

  • No labels