테이블 구조가 변경되거나, 정규화가 되어 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 상태는 어떤 경우에 놓이는지 재현해서 확인해 보지 못했다.)

+ Recent posts