IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫Oracle → Oracle數(shù)據(jù)庫分區(qū)表操作方法

Oracle數(shù)據(jù)庫分區(qū)表操作方法

時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

  在大型的企業(yè)應(yīng)用或企業(yè)級的數(shù)據(jù)庫應(yīng)用中,要處理的數(shù)據(jù)量通??梢赃_(dá)到幾十到幾百GB,有的甚至可以到TB級。雖然存儲介質(zhì)和數(shù)據(jù)處理技術(shù)的發(fā)展也很快,但是仍然不能滿足用戶的需求,為了使用戶的大量的數(shù)據(jù)在讀寫操作和查詢中速度更快,Oracle提供了對表和索引進(jìn)行分區(qū)的技術(shù),以改善大型應(yīng)用系統(tǒng)的性能。

  使用分區(qū)的優(yōu)點(diǎn):

  ·增強(qiáng)可用性:如果表的某個(gè)分區(qū)出現(xiàn)故障,表在其他分區(qū)的數(shù)據(jù)仍然可用;

  ·維護(hù)方便:如果表的某個(gè)分區(qū)出現(xiàn)故障,需要修復(fù)數(shù)據(jù),只修復(fù)該分區(qū)即可;

  ·均衡I/O:可以把不同的分區(qū)映射到磁盤以平衡I/O,改善整個(gè)系統(tǒng)性能;

  ·改善查詢性能:對分區(qū)對象的查詢可以僅搜索自己關(guān)心的分區(qū),提高檢索速度。

  Oracle數(shù)據(jù)庫提供對表或索引的分區(qū)方法有三種:

  ·范圍分區(qū)

  ·Hash分區(qū)(散列分區(qū))

  ·復(fù)合分區(qū)

  下面將以實(shí)例的方式分別對這三種分區(qū)方法來說明分區(qū)表的使用。為了測試方便,我們先建三個(gè)表空間。

  以下為引用的內(nèi)容:

  create tablespace dinya_space01

  datafile ’/test/demo/oracle/demodata/dinya01.dnf’ size 50M

  create tablespace dinya_space01

  datafile ’/test/demo/oracle/demodata/dinya02.dnf’ size 50M

  create tablespace dinya_space01

  datafile ’/test/demo/oracle/demodata/dinya03.dnf’ size 50M

  1.1. 分區(qū)表的創(chuàng)建

  1.1.1. 范圍分區(qū)

  范圍分區(qū)就是對數(shù)據(jù)表中的某個(gè)值的范圍進(jìn)行分區(qū),根據(jù)某個(gè)值的范圍,決定將該數(shù)據(jù)存儲在哪個(gè)分區(qū)上。如根據(jù)序號分區(qū),根據(jù)業(yè)務(wù)記錄的創(chuàng)建日期進(jìn)行分區(qū)等。

  需求描述:有一個(gè)物料交易表,表名:material_transactions。該表將來可能有千萬級的數(shù)據(jù)記錄數(shù)。要求在建該表的時(shí)候使用分區(qū)表。這時(shí)候我們可以使用序號分區(qū)三個(gè)區(qū),每個(gè)區(qū)中預(yù)計(jì)存儲三千萬的數(shù)據(jù),也可以使用日期分區(qū),如每五年的數(shù)據(jù)存儲在一個(gè)分區(qū)上。

  根據(jù)交易記錄的序號分區(qū)建表: 以下為引用的內(nèi)容:

  SQL> create table dinya_test

  2 (

  3 transaction_id number primary key,

  4 item_id number(8) not null,

  5 item_description varchar2(300),

  6 transaction_date date not null

  7 )

  8 partition by range (transaction_id)

  9 (

  10 partition part_01 values less than(30000000) tablespace dinya_space01,

  11 partition part_02 values less than(60000000) tablespace dinya_space02,

  12 partition part_03 values less than(maxvalue) tablespace dinya_space03

  13 );

  Table created.

  建表成功,根據(jù)交易的序號,交易ID在三千萬以下的記錄將存儲在第一個(gè)表空間dinya_space01中,分區(qū)名為:par_01,在三千萬到六千萬之間的記錄存儲在第二個(gè)表空間:

  dinya_space02中,分區(qū)名為:par_02,而交易ID在六千萬以上的記錄存儲在第三個(gè)表空間dinya_space03中,分區(qū)名為par_03.

  根據(jù)交易日期分區(qū)建表:

  以下為引用的內(nèi)容:

  SQL> create table dinya_test

  2 (

  3 transaction_id number primary key,

  4 item_id number(8) not null,

  5 item_description varchar2(300),

  6 transaction_date date not null

  7 )

  8 partition by range (transaction_date)

  9 (

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

  tablespace dinya_space01,

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

  tablespace dinya_space02,

  12 partition part_03 values less than(maxvalue) tablespace dinya_space03

  13 );

  Table created.

  這樣我們就分別建了以交易序號和交易日期來分區(qū)的分區(qū)表。每次插入數(shù)據(jù)的時(shí)候,系統(tǒng)將根據(jù)指定的字段的值來自動將記錄存儲到制定的分區(qū)(表空間)中。

  當(dāng)然,我們還可以根據(jù)需求,使用兩個(gè)字段的范圍分布來分區(qū),如partition

  by range ( transaction_id ,transaction_date),

  分區(qū)條件中的值也做相應(yīng)的改變,請讀者自行測試。

