更新partition key时,会导致该记录超出当前所在分区的范围,需要将其转移到其他对应分区上,因此需要开启ROW MOVEMENT;
原因:
这一操作产生影响的特殊之处在于这是个DML操作,是和online transaction密切相关的。这样对于一个update,实际上分为3步:
1、删除原有分区的数据
2、将原有数据转移到新分区上
3、更新数据
即一个update操作被拆分成:delete、insert、update三个操作。增加了性能负担。其中delete的查询条件与原update的查询条件相同,新的update的查询条件是基于insert生成的新的ROWID;相应的Redo Log、Undo log会增加。如果update语句还涉及到Local Index的字段的话,新、旧2个分区上的local index都要被更新。
还有一点,row movement会和域索引(Domain Index)产生冲突,如果表上定义了域索引,开启Row movement会失败,反之亦然。