oracle怎么續(xù)表分區(qū),oracle分區(qū)表增加分區(qū)

如何管理oracle 的分區(qū)表和索引(續(xù)

一、創(chuàng)建分區(qū)表

站在用戶的角度思考問題,與客戶深入溝通,找到錫山網(wǎng)站設(shè)計與錫山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、網(wǎng)站空間、企業(yè)郵箱。業(yè)務覆蓋錫山地區(qū)。

1、范圍分區(qū)

根據(jù)數(shù)據(jù)表字段值的范圍進行分區(qū)

舉個例子,根據(jù)學生的不同分數(shù)對分數(shù)表進行分區(qū),創(chuàng)建一個分區(qū)表如下:create table range_fraction(

id number(8),

name varchar2(20),

fraction number(3),

grade number(2)

)

partition by range(fraction)

(

partition fraction_60 values less than(60), --不及格partition fraction_80 values less than(85), --及格partition fraction_100 values less than(maxvalue) --優(yōu)秀)創(chuàng)建完分區(qū)表后向表中添加一些數(shù)據(jù):declarename varchar2(10);

fraction number(5);

grade number(5);

i number(8):=1;

begin

for i in 1..100000 LOOP

SELECT CHR (ROUND (DBMS_RANDOM.VALUE (97, 122))) INTO NAME FROM DUAL;SELECT ABS(MOD(DBMS_RANDOM.RANDOM,101)) into fraction FROM DUAL;SELECT ABS(MOD(DBMS_RANDOM.RANDOM,10))+1 into grade FROM DUAL;insert into range_fraction values(seq_range_fraction.nextval ,name,fraction,grade);END LOOP;end;

查詢分區(qū)表:--分別查詢所有的,不及格的,中等的,優(yōu)秀的成績select * from range_fraction;select * from range_fraction partition(fraction_60) ;select * from range_fraction partition(fraction_80) ;select * from range_fraction partition(fraction_100) ;當我們的查詢語句不指定分區(qū)的時候,如果分區(qū)字段出現(xiàn)在where條件之后,Oracle會自動根據(jù)字段值的范圍掃描響應的分區(qū):

select * from range_fraction where fraction30; 這句SQL執(zhí)行的時候只會掃描不及格的分區(qū)select * from range_fraction where fraction80; 這句SQL執(zhí)行的時候會掃描不及格和中等兩個分區(qū)2、散列分區(qū)在范圍分區(qū)中,分區(qū)字段的連續(xù)值通常出現(xiàn)在一個分區(qū)內(nèi),而在散列分區(qū)中,連續(xù)的字段值不一定存儲在相同的分區(qū)中。散列分區(qū)把記錄分布在比范圍分區(qū)更多的分區(qū)上,這減少了I/O爭用的可能性。

為了創(chuàng)建一個散列分區(qū),應該用partition by hash語句代替partition by range子句,如下所示:

第一種為各個分區(qū)指定不同的表空間,表空間數(shù)量不用等于分區(qū)數(shù)量,當表空間數(shù)量大于分區(qū)數(shù)量的時候會循環(huán)寫入各個表空間:

create table range_fraction1

(

id number(8),

name varchar2(20),

fraction number(3),

grade number(2)

)

partition by hash(fraction)

partitions 8

store in (users,tbs_haicheng)

第二種為每個分區(qū)指定一個分區(qū)名稱并為其指定表空間:create table range_fraction1(

id number(8),

name varchar2(20),

fraction number(3),

grade number(1)

)

partition by hash(fraction)

(

partition p1 tablespace tbs_haicheng ,

partition p2 tablespace users

);

3、列表分區(qū)

還可以使用列表分區(qū)代替范圍分區(qū)和散列分區(qū)。在列表分區(qū)中,告訴Oracle所有可能的值,并指定應當插入相應行的分區(qū)。

我們將1、2、3、4班級的數(shù)據(jù)放在一個分區(qū),將6、7、8的數(shù)據(jù)放在一個分區(qū),將其他的再放在一個分區(qū),建表如下:

create table range_fraction1

(

id number(8),

name varchar2(20),

fraction number(3),

grade number(2)

)

partition by list(grade)

(

partition p1 values(1,2,3,4) tablespace tbs_haicheng ,partition p2 values(5,6,7,8) tablespace users,?

1

partition p3 values(default)

4、組合分區(qū)(創(chuàng)建子分區(qū))

即分區(qū)的分區(qū)。例如可以先進行范圍分區(qū),再對各個范圍分區(qū)創(chuàng)建列表分區(qū)。

對于非常大的表來說,這種組合分區(qū)是一種把數(shù)據(jù)分成可管理和可調(diào)整的組成部分的有效方法。

舉個例子:按照分數(shù)范圍分區(qū)后再將ID散列分區(qū):

create table range_fraction1

(

id number(8),

name varchar2(20),

fraction number(3),

grade number(1)

)

partition by range(fraction)

subpartition by hash(id)

subpartitions 4

(

partition fraction_60 values less than(60), --不及格partition fraction_80 values less than(85), --及格partition fraction_100 values less than(maxvalue) --優(yōu)秀)二、索引分區(qū)

在分區(qū)表上可以建立三種類型的索引:1和普通表一樣的全局索引;2.全局分區(qū)索引;3.本地分區(qū)索引1.建立普通的索引create index index_fraction on range_fraction(fraction);2.建立本地分區(qū)索引(就是一個索引分區(qū)只能對應一個表分區(qū))?

create index local_index_fraction on range_fraction(fraction) local;3.建立全局分區(qū)索引(屬于散列索引分區(qū),就是一個索引分區(qū)可能指向多個表分區(qū))?

create index global_index_fraction on range_fraction(fraction)GLOBAL partition by range(fraction)(

part_01 values less than(1000),

part_02 values less than(MAXVALUE)

);

三、管理分區(qū)表

1、增加分區(qū)

對于范圍分區(qū)來說,添加一個分區(qū),必須該分區(qū)劃定的界限高于原來的最大界限,也就是說只能往上加,不能往下加。那么對于用maxvalue關(guān)鍵字創(chuàng)建的范圍分區(qū)就不能增加分區(qū)了舉例:

create table range_fraction

(

id number(8),

name varchar2(20),

fraction number(3),

grade number(2)

)

partition by range(fraction)

(

partition fraction_60 values less than(40), --不及格partition fraction_80 values less than(60), --及格partition fraction_100 values less than(80) --優(yōu)秀)對于該分區(qū)我們增加一個分區(qū):

ALTER TABLE range_fraction ADD PARTITION fraction_100 VALUES LESS THAN (100);為列表分區(qū)添加一個分區(qū):

create table range_fraction

(

id number(8),

name varchar2(20),

fraction number(3),

grade number(2)

)

partition by list(grade)

(

partition p1 values(1,2,3) tablespace tbs_haicheng ,partition p2 values(4,5,6) tablespace users);ALTER TABLE range_fraction ADD partition p3 VALUES (7,8);我們再為p3分區(qū)新增兩個表分區(qū)值:

ALTER TABLE range_fraction MODIFY PARTITION p3 ADD VALUES(9,10);然后再將p3分區(qū)的表分區(qū)值中的10刪掉:

ALTER TABLE range_fraction MODIFY PARTITION p3 DROP VALUES(10);為哈希分區(qū)添加一個子分區(qū):

ALTER TABLE TABLENAME ADD PARTITION PARTNAME;添加一個子分區(qū)的格式:

ALTER TABLE TABLENAME MODIFY PARTITION PARTNAME ADD SUBPARTITION SUBPARTNAME;2、刪除分區(qū)刪除分區(qū)比較簡單,格式如下:

ALTER TABLE ... DROP PARTITION part_name;3、分區(qū)合并合并父分區(qū)格式:ALTER TABLE TABLENAME MERGE PARTITIONS p1-1, p1-2 INTO PARTITION p1 UPDATE INDEXES;如果省略了UPDATE INDEXES 的話需要為受影響的分區(qū)重建索引合并子分區(qū)的格式:

ALTER TABLE TABLENAME

MERGE SUBPARTITIONS part_1_sub_2, part_1_sub_3 INTO SUBPARTITION part_1_sub_2 UPDATE INDEXES;4、轉(zhuǎn)換分區(qū)可以將分區(qū)表轉(zhuǎn)換成非分區(qū)表,或者幾種不同分區(qū)表之間的轉(zhuǎn)換。如下:

CREATE TABLE hash_part02 AS SELECT * FROMhash_example WHERE 1=2;ALTER TABLE hash_example EXCHANGE PARTITIONpart02 WITH TABLE hash_part02;這時,分區(qū)表hash_example中的part02分區(qū)的資料將被轉(zhuǎn)移到hash_part02這個非分區(qū)表中。

Oracle分區(qū)表怎么建唯

1、一般分區(qū)表都會很大,所以可以先創(chuàng)建表空間,為了讓分區(qū)表存放到單獨的表空間,否則默認會存放到USERS表空間

2、創(chuàng)建TABLESPACE TS1:

CREATE TABLESPACE TS1 DATAFILE '/data1/oracle/test.dbf' SIZE 512M AUTOEXTEND ON NEXT 512M MAXSIZE UNLIMITED;

3、創(chuàng)建分區(qū)表,需要確定按什么分區(qū),比如按id或按時間段:

CREATE TABLE test_201602

(

ID NUMBER(10) NOT NULL,

CREATE_TIME DATE,

)

TABLESPACE TS1

PARTITION BY LIST (ID)

(PARTITION PT_1001 VALUES (1001) TABLESPACE TS1);

4、繼續(xù)增加分區(qū)

ALTER TABLE test_201602 ADD PARTITION "PT_1003" VALUES (1003) LOGGING NOCOMPRESS;

ALTER TABLE test_201602 ADD PARTITION "PT_1004" VALUES (1004) LOGGING NOCOMPRESS;

5、查詢表及分區(qū)數(shù)量

select TABLE_NAME,PARTITION_COUNT,DEF_TABLESPACE_NAME from USER_PART_TABLES order by DEF_TABLESPACE_NAME;

oracle對已建的表分了區(qū)后,再想增加分區(qū)可以嗎

可以的,比如有分區(qū)表如下:

create?table?test

(

msg_id??????VARCHAR2(16),

result??????INTEGER,

ts??????????VARCHAR2(17),

ts_time?????TIMESTAMP(6),

insert_time?DATE)

partition?by?range?(TS_TIME)

(

partition?P20180110?values?less?than?(TIMESTAMP'?2018-01-11?00:00:00')

tablespace?USERS

pctfree?10

initrans?1

maxtrans?255

storage

(

initial?64K??????next?1M

minextents?1

maxextents?unlimited

)

);

如果想增加分區(qū):

alter?table?test?add??partition?P20180112?values?less?than?(to_date('20180113?00:00:00','yyyymmdd?hh24:mi:ss'));

Oracle創(chuàng)建分區(qū)表操作

1、創(chuàng)建語句

create table p(id number)

partition by range(id)

(partition p1 values less than(100) tablespace t1,

partition p2 values less than(200) tablespace t2,

partition p3 values less than(300) tablespace t3);

2、添加分區(qū)

alter table p add partition p4 values less than (400) tablespace t4;

3、清除分區(qū)數(shù)據(jù)

alter table p trunc partition p1;

4、刪除分區(qū)

alter table p drop partition p1;

oracle 表已有分區(qū)怎么加分區(qū)

如果是分區(qū)表可以添加分區(qū),如果不是分區(qū)表,可以把表轉(zhuǎn)換成分區(qū)表,再增加分區(qū)。

網(wǎng)頁題目:oracle怎么續(xù)表分區(qū),oracle分區(qū)表增加分區(qū)
文章起源:http://www.muchs.cn/article36/hcpppg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名網(wǎng)站策劃、網(wǎng)站內(nèi)鏈、網(wǎng)站建設(shè)、外貿(mào)建站網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作