<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

     

    Oracle表分區(qū)

    自從oracle8i 開始可以把一個表分割為多個小的部分,這樣可以對oracle的性能優(yōu)化帶來很大的好處~
    例如:改善表的查詢性能,更加容易管理表數(shù)據(jù),備份和恢復(fù)操作更方便

    在oracle 中分區(qū)表 分為好幾種的(范圍分區(qū),散列分區(qū),子分區(qū),列表分區(qū),索引分區(qū))下面我們來慢慢介紹

    現(xiàn)在我們來建立一個[范圍分區(qū)]
    create table RangeTable(
    id int primary key,
    name varchar(20),
    grade int
    )
    partition by rang(grade)
    (
    partition part1 values less then(50) tablespace Part1_tb,
    partition part2 values less then(MAXVALUE) tablespace Part2_tb
    );
    如果grade的值小于50的話 就把記錄放到名為part1的分區(qū)當(dāng)中,part1分區(qū)將被存儲在Part1_tb表空間中
    其他的就放在part2中 MAXVALUE是oracle的關(guān)鍵字 表示最大值

    [散列分區(qū)]
    create table HashTable(
    id int primary key,
    name varchar(20),
    grade int
    )
    /*有兩種方式,1就是指定分區(qū)數(shù)目和所使用的表空間,2指定以命名的分區(qū)*/
    partition by hash(grade)
    partitions 10 -- 指定分區(qū)的數(shù)目
    store in(Part1_tb,Part2_tb,Part3_tb) --如果指定的分區(qū)數(shù)目比表空間多,分區(qū)會以循環(huán)方式分配到表空間
    /*------------------------------------*/
    partition by rang(grade)--這種方式就是 指定以命名的分區(qū)
    (
    partition part1 tablespace Part1_tb,
    partition part2 tablespace Part2_tb
    );

    [子分區(qū)]即是分區(qū)的分區(qū)
    create table ChildTable(
    id int primary key,
    name varchar(20),
    grade int
    )
    partition by rang(grade)
    subpartition by hash(grade)
    partitions 5
    (
    partition part1 values less then(30) tablespace Part1_tb,
    partition part2 values less then(60) tablespace Part2_tb,
    partition part3 values less then(MAXVALUE) tablespace Part3_tb
    );

    [列表分區(qū)]告訴oracle所有可能的值
    create table ListTable(
    id int primary key,
    name varchar(20),
    area varchar(10)
    )
    partition by list(area)
    (
    partition part1 values('guangdong','beijing') tablespace Part1_tb,
    partition part2 values('shanghai','nanjing') tablespace Part2_tb
    );

    [索引分區(qū)]索引也可以按照和表進(jìn)行分區(qū)時使用的相同的值范圍來分區(qū)
    create index IndexTable_index
    on IndexTable(name)
    local
    (
    partition part1 tablespace Part1_tb,
    partition part2 tablespace Part2_tb
    )
    --local 告訴oracle表 IndexTable的每一個分區(qū)建立一個獨立的索引
    create index IndexTable_index
    on IndexTable(name)
    global;
    --global為全局索引 全局索引可以包含多個分區(qū)的值 局部索引比全局索引容易管理,而全局索引比較快
    注意:不能為散列分區(qū) 或者 子分區(qū)創(chuàng)建全局索引

    查詢某一個表分區(qū)
    select * from table partition(part1);

     

     

     

     

     

     

     


    oracle表分區(qū)主要是為了容易管理和性能方面考慮,有四種分區(qū)方法:

    1.區(qū)間分區(qū):
    create table range_example
    (
    range_column number,
    sj date
    )
    PARTITION BY RANGE(range_column)
    (
    PARTITION part_1 VALUE LESS THAN(18),
    PARTITION part_2 VALUE LESS THAN(40),
    PARTITION part_3 VALUE LESS THAN(120)
    )
    ;

    2.散列分區(qū)
    create table range_example
    (
    range_column number,
    sj date
    )
    PARTITION BY HASH(range_column)
    (
    PARTITION part_1,
    PARTITION part_2
    );
    使用散列分區(qū)你無法控制一行放在哪個分區(qū)中,如果改變散列分區(qū)的個數(shù),所有的數(shù)據(jù)都將在分區(qū)中重新分布.

    3.列表分區(qū)
    create table range_example
    (
    range_column number,
    sj date
    )
    PARTITION BY LIST(range_column)
    (
    PARTITION part_1 VALUES(1,2,3),
    PARTITION part_2 VALUES(4,5,6),
    PARTITION part_2 VALUES(default)
    );

    4.組合分區(qū)
    組合分區(qū)是區(qū)間分區(qū)和散列分區(qū)的組合或區(qū)間分區(qū)和列表分區(qū)的組合,
    頂層分區(qū)總是區(qū)間分區(qū),第二層分區(qū)可能是列表分區(qū)或散列分區(qū)
    create table range_example
    (
    range_column number,
    id varchar2(2),
    sj date
    )
    PARTITION BY RANGE(range_column)
    SUBPARTITION BY LIST(id)
    (
    PARTITION part_1 VALUES LESS THAN(18)
    (
    SUBPARTITOIN part_sub_1 VALUES('A','B','C'),
    SUBPARTITOIN part_sub_2 VALUES('D','E','F')
    )
    PARTIRION part_2 VALUES LESS THAN(40)
    (
    SUBPARTITION part_sub_3 VALUES('AA','BB','CC'),
    SUBPARTITION part_sub_4 VALUES('DD','EE','FF')
    )
    PARTITION part_3 VALUES LESS THAN(120)
    (
    SUBPARTITION part_sub_5 VALUES(default)
    )
    )

     

    分區(qū)維護(hù)
          移動分區(qū) alter table goods move partition p1 tablespace system;
          刪除分區(qū) alter table goods drop partition p1;
          添加分區(qū) alter table goods add partition p1 values
                   less than(to_date('1999-08=01','YYYY-MM-DD'));
          結(jié)合分區(qū)(只能用于散列方法分區(qū))
                   alter table goods coalesce partition;
          截斷分區(qū) alter table goods truncate partition p3;
          拆分分區(qū) alter table goods split partiiton p2
                   at(to_date('1999-12-12','yyyy-mm-dd'))
                   into(partiiton p4,partiiton p5);
          合并分區(qū) alter table goods merge partitions p4,p5 into parititon                p6

    交換表中的數(shù)據(jù)
           alter table tab2 exchange partiiton p1
           with table tab1



    二,-------------------------------------------------------------
    -- Create table(創(chuàng)建分區(qū)表)
    create table BILL_MONTHFEE_ZERO
    (
      SERV_ID             NUMBER(20) not null,
      BILLING_CYCLE_MONTH NUMBER(6) not null,
      DATE_TYPE           NUMBER(1),
      ACC_NBR             VARCHAR2(80)
    )
     partition by range (BILLING_CYCLE_MONTH)
      (partition p_200407 values less than (200407)
        tablespace TS_ZIKEN
          storage(initial 100k next 100k minextents 1 maxextents unlimited pctincrease 0),
       partition p_200408 values less than (200408)
        tablespace TS_ZIKEN
          storage(initial 100k next 100k minextents 1 maxextents unlimited pctincrease 0))
          ;
    create index idx_bill_monthfee_zero_idx01 on bill_monthfee_zero(billing_cycle_month)
    tablespace TS_ZIKEN_idx
    storage(initial 100k next 100k minextents 1 maxextents unlimited pctincrease 0) nologging;
    grant all on bill_monthfee_zero to dxsq_dev;
     
    --增加分區(qū)表
     
    alter table BILL_MONTHFEE_ZERO add Partition p_200409
    values less than (200409) tablespace ts_ziken;

    --刪除一分區(qū)
    alter table part_tbl drop Partition part_tbl_08;
     
    --將一個分區(qū)分為兩個分區(qū)
    alter table bill_monthfee_zero split Partition p_200409 at (200409)
    into (Partition p_200409_1 tablespace ts_ziken,
    Partition p_200409_2 tablespace ts_ziken_idx);
     
    --合并分區(qū)
    ALTER TABLE bill_monthfee_zero
       MERGE PARTITIONS p_200408, p_200409 INTO PARTITION p_all
     
    --將分區(qū)改名
    alter table bill_monthfee_zero rename Partition p_200408 to p_fee_200408
     
    --將分區(qū)改表空間
    alter table bill_monthfee_zero move Partition p_200409
    tablespace ts_ziken_01 nologging
     
    --查詢特定分區(qū)
    select count(*) from BILL_MONTHFEE_ZERO partition (p_200407);
     
    --添加數(shù)據(jù)
    insert into bill_monthfee_zero select * from bill_monthfee_zero partition (p_200407)
     
    --分區(qū)表的導(dǎo)出
    userid=dxsq/teledoone@jndxsq154
    buffer=102400
    tables=bill_monthfee:P_200401,
    file=E:\exp_para\exp_dxsq_tables.dmp
    log=E:\exp_para\exp_dxsq_tables.log
     
    --exchange partition:
    交換分區(qū)是將一個分區(qū)的數(shù)據(jù)和一個非分區(qū)的表數(shù)據(jù)進(jìn)行數(shù)據(jù)交換。條件是兩者邏輯結(jié)構(gòu)相同,而且表數(shù)據(jù)的數(shù)據(jù)不能超出分區(qū)主鍵的范圍,否則:
    SQL> alter table baisadmin.t_name exchange partition p5 with table baisadmin.t_n
    ame_check_reg;
    alter table baisadmin.t_name exchange partition p5 with table baisadmin.t_name_bak
     
     
    技巧:
    刪除表中一個字段:
    alter table bill_monthfee_zero set unused column date_type;
    添加一個字段:alter table bill_monthfee_zero add date_type number(1);
    posted on 2009-12-02 11:48 sanmao 閱讀(216) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一区二区三区高清| 国产亚洲精品美女2020久久| 18禁超污无遮挡无码免费网站国产| 亚洲精品国产精品| 不卡精品国产_亚洲人成在线| 日韩在线永久免费播放| 亚洲精品无码不卡在线播放| 亚洲精品无码成人片在线观看| 久久久久久国产精品免费免费男同| 中文有码亚洲制服av片| 国外亚洲成AV人片在线观看| 亚洲视频免费观看| 成年网在线观看免费观看网址| 亚洲欧洲日韩国产综合在线二区| 日本高清免费aaaaa大片视频| a毛片免费在线观看| 亚洲欧美日韩中文字幕一区二区三区| 亚洲人成中文字幕在线观看| 免费无码肉片在线观看| 中文字幕免费在线观看动作大片 | 亚洲女人18毛片水真多| 一本久久综合亚洲鲁鲁五月天 | 99热在线免费观看| 菠萝菠萝蜜在线免费视频| 亚洲经典在线中文字幕| 亚洲午夜精品第一区二区8050| 免费观看AV片在线播放| 日本道免费精品一区二区| 亚洲av乱码中文一区二区三区| 亚洲一级二级三级不卡| 亚洲综合区小说区激情区| 免费的涩涩视频在线播放| 久久久久久精品免费免费自慰| www在线观看免费视频| 亚洲国产精品无码久久九九大片 | 特级做A爰片毛片免费看无码| 亚洲国产精品无码第一区二区三区 | 72pao国产成视频永久免费| 色播亚洲视频在线观看| 久久亚洲国产精品五月天婷| 成人爱做日本视频免费|