본문 바로가기

IT관련

파티션키 컬럼에 대해서 Update 를 하는 경우 (ORA-14402 에러) (Enable Row Movement)

오라클 파티션(Partition) 테이블에 대해서 Update 하려고 할때, 파티션 키컬럼에 대해서도 Update 하게 되는 경우가 있을 수 있습니다.

그런데, 파티션키 컬럼을 변경하는 것은 일반 컬럼값 변경하는 경우와는 조금 다르게 생각해야 합니다.

파티션테이블의 데이터들이 모두 파티션 키컬럼값에 따라 어느 파티션으로 들어갈지가 정해지는 것인데, 이걸 그냥 값만 Update 해버리면 안되겠죠~

Update 가 일어나는 순간 다른 적절한 파티션으로 옮겨져야 합니다.

 

이것을 가능하게 해주는 Table 옵션이 "Enable Row Movement" 입니다.

파티션 Table 에 이 옵션을 걸어주지 않고 그냥 파티션키값을 변경하려고 하면 아래와 같이 ORA-14402 에러가 발생합니다.

(아래의 경우는 SALES 테이블의 파티션키가 sales_no 입니다)

 

아래와 같이 alter table ~ enable row movement; 커맨드로 테이블을 변경해주면 더이상 에러없이 값을 변경할 수 있습니다.

 

 

이렇게 enable row movement 옵션이 걸린 상태에서 파티션 키값에 대해 Update 를 수행하게 되면,

단순히 데이터블록에 들어있는 값을 변경하는게 아니라, 해당 블록에서 데이터를 Delete 하고,

적당한 다른 파티션에 위치한 적절한 블록에 새롭게 Insert 하는 방식으로 처리됩니다.

 

그래서 일반 Update 보다는 아주 쬐끔 느리다고 하네요~~  아주 쬐~끔...

다행히도 내부적으로 파티션이 바뀌는 작업이 이루어지기는 해도 파티션 인덱스가 Invalidate 되거나 하는 불상사는 발생하지 않습니다.

 

 

▶ 오라클 파티션 종합 페이지 바로가기