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

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

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

     

    Oracle表分區

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

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

    現在我們來建立一個[范圍分區]
    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的分區當中,part1分區將被存儲在Part1_tb表空間中
    其他的就放在part2中 MAXVALUE是oracle的關鍵字 表示最大值

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

    [子分區]即是分區的分區
    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
    );

    [列表分區]告訴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
    );

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

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

     

     

     

     

     

     

     


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

    1.區間分區:
    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.散列分區
    create table range_example
    (
    range_column number,
    sj date
    )
    PARTITION BY HASH(range_column)
    (
    PARTITION part_1,
    PARTITION part_2
    );
    使用散列分區你無法控制一行放在哪個分區中,如果改變散列分區的個數,所有的數據都將在分區中重新分布.

    3.列表分區
    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.組合分區
    組合分區是區間分區和散列分區的組合或區間分區和列表分區的組合,
    頂層分區總是區間分區,第二層分區可能是列表分區或散列分區
    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)
    )
    )

     

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

    交換表中的數據
           alter table tab2 exchange partiiton p1
           with table tab1



    二,-------------------------------------------------------------
    -- Create table(創建分區表)
    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;
     
    --增加分區表
     
    alter table BILL_MONTHFEE_ZERO add Partition p_200409
    values less than (200409) tablespace ts_ziken;

    --刪除一分區
    alter table part_tbl drop Partition part_tbl_08;
     
    --將一個分區分為兩個分區
    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);
     
    --合并分區
    ALTER TABLE bill_monthfee_zero
       MERGE PARTITIONS p_200408, p_200409 INTO PARTITION p_all
     
    --將分區改名
    alter table bill_monthfee_zero rename Partition p_200408 to p_fee_200408
     
    --將分區改表空間
    alter table bill_monthfee_zero move Partition p_200409
    tablespace ts_ziken_01 nologging
     
    --查詢特定分區
    select count(*) from BILL_MONTHFEE_ZERO partition (p_200407);
     
    --添加數據
    insert into bill_monthfee_zero select * from bill_monthfee_zero partition (p_200407)
     
    --分區表的導出
    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:
    交換分區是將一個分區的數據和一個非分區的表數據進行數據交換。條件是兩者邏輯結構相同,而且表數據的數據不能超出分區主鍵的范圍,否則:
    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)  編輯  收藏

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


    網站導航:
     

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本永久免费a∨在线视频| 亚洲视频在线不卡| 又爽又高潮的BB视频免费看| 女人被男人躁的女爽免费视频| 无码中文字幕av免费放| 四虎在线视频免费观看视频| 亚欧人成精品免费观看| 99久久久国产精品免费无卡顿| 亚洲一区二区三区免费在线观看| 国产电影午夜成年免费视频| 国产91色综合久久免费| 日本阿v免费费视频完整版| 99热在线精品免费全部my| 黄页网站在线看免费| 国产一精品一AV一免费孕妇| 精品剧情v国产在免费线观看 | 高h视频在线免费观看| 久久亚洲色WWW成人欧美| 日本免费精品一区二区三区| 一级成人a做片免费| 成人片黄网站色大片免费观看cn| 中国在线观看免费的www| 国产精品99精品久久免费| 日本免费人成视频在线观看| 91精品免费久久久久久久久| 最近的中文字幕大全免费版| 男女啪啪永久免费观看网站| 亚洲国产成人久久一区WWW| 亚洲综合无码AV一区二区| 亚洲av鲁丝一区二区三区| 亚洲国产成人久久99精品| 亚洲国产AV一区二区三区四区| 国产精品亚洲综合一区在线观看| eeuss草民免费| 久久免费的精品国产V∧| 性色av免费观看| 久久精品国产精品亚洲艾草网美妙| 亚洲国产香蕉碰碰人人| 亚洲成人激情小说| sihu国产精品永久免费| 美女内射无套日韩免费播放|