아래와 다른내용의 질문이라 새로운 글로 올립니다.
udb 7.2 for linux 를 사용하고 있습니다.
테이블 구조는...............
CREATE TABLE PART_USER
(
P_ID INTEGER NOT NULL,
NAME VARCHAR(20) NOT NULL,
::
::
FOREIGN KEY (P_ID) REFERENCES PART ON DELETE CASCADE ON UPDATE NO ACTION
)
IN DATA_TS;
CREATE INDEX IDX_PART_USER ON PART_USER (P_ID ASC) ALLOW REVERSE SCANS;
위와같이 생성되어있습니다.
그런데 위와같이 외래키가 설정된 테이블들이 많이 있는데(30개)
PART의 row를 삭제할때 PART_USER에 삭제가 전파가 안되어서 고아로 남는 문제가 생기는 경우가 있다는 겁니다.
전파가 잘되서 지워지는 테이블도 있고 덩그러니 부모만 지워지고 자식은 남는 테이블도 있고...
분명 PART의 p_id = 100 값이고 PART_USER의 p_id도 100값인 row가 몇개있는지도 확인하고
(delete from part where p_id=100) 해서 삭제후
(select from part_user where p_id=100) 해보면 row가 그대로 출력된다는 겁니다. ㅡㅡ;;
터미널에서 쿼리를 실행했으니 delete 끝나자마자 오토커밋 되었겠지요.. ㅡㅡ;;
테이블 생성시 몇번씩 재확인하고 스크립트로 돌려서 생성한거라 외래키 조건을 빼먹은 문제는 없습니다.
또한 테이블 생성후 레코드 몇개씩 추가해서 테스트 시에는 전체가 잘되었는데
테이블들에 데이터가 몇만건 이상씩 쌓이니까 잘되던게 어느날 몇개의 테이블에서 부모잃은 고아 데이터가 남아서
이상한 동작을 야기시킵니다.
에러가 리턴되지도 않고 쿼리도 성공했다고 나오구요.. ㅡㅡ;;
이거 외래키 제약조건 부분이 왜 이렇게 불안정하게 도는건지요.. 이건뭐 무결성 유지를 믿을수가 없어서 ㅡㅡ;;
부모 테이블 데이터 삭제할때 일일이 부모자식관계를 찾아다니면서 지워줘야 할 판입니다...
저만 그러는건지.. fixpack 관련 변경사항에도 이런 문제는 못봤던거라 당황스럽네요..
제발 도움말씀 부탁드립니다.
|