oracle分区表之交换分区 altertable exchange partition with table
2013-03-28 20:06
531 查看
Exchange partition提供了一种方式,让你在表与表或分区与分区之间迁
移数据,注意不是将表转换成分区或非分区的形式,而仅只是迁移表中数
据(互相迁移),由于其号称是采用了更改数据字典的方式,因此效率最高(
几乎不涉及io操作)。Exchange partition适用于所有分区格式,你可以将
数据从分区表迁移到非分区表,也可以从非分区表迁移至分区表,或者从
hash partition到range partition诸如此类吧。
其语法很简单:alter table tbname1 exchange
partition/subpartition ptname with table tbname2; (将未分区表的数据迁移到分区表)
注意:在将未分区表的数据迁移到分区表中时,可能出现ora-14099的错误,虽然可以用without validation去解决,但是此时进入分区表的数据可能不符合分区规则。所以without validation一定要慎用。
l 涉及交换的两表之间表结构必须一致,除非附加with validation子
句;
l 如果是从非分区表向分区表做交换,非分区表中的数据必须符合分
区表中指定分区的规则,除非附加without validation子句;
l 如果从分区表向分区表做交换,被交换的分区的数据必须符合分区
规则,除非附加without validation子句;
l Global索引或涉及到数据改动了的global索引分区会被置为
unusable,除非附加update indexes子句。
提示:
一旦附加了without validation子句,则表示不再验证数据有效性,
因此指定该子句时务必慎重。
实验:
SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);
Table created.
SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;
72009 rows created.
Commit complete.
SQL> CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME) (PARTITION P1 VALUES LESS THAN (TO_DATE('2005-7-1', 'YYYY-MM-DD')),PARTITION P2 VALUES LESS THAN (MAXVALUE));
Table created.
SQL> alter table t_new exchange partition p1 with table t;
alter table t_new exchange partition p1 with table t
*
ERROR at line 1:
ORA-14099: all rows in table do not qualify for specified partition
SQL> alter table t_new exchange partition p1 with table t without validation;
Table altered.
SQL> select count(*) from t;
COUNT(*)
----------
0
SQL> select count(*) from t_new;
COUNT(*)
----------
72009
SQL> rename t to t_old;
Table renamed.
SQL> select count(*) from t;
select count(*) from t
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> rename t_new to t;
Table renamed.
SQL> select count(*) from t;
COUNT(*)
----------
72009
SQL>
参考:/article/5005054.html
移数据,注意不是将表转换成分区或非分区的形式,而仅只是迁移表中数
据(互相迁移),由于其号称是采用了更改数据字典的方式,因此效率最高(
几乎不涉及io操作)。Exchange partition适用于所有分区格式,你可以将
数据从分区表迁移到非分区表,也可以从非分区表迁移至分区表,或者从
hash partition到range partition诸如此类吧。
其语法很简单:alter table tbname1 exchange
partition/subpartition ptname with table tbname2; (将未分区表的数据迁移到分区表)
注意:在将未分区表的数据迁移到分区表中时,可能出现ora-14099的错误,虽然可以用without validation去解决,但是此时进入分区表的数据可能不符合分区规则。所以without validation一定要慎用。
l 涉及交换的两表之间表结构必须一致,除非附加with validation子
句;
l 如果是从非分区表向分区表做交换,非分区表中的数据必须符合分
区表中指定分区的规则,除非附加without validation子句;
l 如果从分区表向分区表做交换,被交换的分区的数据必须符合分区
规则,除非附加without validation子句;
l Global索引或涉及到数据改动了的global索引分区会被置为
unusable,除非附加update indexes子句。
提示:
一旦附加了without validation子句,则表示不再验证数据有效性,
因此指定该子句时务必慎重。
实验:
SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);
Table created.
SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;
72009 rows created.
Commit complete.
SQL> CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME) (PARTITION P1 VALUES LESS THAN (TO_DATE('2005-7-1', 'YYYY-MM-DD')),PARTITION P2 VALUES LESS THAN (MAXVALUE));
Table created.
SQL> alter table t_new exchange partition p1 with table t;
alter table t_new exchange partition p1 with table t
*
ERROR at line 1:
ORA-14099: all rows in table do not qualify for specified partition
SQL> alter table t_new exchange partition p1 with table t without validation;
Table altered.
SQL> select count(*) from t;
COUNT(*)
----------
0
SQL> select count(*) from t_new;
COUNT(*)
----------
72009
SQL> rename t to t_old;
Table renamed.
SQL> select count(*) from t;
select count(*) from t
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> rename t_new to t;
Table renamed.
SQL> select count(*) from t;
COUNT(*)
----------
72009
SQL>
参考:/article/5005054.html
相关文章推荐
- oracle分区表之交换分区 altertable exchange partition with table
- oracle分区表之交换分区 altertable exchange partition with table
- oracle分区表之交换分区 altertable exchange partition with table
- oracle分区表之交换分区 altertable exchange partition with table
- 分区交换 alter table exchange partition 在线表 历史表交换
- SQL Server 2005:查看分区表(partition table)的分区范围(partition range)
- hive中简单介绍分区表(partition table),含动态分区(dynamic partition)与静态分区(static partition)
- 普通表转分区表和交换分区(oracle)
- 分区范围oracle partition table related operations
- hive中简单介绍分区表(partition table),含动态分区(dynamic partition)与静态分区(static partition)
- Oracle用分区表分区交换做历史数据迁移
- Oracle用分区表分区交换做历史数据迁移
- 利用EXCHANGE PARTITION WITH TABLE方式进行数据归档
- SQL Server 2005:查看分区表(partition table)的分区范围(partition range)
- ORA-14097: column type or size mismatch in ALTER TABLE EXCHANGE PARTITION
- [原]使用Oracle Partition Table对日志表进行分区一例
- SQL Server 2005:查看分区表(partition table)的分区范围(partition range)
- Oracle分区表 (Partition Table) 的创建及管理
- hive中简单介绍分区表(partition table)——动态分区(dynamic partition)、静态分区(static partition)
- hive中简单介绍分区表(partition table),含动态分区(dynamic partition)与静态分区(static partition)