Oracle分区之四:分区维护和管理
2013-01-18 16:15:41 来源:WEB开发网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);
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接