고객정보 9건을 가진 TT 테이블은
a varchar2(10) -- 우편번호
b varchar2(100) -- 주소
c CLOB -- 기타정보
d varchar2(8) -- 등록일자
칼럼을 가지고 있습니다.
파티션은 되어있지 않습니다.
우편번호 체계가 변경되어 e varchar2(10) 칼럼을 추가하여 우편번호를 백업먼저하고 a 를 변경할 예정입니다.
BULK COLLECT INTO... FORALL 를 이용하여 5000건씩 TT에서 rowid를 가져와
update TT set e = a where rowid = v_rowid(i);
로 하니 12시간 걸렸습니다.
몇 개의 테이블이 더 있어서 더 이상 update는 안되겠다 싶어서
동일 테이블(ZZ)을 만들어서 백업 후 RENAME을 사용할까해서
insert /*+ APPEND */ into ZZ(a,b,c,d,e) select a,b,c,d,a from TT where d = '일자';
위 쿼리를 일자별로 나누어 실행했더니 2시간 정도 예상했는데 12시간 걸렸습니다.
질문
1. CLOB이 있는 insert ....select 는 원래 오래걸리나요?
2. CLOB이 있는 insert ....select 는 어떻게 쿼리를 만들어 사용해야하나요?
3. BULK COLLECT INTO... FORAL update 하는 것보다 더 좋은 방법은 어떤게 있을까요?
(담당자에게 파티션을 이야기했으나 안하겠다고하네요)
|