테이블 구조가 변경되거나, 정규화가 되어 RI가 존재하는 테이블을 사용하고 주기적으로 LOAD 작업이 발생한다면 SQL0668N 에러 메시지를 받게 될 것이다.
이런 경우는 테이블 상태 체크를 신속히 파악해야 되는데, 관리 뷰(AdminTabInfo)를 통해서 작업이 가능하다.
SELECT CASE LOAD_STATUS WHEN 'PENDING' THEN 'Load Pending' WHEN 'IN_PROGRESS' THEN 'I' ELSE 'N' END , CASE REORG_PENDING WHEN 'Y' THEN 'R' ELSE 'N' FROM SYSIBMADM.ADMINTABINFO WHERE TABSCHEMA = ‘스키마’ AND TABNAME = ‘테이블’ AND TABTYPE='T' ; |
데이터 컬럼 속성이 변경되거나, 컬럼이 삭제되는 경우 SQL0668N Reason Code 7 에러가 반환된다.
이런 경우 sysibmadm.admintabinfo 뷰를 조회하여 “재구성 보류”(reorg pending) 상태인지 확인이 가능하다.
만일 load 작업이 빈번하게 일어난다면, load 작업이 완료 후 load 대상 테이블들이 “로드 보류” 상태에 놓였는지 확인해 보도록 절차를 만들 필요가 있다.
SQL0668N Reason Code3 은 블로그에 전에 언급을 했지만, 여러 이유 (Dead Lock, Load Temp 공간 부족, 작업 강제 취소 등등) 로 Load 작업이 완료되지 못해서 발생한 것이다.
Load Pending 상태는 Load Query 구문을 통해서도 확인 가능하지만, View를 통해서 테이블 일괄 검사하는 것이 편한 방법일 것이다.
(최근 이 문제로 AdminTabInfo 뷰를 찾으려 했는데 기억나지 않아서 load query 방식으로 고객에게 안내해 준 기억이 난다..)
이외에도 RI(부모-자식 테이블 관계)가 존재하거나 Check 제약조건이 있는 테이블들도 Load 작업 이후 “데이터 무결성” 확인을 하는 것이 좋다. (Integrity Pending에 놓인 테이블의 경우 SELECT 는 가능해서 쉽게 찾아내기 어려울 수 있다.)
SELECT VARCHAR(TABNAME,16) TABNAME, CASE STATUS WHEN 'C' THEN 'Set integrity pending' WHEN 'Inoperative' THEN 'X' ELSE 'NORMAL' END TAB_STATUS FROM SYSCAT.TABLES WHERE TABSCHEMA = '스키마' AND TABNAME = '테이블' AND TYPE='T' ; |
(참고로 inoperative 상태는 어떤 경우에 놓이는지 재현해서 확인해 보지 못했다.)
'Note' 카테고리의 다른 글
[관리] row migration 과 row chain (0) | 2013.06.26 |
---|---|
[설치] 비루트 설치 (0) | 2013.06.19 |
[설치] Activation Code 및 버전 EOS (0) | 2013.04.26 |
[설치] CentOS 6 64bit에서 DB2 V10.1 설치를 위한 Library 설정 (0) | 2013.04.26 |
[SQL] 테이블 함수 PD_GET_DIAG_HIST 로 진단로그의 MSG 컬럼 데이터 줄바꿈 변경 방법 (0) | 2013.03.29 |