WEB开发网
开发学院数据库Oracle Oracle分区之四:分区维护和管理 阅读

Oracle分区之四:分区维护和管理

 2013-01-18 16:15:41 来源:WEB开发网   
核心提示:HR IDX_TT4 P1HR IDX_TT4 P3HR I
HR IDX_TT4 P1
HR IDX_TT4 P3
HR IDX_TT4 P_MAX


三,分区表交换的相关实验
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一定要慎用。
a,涉及交换的两表之间表结构必须一致,除非附加with validation子句;
b,如果是从非分区表向分区表做交换,非分区表中的数据必须符合分区表中指定分区的规则,除非附加without validation子句;
c,如果从分区表向分区表做交换,被交换的分区的数据必须符合分区规则,除非附加without validation子句;
d,Global索引或涉及到数据改动了的global索引分区会被置为unusable,除非附加update indexes子句。
注意:
一旦附加了without validation子句,则表示不再验证数据有效性,因此指定该子句时务必慎重。

创建一个交换分区的普通heap表
SQL> create table exchange_t3(id number,city varchar2(10));
Table created.
SQL> select distinct city from t3 partition (p2);
CITY
----------
TJ
BJ
HB
查看下P2分区有records
SQL> select count(*) from t3 partition (p2);
COUNT(*)
----------
3000
下面是分区表和普通HEAP表交换
alter table t3
exchange partition p2
with table exchange_t3
including indexes
without validation;
验证下数据,和上面的P2分区数据一致。
SQL> select count(*) from exchange_t3;
COUNT(*)
----------
3000
SQL> select distinct city from exchange_t3;
CITY
----------
TJ
BJ
HB
四,一个实际应用的例子的相关实验
创建一个分区表,只保留最近2年的财务数据。
create table ware(wareyear varchar2(4),id number)
partition by range (wareyear)
(
partition p_2005 values less than('2006'),
partition p_2006 values less than('2007'),
partition p_max values less than(maxvalue)
);
创建索引
create index idx_ware_id on ware(id)
global partition by range(id)
(
partition p_id_10000 values less than(10000),
partition p_id_max values less than(maxvalue)
);
create index idx_ware_wareyear on ware(wareyear) local;
插入测试数据
insert into ware select '2005',object_id from dba_objects;
insert into ware select '2006',object_id from dba_objects;
commit;
年终,归档最早的数据,并加入新财年的数据
create table ware_2007(wareyear varchar2(4),id number);
create index idx_ware_2007 on ware_2007(wareyear);

上一页  1 2 3 4 5 6  下一页

Tags:Oracle 分区 分区

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接