ITPub博客

首页 > 数据库 > Oracle > 【oracle】更新partition key

【oracle】更新partition key

Oracle 作者:xiutiejian 时间:2013-08-01 17:02:29 0 删除 编辑

更新partition key时,会导致该记录超出当前所在分区的范围,需要将其转移到其他对应分区上,因此需要开启ROW MOVEMENT;

 

举例如下:

//准备数据,数据来自于dba_tables,需要赋予权限

grant select on dba_tables to sunmi;

//创建分区表

drop table test_move;

create table test_move
partition by list (owner)
(partition p1 values ('SYS'),
partition p2 values ('DEMO'),
partition p3 values ('SYSTEM'),
partition def values (default))
as select * from dba_tables;

//这时候修改一条记录的分区键

update test_move set owner='SYSTEM' where table_name='WRH$_PARAMETER_NAME'

//会报如下14402错误:

【oracle】更新partition <wbr>key
//这时候要修改表的row movement为enable
alter table test_move enable row movement ;

//在修改一条数据的分区键

update test_move set owner='SYSTEM' where table_name='WRH$_PARAMETER_NAME'

commit;

//修改正常。

 

原因:

这一操作产生影响的特殊之处在于这是个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会失败,反之亦然。

 

 


 

 

 

 

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22825655/viewspace-1116113/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-11-05