夢(mèng)幻之旅

          DEBUG - 天道酬勤

             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評(píng)論 :: 0 Trackbacks
           

          本文出處:

          http://blog.csdn.net/tianlesoftware/archive/2009/10/23/4717318.aspx


                 Oracle提供了分區(qū)技術(shù)以支持VLDB(Very Large DataBase)分區(qū)表通過(guò)對(duì)分區(qū)列的判斷,把分區(qū)列不同的記錄,放到不同的分區(qū)中。分區(qū)完全對(duì)應(yīng)用透明。

                 Oracle的分區(qū)表可以包括多個(gè)分區(qū),每個(gè)分區(qū)都是一個(gè)獨(dú)立的段(SEGMENT),可以存放到不同的表空間中。查詢時(shí)可以通過(guò)查詢表來(lái)訪問(wèn)各個(gè)分區(qū)中的數(shù)據(jù),也可以通過(guò)在查詢時(shí)直接指定分區(qū)的方法來(lái)進(jìn)行查詢。

           

          When to Partition a Table什么時(shí)候需要分區(qū)表,官網(wǎng)的2個(gè)建議如下:

          1Tables greater than 2GB should always be considered for partitioning.

          2Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only.

           

          oracle 10g中最多支持:1024k-1個(gè)分區(qū):

                Tables can be partitioned into up to 1024K-1 separate partitions

           

          聯(lián)機(jī)文檔上有關(guān)分區(qū)表和索引的說(shuō)明:

                Partitioned Tables and Indexes

                 http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/partconc.htm#sthref2604

           

          分區(qū)提供以下優(yōu)點(diǎn):

                 1)由于將數(shù)據(jù)分散到各個(gè)分區(qū)中,減少了數(shù)據(jù)損壞的可能性;

                 2)可以對(duì)單獨(dú)的分區(qū)進(jìn)行備份和恢復(fù);

                 3)可以將分區(qū)映射到不同的物理磁盤上,來(lái)分散IO

                 4)提高可管理性、可用性和性能。

           

          Oracle 10g提供了以下幾種分區(qū)類型:

                 1)范圍分區(qū)(range);

                 2)哈希分區(qū)(hash);

                 3)列表分區(qū)(list);

                 4)范圍-哈希復(fù)合分區(qū)(range-hash);

                 5)范圍-列表復(fù)合分區(qū)(range-list)。

           

          Range分區(qū):

            Range分區(qū)是應(yīng)用范圍比較廣的表分區(qū)方式,它是以列的值的范圍來(lái)做為分區(qū)的劃分條件,將記錄存放到列值所在的range分區(qū)中。

                 如按照時(shí)間劃分,20101月的數(shù)據(jù)放到a分區(qū),2月的數(shù)據(jù)放到b分區(qū),在創(chuàng)建的時(shí)候,需要指定基于的列,以及分區(qū)的范圍值。

                 在按時(shí)間分區(qū)時(shí),如果某些記錄暫無(wú)法預(yù)測(cè)范圍,可以創(chuàng)建maxvalue分區(qū),所有不在指定范圍內(nèi)的記錄都會(huì)被存儲(chǔ)到maxvalue所在分區(qū)中。

           

          如:

          create table pdba (id number, time date) partition by range (time)

          (

          partition p1 values less than (to_date('2010-10-1', 'yyyy-mm-dd')),

          partition p2 values less than (to_date('2010-11-1', 'yyyy-mm-dd')),

          partition p3 values less than (to_date('2010-12-1', 'yyyy-mm-dd')),

          partition p4 values less than (maxvalue)

          )

           

          Hash分區(qū):

            對(duì)于那些無(wú)法有效劃分范圍的表,可以使用hash分區(qū),這樣對(duì)于提高性能還是會(huì)有一定的幫助。hash分區(qū)會(huì)將表中的數(shù)據(jù)平均分配到你指定的幾個(gè)分區(qū)中,列所在分區(qū)是依據(jù)分區(qū)列的hash值自動(dòng)分配,因此你并不能控制也不知道哪條記錄會(huì)被放到哪個(gè)分區(qū)中,hash分區(qū)也可以支持多個(gè)依賴列。

           

          如:

          create table test

          (

          transaction_id number primary key,

          item_id number(8) not null

          )

          partition by hash(transaction_id)

          (

          partition part_01 tablespace tablespace01,

          partition part_02 tablespace tablespace02,

          partition part_03 tablespace tablespace03

          );

          在這里,我們指定了每個(gè)分區(qū)的表空間。

           

          List分區(qū):

            List分區(qū)也需要指定列的值,其分區(qū)值必須明確指定,該分區(qū)列只能有一個(gè),不能像range或者hash分區(qū)那樣同時(shí)指定多個(gè)列做為分區(qū)依賴列,但它的單個(gè)分區(qū)對(duì)應(yīng)值可以是多個(gè)。

            在分區(qū)時(shí)必須確定分區(qū)列可能存在的值,一旦插入的列值不在分區(qū)范圍內(nèi),則插入/更新就會(huì)失敗,因此通常建議使用list分區(qū)時(shí),要?jiǎng)?chuàng)建一個(gè)default分區(qū)存儲(chǔ)那些不在指定范圍內(nèi)的記錄,類似range分區(qū)中的maxvalue分區(qū)。

           

          在根據(jù)某字段,如城市代碼分區(qū)時(shí),可以指定default,把非分區(qū)規(guī)則的數(shù)據(jù),全部放到這個(gè)default分區(qū)。

           

          如:

          create table custaddr
          (

            id                     varchar2(15 byte)   not null,

            areacode   varchar2(4 byte)
           )

          partition by list (areacode)
          ( partition t_list025 values ('025'),  
           partition t_list372 values ('372') , 
           partition t_list510 values ('510'), 

          partition p_other values (default)

          )

           

          組合分區(qū):

                 如果某表按照某列分區(qū)之后,仍然較大,或者是一些其它的需求,還可以通過(guò)分區(qū)內(nèi)再建子分區(qū)的方式將分區(qū)再分區(qū),即組合分區(qū)的方式。

            組合分區(qū)呢在10g中有兩種:range-hashrange-list。注意順序,根分區(qū)只能是range分區(qū),子分區(qū)可以是hash分區(qū)或list分區(qū)。

           

          如:

          create table test

          (

          transaction_id number primary key,

          transaction_date date

          )

          partition by range(transaction_date) subpartition by hash(transaction_id)

          subpartitions 3 store in (tablespace01,tablespace02,tablespace03)

          (

          partition part_01 values less than(to_date(’2009-01-01’,’yyyy-mm-dd’)),

          partition part_02 values less than(to_date(’2010-01-01’,’yyyy-mm-dd’)),

          partition part_03 values less than(maxvalue)

          );

           

          create table emp_sub_template (deptno number, empname varchar(32), grade number)  

               partition by range(deptno) subpartition by hash(empname)

               subpartition template

                   (subpartition a tablespace ts1,

                    subpartition b tablespace ts2,

                    subpartition c tablespace ts3,

                    subpartition d tablespace ts4

                   )

              (partition p1 values less than (1000),

               partition p2 values less than (2000),

               partition p3 values less than (maxvalue)

              );

           

           

          create table quarterly_regional_sales

                (deptno number, item_no varchar2(20),

                 txn_date date, txn_amount number, state varchar2(2))

            tablespace ts4

            partition by range (txn_date)

              subpartition by list (state)

                (partition q1_1999 values less than (to_date('1-apr-1999','dd-mon-yyyy'))

                   (subpartition q1_1999_northwest values ('or', 'wa'),

                    subpartition q1_1999_southwest values ('az', 'ut', 'nm'),

                    subpartition q1_1999_northeast values ('ny', 'vm', 'nj'),

                    subpartition q1_1999_southeast values ('fl', 'ga'),

                    subpartition q1_1999_northcentral values ('sd', 'wi'),

                    subpartition q1_1999_southcentral values ('ok', 'tx')

                   ),

                 partition q2_1999 values less than ( to_date('1-jul-1999','dd-mon-yyyy'))

                   (subpartition q2_1999_northwest values ('or', 'wa'),

                    subpartition q2_1999_southwest values ('az', 'ut', 'nm'),

                    subpartition q2_1999_northeast values ('ny', 'vm', 'nj'),

                    subpartition q2_1999_southeast values ('fl', 'ga'),

                    subpartition q2_1999_northcentral values ('sd', 'wi'),

                    subpartition q2_1999_southcentral values ('ok', 'tx')

                   ),

                 partition q3_1999 values less than (to_date('1-oct-1999','dd-mon-yyyy'))

                   (subpartition q3_1999_northwest values ('or', 'wa'),

                    subpartition q3_1999_southwest values ('az', 'ut', 'nm'),

                    subpartition q3_1999_northeast values ('ny', 'vm', 'nj'),

                    subpartition q3_1999_southeast values ('fl', 'ga'),

                    subpartition q3_1999_northcentral values ('sd', 'wi'),

                    subpartition q3_1999_southcentral values ('ok', 'tx')

                   ),

                 partition q4_1999 values less than ( to_date('1-jan-2000','dd-mon-yyyy'))

                   (subpartition q4_1999_northwest values ('or', 'wa'),

                    subpartition q4_1999_southwest values ('az', 'ut', 'nm'),

                    subpartition q4_1999_northeast values ('ny', 'vm', 'nj'),

                    subpartition q4_1999_southeast values ('fl', 'ga'),

                    subpartition q4_1999_northcentral values ('sd', 'wi'),

                    subpartition q4_1999_southcentral values ('ok', 'tx')

                   )

                );

           

           

                 Oracle 11g中,組合分區(qū)功能這塊有所增強(qiáng),又增加了range-range,list-range,

          list-list,list-hash,并且 11g里面還支持Interval分區(qū)和虛擬列分區(qū)。

          posted on 2012-07-22 00:53 HUIKK 閱讀(315) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 调兵山市| 牟定县| 萝北县| 余江县| 阳曲县| 潜江市| 行唐县| 白山市| 深圳市| 墨脱县| 延庆县| 沿河| 游戏| 旬阳县| 盐池县| 禄丰县| 河池市| 巩义市| 浦江县| 舒城县| 邯郸市| 三原县| 宁强县| 即墨市| 南投县| 北海市| 朝阳市| 广南县| 黑山县| 宜章县| 清远市| 陵川县| 中西区| 佛坪县| 克拉玛依市| 交口县| 白山市| 克什克腾旗| 雷山县| 赞皇县| 永德县|