1. 증상 
 
기업은행 SMARTPB 개발서버 업무 디비에 JexAdmin 기본 테이블 조회시(사용자정보, 메뉴정보) 아래와 같은 오류 발생. 
 
================================================================================
| PRJ_ID               | VARCHAR              | SMARTADM
| DYNAMIC              | DYNAMIC              | null
================================================================================
SELECT  A.PRJ_ID 
       ,A.MNU_ID 
       ,A.MNU_SEQ 
       ,A.MNU_NM 
       ,A.MNU_DEP 
       ,A.PRNT_MNU_ID 
       ,A.ATHT_INF 
       ,A.URL 
       ,A.REG_DT 
       ,A.REG_ID  
       ,A.UPD_DT 
       ,A.UPD_ID 
 FROM JEX_MNU_INF A 
 WHERE A.PRJ_ID = 'SMARTADM'
     
ORDER BY A.MNU_SEQ  ASC  
================================================================================
[2013-03-21 14:05:53:041][ERROR] : com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-290, SQLSTATE=55039, SQLERRMC=null, DRIVER=3.63.75 at com.ibm.db2.jcc.am.fd.a(fd.java:682)
 at com.ibm.db2.jcc.am.fd.a(fd.java:60)
 at com.ibm.db2.jcc.am.fd.a(fd.java:127)
 at com.ibm.db2.jcc.am.nn.b(nn.java:4031)
 at com.ibm.db2.jcc.am.nn.a(nn.java:4013)
 at com.ibm.db2.jcc.t4.cb.a(cb.java:835)
 at com.ibm.db2.jcc.t4.cb.n(cb.java:801)
 at com.ibm.db2.jcc.t4.cb.j(cb.java:253)
 at com.ibm.db2.jcc.t4.cb.d(cb.java:55)
 at com.ibm.db2.jcc.t4.q.c(q.java:44)
 at com.ibm.db2.jcc.t4.sb.j(sb.java:147)
 at com.ibm.db2.jcc.am.yn.ib(yn.java:2119)
 at com.ibm.db2.jcc.am.zn.b(zn.java:4295)
 at 
com.ibm.db2.jcc.am.zn.cc(zn.java:720)
 at com.ibm.db2.jcc.am.zn.executeQuery(zn.java:694)
 at jex.resource.cci.ido.impl.JexIDODefaultConnection.execute(JexIDODefaultConnection.java:1105)
 at jex.resource.cci.ido.impl.JexIDODefaultConnection.executeList(JexIDODefaultConnection.java:656)
 at jex.resource.cci.JexConnectionImpl.executeList(JexConnectionImpl.java:281)
 at org.apache.jsp.WEB_002dINF.action.jex.studio.stumgnt.stu_005fmgnt_005f0002_005f01_005fr001_005fact_jsp._jspService(stu_005fmgnt_005f0002_005f01_005fr001_005fact_jsp.java:166)
  
 
2. 원인 파악 
 
위와 같이 jdbc 오류 발생시에는 테이블 스페이스 확인 상태 확인이 필요합니다. 
 
db2 테이블 스페이스 확인 방법은 
구글링해보면 아래와 같은 명령어로 확인 가능합니다. DB서버에 터미널 연결하여 db 접속 후에 아래 명령어로 상태를 확인합니다. 
 
-- 디비 연결 
$ db2 connect to smartdb
 
-- 테이블 스페이스 정보(tablespace-id) 확인(해당 테이블이 위치해 있는 테이블 스페이스를 확인할 것)
$ db2 list tablespaces 
-- 테이블 스페이스 상세 보기 
$ db2 list tablespaces show detail
해당 스페이스 상태값이 '0x0000'이면 테이블 스페이스 상태가 정상. '0x0000'가 아니면 dba를 통해서 확인이 필요합니다.
Tablespace의 컨테이너 확인
$ db2 list tablespace containers for tablespace-id
보면 해당 컨테이너의 로우 데이터 파일의 경로가 나옵니다. 해당 파일이 실제로 존재하고 있는 지 확인 합니다. 
 
3. 조치 사항 
 
확인 결과 특정 테이블 스페이스 컨테이너의 물리적인 데이터 파일이 삭제되어 위와 같은 오류 발생. 특정 테이블 스페이스에 문제가 발생시에 디비 연결에 문제가 생기는 오라클과는 
달리 db2는 실제 쿼리가 실행될 때 위와 같은 오류가 발생되므로 유의하세요. 
결국 개발 db2 데이터베이스를 엔지니어 재설치하고, 기존 테이블과 데이터를 복구하는 방향으로 진행됨. 물리적으로 손상된 테이블 스페이스 파일은 복구 불가함. 
 
 
(위 내용은 제가 db2를 제대로 알지 못한 상태로 기술되었습니다. 틀린 부분이 있을 수 있습니다. 틀린 부분이 있으시면 댓글 달아주세요.)