Oracle分割槽表總結

2021-03-04 01:40:12 字數 5235 閱讀 8563

create table emp (

empno number(4),

ename varchar2(30),

location varchar2(30))

partition by list (location)

(partition p1 values ('北京'),

partition p2 values ('上海','天津','重慶'),

partition p3 values ('廣東','福建')

partition p0 values (default) /*值列表中未顯示列出的所有值都會放到這個default分割槽中,關於default的使用,有一點要注意:一旦列表分割槽表有乙個default分割槽,就不能再向這個表中增加更多的分割槽了,此時必須刪除default分割槽,然後增加新分割槽,再加回default分割槽。

);雜湊(hash partitioning)分割槽:

雜湊分割槽數應該是2的冪,從而利於各行平均的雜湊與各分割槽

create table emp (

empno number(4),

ename varchar2(30),

sal number)

partition by hash (empno)

partitions 8

store in (emp1,emp2,e***,emp4,emp5,emp6,emp7,emp8);

組合分割槽:

範圍雜湊組合分割槽:

create table emp (

empno number(4),

ename varchar2(30),

hiredate date)

partition by range (hiredate)

subpartition by hash (empno)

subpartitions 2

(partition e1 values less than (to_date('20020501','yyyymmdd')),

partition e2 values less than (to_date('20021001','yyyymmdd')),

partition e3 values less than (maxvalue));

範圍列表組合分割槽(***posite partitioning):

在組合分割槽中,頂層分割槽機制總是區間分割槽,第二級分割槽機制可能是列表分割槽或者雜湊分割槽,使用組合分割槽時,並沒有分割槽段,只有子分割槽段,分割槽本身並沒有段(這就類似於分割槽表沒有段),資料物理的儲存在子分割槽段上,分割槽成為乙個邏輯容器,或者指向實際子分割槽的容器。每個區間分割槽不需要有相同數目的子分割槽。

create table customers_part (

customer_id number(6),

cust_first_name varchar2(20),

cust_last_name varchar2(20),

nls_territory varchar2(30),

credit_limit number(9,2))

partition by range (credit_limit)

subpartition by list (nls_territory)

subpartition template

(subpartition east values ('china', 'japan', 'india', 'thailand'),

subpartition west values ('america', 'germany', 'italy', 'switzerland'),

subpartition other values (default))

(partition p1 values less than (1000),

partition p2 values less than (2500),

partition p3 values less than (maxvalue));

索引分割槽:

create index month_ix on sales(sales_month)

global partition by range(sales_month)

(partition pm1_ix values less than (2)

partition pm12_ix values less than (maxvalue));

1.1.2 分割槽表的維護:

增加分割槽:

alter table sales add partition sales2000_q1

values less than (to_date(『2000-04-01』,』yyyy-mm-dd』)

tablespace ts_sale2000q1;

如果已有maxvalue分割槽,不能增加分割槽,可以採取**分割槽的辦法增加分割槽!

刪除分割槽:

alter table sales drop partion sales1999_q1;

截短分割槽:

alter table sales truncate partiton sales1999_q2;

合併分割槽:

alter table sales merge partitons sales1999_q2, sales1999_q3 into sales1999_q23;

alter index ind_t2 rebuild partition p123 parallel 2;

**分割槽:

alter table sales

split partiton sales1999_q4

at to_date (『1999-11-01』,』yyyy-mm-dd』)

into (partition sales1999_q4_p1, partition sales1999_q4_p2) ;

alter table t2 split partition p123 values (1,2) into (partition p12,partition p3);

交換分割槽:

alter table x exchange partition p0 with table bsvcbusrundatald ;

訪問指定分割槽:

select * from sales partition(sales1999_q2)

export指定分割槽:

exp sales/sales_password tables=sales:sales1999_q1

file=sales1999_q1.dmp

import指定分割槽:

imp sales/sales_password file =sales1999_q1.dmp

tables = (sales:sales1999_q1) ignore=y

檢視分割槽資訊:

user_tab_partitions, user_segments

注:若分割槽表跨不同表空間,做匯出、匯入時目標資料庫必須預建這些表空間。分表區各區所在表空間在做匯入時目標資料庫一定要預建這些表空間!

這些表空間不一定是使用者的預設表空間,只要存在即可。如果有乙個不存在,就會報錯!

預設時,對分割槽表的許多表維護操作會使全域性索引不可用,標記成unusable。 那麼就必須重建整個全域性索引或其全部分割槽。如果已被分割槽,oracle 允許在用於維護操作的alter table 語句中指定update global indexes 來過載這個預設特性,指定這個子句也就告訴oracle 當它執行維護操作的ddl 語句時更新全域性索引,這提供了如下好處:

1.在操作基礎表的同時更新全域性索引這就不需要後來單獨地重建全域性索引;

2.因為沒有被標記成unusable, 所以全域性索引的可用性更高了,甚至正在執行分割槽的ddl 語句時仍然可用索引來訪問表中的其他分割槽,避免了查詢所有失效的全域性索引的名字以便重建它們;

另外在指定update global indexes 之前還要考慮如下效能因素:

1.因為要更新事先被標記成unusable 的索引,所以分割槽的ddl 語句要執行更長時間,當然這要與先不更新索引而執行ddl 然後再重建索引所花的時間做個比較,乙個適用的規則是如果分割槽的大小小於表的大小的5% ,則更新索引更快一點;

2.drop truncate 和exchange 操作也不那麼快了,同樣這必須與先執行ddl 然後再重建所有全域性索引所花的時間做個比較;

3.要登記對索引的更新並產生重做記錄和撤消記錄,重建整個索引時可選擇nologging;

4.重建整個索引產生乙個更有效的索引,因為這更利於使用空間,再者重建索引時允許修改儲存選項。

注意分割槽索引結構表不支援update global indexes 子句。

1.1.3 普通表變為分割槽表

將已存在資料的普通表轉變為分割槽表,沒有辦法通過修改屬性的方式直接轉化為分割槽表,必須通過重建的方式進行轉變,一般可以有三種方法,視不同場景使用:

用例:方法一:利用原表重建分割槽表。

create table t (id number primary key, time date);

insert into t

select rownum, sysdate - rownum from dba_objects where rownum <= 5000;

***mit;

create table t_new (id, time) partition by range (time)

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

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

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

partition p4 values less than (maxvalue))

as select id, time from t;

rename t to t_old;

rename t_new to t;

select count(*) from t;

count(*)

5000

select count(*) from t partition (p1);

count(*)

2946

select count(*) from t partition (p2);

count(*)

731select count(*) from t partition (p3);

Oracle分割槽表詳解

範圍和列表技術的組合,首先對錶進行範圍分割槽,然後用列表技術對每個範圍分割槽再次分割槽。與組合範圍 雜湊分割槽不同的是,每個子分割槽的所有內容表示資料的邏輯子集,由適當的範圍和列表分割槽設定來描述。注意 先一定要進行範圍分割槽 select from v option s order by s.pa...

Oracle分割槽表和索引

什麼時候使用分割槽 1 大資料量的表,比如大於2gb。一方面2gb檔案對於32位os是乙個上限,另外備份時間長。2 包括歷史資料的表,比如最新的資料放入到最新的分割槽中。典型的例子 歷史表,只有當前月份的資料可以被修改,而其他月份只能read only oracle只支援以下分割槽 tables,i...

分割槽表損壞

分割槽表為何會出故障 在分割槽表被破壞後,啟動系統時往往會出現 non system disk or disk error,replace disk and press a key to reboot 非系統盤或盤出錯 error loading operating system 裝入dos引導記錄...