위의 질문 중
3번의 인덱스를 리빌드 하는데 인덱스 테이블 스페이스 부족하다고
ORA-1652: unable to extend temp segment by ... in tablespace IDX
위의 에러 발생이 왜 나는 지에 대한 문의가 있어 답변드리면
앞서 얘기한 것과 같이 인덱스 리빌드시 TEMP TABLESPACE를 이용하여
임시 인덱스 세그먼트를 만들고 이 인덱스 세그먼트를 기존 인덱스로 체인지 하기 위해
기존 인덱스를 드랍하고 임시 인덱스를 기존 인덱스로 바꾸게 됩니다.
이러기 위해서는 잠시동안이라도 두개의 인덱스가 인덱스 테이블 스페이스에 공존하게 됩니다. 두개의 인덱스를 가지고 있을 공간이 없을 경우 위의 에러가 발생합니다.
그럼 왜 위의 2개의 인덱스가 필요한가인데요..
우선은 인덱스 리빌드 세션이 에러 및 기타 장에로 작업이 완료 되지 않았을 경우 기존꺼를 사용할 수 있어야 하며,
'ALTER INDEX XXX REBUILD;' 만을 사용했을 경우
다른 세션에서는 위의 인덱스를 사용할 수 있어야 합니다. 단 위의 경우는 SELECT 만이 가능합니다.
ONLINE 옵션을 주었을 경우에만 모든 DML이 가능합니다.
또한 ONLINE 옵션을 주어지지 않으면 기존인덱스를 이용하여 인덱스를 새로 생성하지만,
ONLINE 옵션 시에는 기존인덱스를 사용하지 않는대신 테이블을 읽어서 처리 하게 됩니다.