一些关于表分区管理的问题,直接上代码,一次执行即可,问题已经以红色标志,望高手解惑。
-测试分区维护操作
--创建一个表,以reader_id进行范围分区
create table my_reader 
(
    reader_id number(3) primary key,
    company varchar2(10),
    name varchar2(10),
    sex varchar2(2),
    grade varchar2(10),
    addr varchar2(50)
)
partition by range(reader_id)
(
    partition p1 values less than(115),
    partition p2 values less than(119),
    partition p3 values less than(123)
);
--插入若干数据
insert into my_reader values(111,'信息系','王维利','女','教授','1号楼424');
insert into my_reader values(112,'财会系','李  立','男','副教授','2号楼316');
insert into my_reader values(113,'经济系','张  三','男','讲师','3号楼105');
insert into my_reader values(114,'信息系','周华发','男','讲师','1号楼316');
insert into my_reader values(115,'信息系','赵正义','男','工程师','1号楼224');
insert into my_reader values(116,'信息系','李  明','男','副教授','1号楼318');
insert into my_reader values(117,'计算机系','李小峰','男','助教','1号楼214');
insert into my_reader values(118,'计算机系','许鹏飞','男','助工','1号楼216');
insert into my_reader values(119,'计算机系','刘大龙','男','教授','1号楼318');
insert into my_reader values(120,'国际贸易','李  雪','男','副教授','4号楼506');
insert into my_reader values(121,'国际贸易','李  爽','女','讲师','4号楼510');
insert into my_reader values(122,'国际贸易','王  纯','女','讲师','4号楼512');--查询表中的所有数据
select * from my_reader;--查询表中第一个分区内的所有数据
select * from my_reader partition(p1);--添加分区,只能在最后一个分区后进行添加分区的操作
alter table my_reader add partition p4 values less than(126);
--向新添加的分区中加入数据
insert into my_reader values(123,'财会系','沈小霞','女','助教','2号楼202');
insert into my_reader values(124,'财会系','朱  海','男','讲师','2号楼210');
insert into my_reader values(125,'财会系','马英明','男','副教授','2号楼212');
--查询新分区中的数据
select * from my_reader partition(p4);--删除分区记录再插入新记录,操作成功delete from my_reader partition(p4);
insert into my_reader values(123,'财会系','沈小霞','女','助教','2号楼202');--截断分区,删除分区中的所有数据,分区结构保持不变
alter table my_reader truncate partition p4;
--查询已删除分区的数据,该分区中没有任何记录
select * from my_reader partition(p4);
--截断分区后,向分区中加入数据,操作失败,提示分区不存在?insert into my_reader values(124,'财会系','沈小霞','女','助教','2号楼202');--删除分区,可以删除表中的任意一个分区,删除后不能插入该范围的记录,分区信息不再存在
alter table my_reader drop partition p3;
--查询已删除分区的数据,运行时提醒分区不存在
select * from my_reader partition(p3);
--插入一条记录,操作失败,提示分区索引不存在
insert into my_reader values(121,'国际贸易','李  爽','女','讲师','4号楼510');--合并分区,合并两个(或多个)相邻的分区,不能再插入数据?
alter table my_reader merge partitions p1,p2 into partition p2;
--查询合并后的分区的数据
select * from my_reader partition(p2);
--合并分区后,插入数据失败?insert into my_reader values(110,'财会系','沈小霞','女','助教','2号楼202');--拆分分区,拆分一个分区为两个分区
alter table my_reader split partition p2 at(115)
into (partition p1, partition p2);
--查询拆分后的分区内的数据
select * from my_reader partition(p1);
--操作失败,插入数据失败?insert into my_reader values(110,'财会系','沈小霞','女','助教','2号楼202');oracle表分区管理

解决方案 »

  1.   

    所有问题都是因为执行完ddl操作后索引失效了;
    查出索引名称,rebuild一下就行了;
    最后一个报错是因为数据重复,主键冲突了。select * from dba_indexes where table_name ='MY_READER';alter index xxx  rebuild;
      

  2.   

    非常感谢!不过"select * from dba_indexes where table_name ='MY_READER';"这条命令貌似不能用,我用的是oracle 10g,是用一个source用户创建。我是直接查找到表的unique index再进行更新的。非常感谢,今天纠结了一整天。呵呵
      

  3.   

    你的用户没权限~ 查询dba_视图需要赋权。