1,一个表内分区命不可以重复,不同的表可以
2,在值20041224处split Part20041225即可

解决方案 »

  1.   

    1、但我用语句查出来确实是同名的2个分区阿!我也觉得不太可能!郁闷。
    2、split怎么用啊?
      

  2.   

    1,你用什么语句查的?是不是你写错了,发上来在帮你看看
    2,ALTER TABLE tbl
      SPLIT PARTITON Part20041225 
      AT TO_DATE (‘2004-12-24’,’YYYY-MM-DD’) 
      INTO (partition Part20041224, partition Part20041225);
    3,在对数据表做分区操作时,会产生以个表上的排它锁
      

  3.   

    1、我的语句:select PARTITION_NAME from user_extents where SEGMENT_NAME='TEST' order by PARTITION_NAME3、排它锁是什么东西?有没这方面的资料阿?那我该怎么办呢?
      

  4.   

    ft,
    1,user_extents 存的是segment的extents信息,也就是说你的partition分配了多个extents就有多少行记录,你不能从这看到PARTITION_NAME 就以为是重复的啊,你看看此表EXTENT_ID字段,它们是不同的EXTENT。你建表的时候没试过么?同一表下面建同名的partition是会报错的,绝对不可以的。3,http://tahiti.oracle.com/ 仔细看文档。分区操作不是经常性发生的,等分区操作结束再对表做其它操作。
      

  5.   

    1、那我该怎查找该表的分区名称呢?
    3、我的数据库数据量比较大,希望一天一个分区,而我们又要求尽量少到现场维护,所以我必须在程序中根据数据日期自动分区。我第一次搞oracle数据库,不是很懂,大哥帮帮忙啊!
      http://tahiti.oracle.com/这个网站打不开啊!
      

  6.   

    to  hippie1024(痞子):
      还要请教一个问题啊:对于一个大表(纪录可能有几千万或上亿条)做分区,每个分区表可能记录数不是很多,查询的时候可能快些。但插入呢?插入到这个表的时候,速度是否也很快呢?还有怎么建索引阿?我的是需要程序自动建立或删除的!谢谢!
      

  7.   

    1,要是只看名称你的SQL是可以的,加个distince就是。
    2,你一天多少数据量?要按天切?
     觉得你对分区的理解有问题,每个分区数据不多,干吗还要按天切分区。如果你的一个查询跨多个分区,速度会比单查一个分区速度慢。如果你要小范围内的搜索,可以用索引啊。
     建议你一次多建立几年的分区,每个分区内最好要有一定的数据,老的数据可以到时候把分区drop掉,再合理接力索引。分区本身对数据的插入影响不大,到是一些分区索引在大数据量插入时会有效率的影响。至于怎么建立索引,这和你具体的表结构,和具体应用查询有关。
    http://tahiti.oracle.com/这是ORACLE官方文档,在这你可以的到你学要所有基础知识,而且具有权威性。
      

  8.   

    2,既然数据量大,按天分区是可以的,确定你的查询里面都包含分区键。插入的速度影响不不会太大,
    如果建立了local分区索引会有一些影响,但大部分时候还是可以接受的。
    3,按你的应用,可以用日期作为分区键做range分区,按天先建立几个月的分区。过期的分区可以直接直接DORP,
    不会影响你的插入的(你可看到你分区的时候用的都是LESS THAN,数据大不了就是分在第一个分区上而已么)
    4,添加、删除分区表后全局索引需要重建,local索引可以自动管理。还可以把分区键做一个分区索引
    ,另外如果还有经常出现在WHERE条件中且选择性强的字段也可以考虑建立适当的索引,随需应变吧:)
      

  9.   

    现在的问题是:DORP分区后,再也插不进去数据了!
      

  10.   

    ?
    把你create,drop和insert语句发出来看看
      

  11.   

    插入时没报错,我用的是存储过程入库:
    存储过程:create or replace procedure  Insert_Test(T_ID in varchar2,,P_Date in varchar2)
     as RecordNum Number;
     begin 
      select count(*) into RecordNum from Test where TID = T_ID;
     if RecordNum=0 then
        insert into Test (TID,PDate) values (T_ID,P_Date);
         commit;
     end if; 
     exception when others then null;
    end Insert_Test;
      

  12.   

    select count(*) from Test where TID = T_ID;
     insert into Test (TID,PDate) values (T_ID,P_Date);
    commit;拿出来执行一下,看报什么错,发上来
      

  13.   

    老大,你这句是否是要插入壹条数据试一下吧?我在pl/sql develop中插入了壹条数据,没有反应,即没报什么错,但也没有数据!用的是:insert into test(tid,pdate) values ('2004122812121215300011','2004-12-28');
      

  14.   

    我在一边用程序写表,一边执行select count(*) from Test,报以下的错:
    索引'SYSTEM.SYS_C002726'或这类索引的分区处于不可用状态
      

  15.   

    你是不是已经做过删除某个分区的操作了?
    你的表上有一个主键相关的全局非分区索引,
    做过分区的操作后需要重建此索引的。你用的ORACLE是什么版本的?
      

  16.   

    还有pl/sql develop执行完之后要COMMIT的
      

  17.   

    你可以在作分区操作时,添加参数UPDATE GLOBAL INDEXES;
      

  18.   

    应该重建索引,但是我的索引是自动生成的,我必须要查数据库才知道索引名称阿,我在程序中怎么重建呢?UPDATE GLOBAL INDEXES;怎么用啊?
      

  19.   

    ALTER TABLE tbl
      SPLIT PARTITON Part20041225 
      AT TO_DATE (‘2004-12-24’,’YYYY-MM-DD’) 
      INTO (partition Part20041224, partition Part20041225)
     UPDATE GLOBAL INDEXES;最好建表时显示的指定索引名称,分区索引的名称和表分区名称是一样的。
      

  20.   

    local分区索引的名称和表分区名称是一样的。
      

  21.   

    谢谢 hippie1024(痞子),你很厉害阿!非常感谢!
      

  22.   

    不客气,大家都是在学习,应该互相帮助,互相促进么。:)BTW,你的这个系统和我做过的一个很类似,有问题大家在讨论吧。
      

  23.   

    哈哈,结束啦。
    太精彩了
    收藏hippie1024(痞子)牛人也。佩服佩服学习ing