我在网上查资料的时候,发现有人说11g中组合分区,可以不用范围分区当主分区,而10g之前必须以范围分区当主分区,我想问一下11g中是否确实如此?我用hash分区当主分区,范围分区当做子分区,但是不行,谁知道怎么弄?

解决方案 »

  1.   


    一. 分区Partition(分区)一直是Oracle数据库引以为傲的一项技术,正是分区的存在让Oracle高效的处理海量数据成为可能,在即将发布的Oracle 11g中,分区技术在易用性和可扩展性上再次得到了增强。 1. Interval Partitioning 
        在我曾经的一个项目中,由于数据量的巨大,所以表设计为每一个小时一个分区,数据库管理员日常要做的一件重复而无聊的工作就是每隔一天要生成新的24个分区,用以存储第二天的数据。 
    而在11g中这项工作可以交由Oracle自动完成了,基于Range和List的Interval Partitioning分区类型登场。 CREATE TABLE TB_INTERVAL 
    PARTITION BY RANGE (time_col) 
    INTERVAL(NUMTOYMINTERVAL(1, 'month')) 
    (PARTITION P0 VALUES LESS THAN (TO_DATE('1-1-2007', 'dd-mm-yyyy')));     指定需要Oracle自动创建分区的间隔时间,上面这个例子是1个月,然后至少创建一个基本分区,上面这个例子是在2007-1-1之前的所有数据都在P0分区中,以后每个月的数据都会存放在Oracle自动创建的一个新分区中。     目前还没有更多的资料显示Oracle如何控制每个新分区的属性,比如存放在哪个表空间中,自动创建的数据文件有多大,如果是数据文件是裸设备如何处理,当第一条跨分区的记录插入时实时创建分区效率如何,虽然这些仍然是未知数,但是我们不得不承认这是一个人性化的进步。2. System Partitioning 
        又一个人性化的分区类型,系统分区,在这个新的类型中,我们不需要指定任何分区键,数据会进入哪个分区完全由应用程序决定,实际上也就是由SQL来决定,终于,我们在Insert语句中可以指定插入哪个分区了。     假设我们创建了下面这张分区表,注意,没有指定任何分区键: CREATE TABLE systab (c1 integer, c2 integer) 
    PARTITION BY SYSTEM 

    PARTITION p1 TABLESPACE tbs_1, 
    PARTITION p2 TABLESPACE tbs_2, 
    PARTITION p3 TABLESPACE tbs_3, 
    PARTITION p4 TABLESPACE tbs_4 
    );     现在由SQL语句来指定插入哪个分区: -- 数据插入p1分区 
    INSERT INTO systab PARTITION (p1) VALUES (4,5); 
    -- 数据插入第2个分区,也就是p2分区 
    INSERT INTO systab PARTITION (2) VALUES (7,8); 
    -- 为了实现绑定变量,用pno变量来代替实际分区号,以避免过度解析 
    INSERT INTO systab PARTITION (:pno) VALUES (9,10); 
    由于System Partitioning的特殊性,所以很明显,这种类型的分区将不支持Partition Split操作,也不支持create table as select操作。3. More Composite Partitioning 
        在10g中,我们知道复合分区只支持Range-List和Range-Hash,而在在11g中复合分区的类型大大增加,现在Range,List,Interval都可以作为Top level分区,而Second level则可以是Range,List,Hash,也就是在11g中可以有3*3=9种复合分区,满足更多的业务需求。 
    4. Virtual Column-Based Partitioning 
        Virtual Column是11g中的一个新功能,这种列中的数据并不实际存储于磁盘上(我们可以看成是一个类似Function的列),只有当读取的时候才实时计算。暂时不讨论性能问题,这个功能还是比较有意思的。 可以通过这样的语句来创建虚拟列。 CREATE TABLE tb_v 
    (col_1 number(6) not null, 
    col_2 number not null, 
    … 
    col_v as (col_1 *( 1+col_2));     虚拟列虽然没有实际的存储空间,但是却可以跟其他普通列一样,创建索引,作为分区键,甚至可以收集统计信息。
    最近在整理11g 的新特性,上面是网上搜的资料,还没有验证,楼主可以自己动手试试。  不过根据资料,hash 不能做为主分区。 
    ------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    Q Q 群:62697716 
      

  2.   

    3. More Composite Partitioning 
        在10g中,我们知道复合分区只支持Range-List和Range-Hash,而在在11g中复合分区的类型大大增加,现在Range,List,Interval都可以作为Top level分区,而Second level则可以是Range,List,Hash,也就是在11g中可以有3*3=9种复合分区,满足更多的业务需求。谢谢1楼给的答案,刚开始我用hash做top level 分区,搞了半天也不成,还以为11g分区这块还是以rang为主分区呢,又小白了,呵呵