#p#副標(biāo)題#e#

  1.1.2. Hash分區(qū)(散列分區(qū))

  散列分區(qū)為通過指定分區(qū)編號來均勻分布數(shù)據(jù)的一種分區(qū)類型,因?yàn)橥ㄟ^在I/O設(shè)備上進(jìn)行散列分區(qū),使得這些分區(qū)大小一致。如將物料交易表的數(shù)據(jù)根據(jù)交易ID散列地存放在指定的三個(gè)表空間中:

  以下為引用的內(nèi)容:

  SQL> create table dinya_test

  2 (

  3 transaction_id number primary key,

  4 item_id number(8) not null,

  5 item_description varchar2(300),

  6 transaction_date date

  7 )

  8 partition by hash(transaction_id)

  9 (

  10 partition part_01 tablespace dinya_space01,

  11 partition part_02 tablespace dinya_space02,

  12 partition part_03 tablespace dinya_space03

  13 );

  Table created.

  建表成功,此時(shí)插入數(shù)據(jù),系統(tǒng)將按transaction_id將記錄散列地插入三個(gè)分區(qū)中,這里也就是三個(gè)不同的表空間中。

  1.1.3. 復(fù)合分區(qū)

  有時(shí)候我們需要根據(jù)范圍分區(qū)后,每個(gè)分區(qū)內(nèi)的數(shù)據(jù)再散列地分布在幾個(gè)表空間中,這樣我們就要使用復(fù)合分區(qū)。復(fù)合分區(qū)是先使用范圍分區(qū),然后在每個(gè)分區(qū)內(nèi)再使用散列分區(qū)的一種分區(qū)方法,如將物料交易的記錄按時(shí)間分區(qū),然后每個(gè)分區(qū)中的數(shù)據(jù)分三個(gè)子分區(qū),將數(shù)據(jù)散列地存儲在三個(gè)指定的表空間中:

  以下為引用的內(nèi)容:

  SQL> create table dinya_test

  2 (

  3 transaction_id number primary key,

  4 item_id number(8) not null,

  5 item_description varchar2(300),

  6 transaction_date date

  7 )

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

  9 subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)

  10 (

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

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

  13 partition part_03 values less than(maxvalue)

  14 );

  Table created.

  該例中,先是根據(jù)交易日期進(jìn)行范圍分區(qū),然后根據(jù)交易的ID將記錄散列地存儲在三個(gè)表空間中。

  1.2. 分區(qū)表操作

  以上了解了三種分區(qū)表的建表方法,下面將使用實(shí)際的數(shù)據(jù)并針對按日期的范圍分區(qū)來測試分區(qū)表的數(shù)據(jù)記錄的操作。

  1.2.1. 插入記錄:

  以下為引用的內(nèi)容:

  SQL> insert into dinya_test values(1,12,’BOOKS’,sysdate);

  1 row created.

  SQL> insert into dinya_test values(2,12, ’BOOKS’,sysdate+30);

  1 row created.

  SQL> insert into dinya_test values(3,12, ’BOOKS’,to_date(’2006-05-30’,’yyyy-mm-dd’));

  1 row created.

  SQL> insert into dinya_test values(4,12, ’BOOKS’,to_date(’2007-06-23’,’yyyy-mm-dd’));

  1 row created.

  SQL> insert into dinya_test values(5,12, ’BOOKS’,to_date(’2011-02-26’,’yyyy-mm-dd’));

  1 row created.

  SQL> insert into dinya_test values(6,12, ’BOOKS’,to_date(’2011-04-30’,’yyyy-mm-dd’));

  1 row created.

  SQL> commit;

  Commit complete.

  SQL>

  按上面的建表結(jié)果,2006年前的數(shù)據(jù)將存儲在第一個(gè)分區(qū)part_01上,而2006年到2010年的交易數(shù)據(jù)將存儲在第二個(gè)分區(qū)part_02上,2010年以后的記錄存儲在第三個(gè)分區(qū)part_03上。

  1.2.2. 查詢分區(qū)表記錄: 以下為引用的內(nèi)容:

  SQL> select * from dinya_test partition(part_01);

  TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE

  --------------------------------------------------------------------------------

  1 12 BOOKS 2005-1-14 14:19:

  2 12 BOOKS 2005-2-13 14:19:

  SQL>

  SQL> select * from dinya_test partition(part_02);

  TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE

  ----------------------------------------------

關(guān)鍵詞標(biāo)簽:Oracle,數(shù)據(jù)庫,分區(qū)表

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實(shí)例的控制文件 誤刪Oracle數(shù)據(jù)庫實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索 為UNIX服務(wù)器設(shè)置Oracle全文檢索

相關(guān)下載

    人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法