修改分区表的分区键键值情况

来源:互联网 发布:java工厂模式概念 编辑:程序博客网 时间:2024/05/16 02:11
--修改分区表的分区键键值情况分为两种情况:数据修改之后,它仍然属于原来的分区,这种修改在所有的分区机制中都没问题。数据修改之后,更新后的分区键值属于另外一个分区,按照个分区定义,这样的数据需跨分区移动。只有当表启用了行移动式时,这样的数据才能修改成功。EODA@PROD1> set echo onEODA@PROD1> EODA@PROD1> CREATE TABLE range_example  --创建一个没有启动行移动的分区表  2    ( range_key_column date ,  3   data  varchar2(20)  4    )  5    PARTITION BY RANGE (range_key_column)  6    ( PARTITION part_1 VALUES LESS THAN  7        (to_date('01/01/2014','dd/mm/yyyy')),  8   PARTITION part_2 VALUES LESS THAN  9        (to_date('01/01/2015','dd/mm/yyyy')) 10    ) 11  /Table created.EODA@PROD1> EODA@PROD1> insert into range_example  --插入数据  2    ( range_key_column, data )  3    values  4    ( to_date( '15-dec-2013 00:00:00',  5    'dd-mon-yyyy hh24:mi:ss' ),  6  'application data...' );1 row created.EODA@PROD1> EODA@PROD1> insert into range_example  2    ( range_key_column, data )  3    values  4    ( to_date( '01-jan-2014 00:00:00',  5    'dd-mon-yyyy hh24:mi:ss' )-1/24/60/60,  6  'application data...' );1 row created.EODA@PROD1> EODA@PROD1> select * from range_example partition(part_1);RANGE_KEY DATA--------- --------------------15-DEC-13 application data...31-DEC-13 application data...EODA@PROD1> EODA@PROD1> update range_example   --更改键值但是属于第一种情况  2  set range_key_column = trunc(range_key_column)  3  where range_key_column =  4     to_date( '31-dec-2013 23:59:59',  5      'dd-mon-yyyy hh24:mi:ss' );1 row updated.EODA@PROD1> EODA@PROD1> update range_example  --更改键值但是属于第二种情况,更新失败  2    set range_key_column = to_date('01-jan-2014','dd-mon-yyyy')  3    where range_key_column = to_date('31-dec-2013','dd-mon-yyyy');update range_example       *ERROR at line 1:ORA-14402: updating partition key column would cause a partition changeEODA@PROD1> EODA@PROD1> select rowid  --查找rowid  2  from range_example  3  where range_key_column = to_date('31-dec-2013','dd-mon-yyyy');ROWID------------------AAAVESAAEAABRQ9AABEODA@PROD1> EODA@PROD1> alter table range_example enable row movement;  --启用行移动Table altered.EODA@PROD1> EODA@PROD1> update range_example   --更新成功  2  set range_key_column = to_date('01-jan-2014','dd-mon-yyyy')  3  where range_key_column = to_date('31-dec-2013','dd-mon-yyyy');1 row updated.EODA@PROD1> EODA@PROD1> select rowid   --行rowid由于更新更改  2  from range_example  3  where range_key_column = to_date('01-jan-2014','dd-mon-yyyy');ROWID------------------AAAVETAAEAABRg9AAA
--参考来源《Oracle编程艺术深入理解数据库体系结构(第三版)》
0 0
原创粉丝点击