什麼時候使用分割槽:
1、 大資料量的表,比如大於2gb。一方面2gb檔案對於32位os是乙個上限,另外備份時間長。
2、 包括歷史資料的表,比如最新的資料放入到最新的分割槽中。典型的例子:歷史表,只有當前月份的資料可以被修改,而其他月份只能read-only
oracle只支援以下分割槽:tables, indexes on tables, materialized views, and indexes on materialized views
分割槽對sql和dml是透明的(應用程式不必知道已經作了分割槽),但是ddl可以對不同的分割槽進行管理。
不同的分割槽之間必須有相同的邏輯屬性,比如共同的表名,列名,資料型別,約束;
但是可以有不同的物理屬性,比如pctfree, pctused, and tablespaces.
分割槽獨立性:即使某些分割槽不可用,其他分割槽仍然可用。
最多可以分成64000個分割槽,但是具有long or long raw列的表不可以,但是有clob or blob列的表可以。
可以不用to_date函式,比如:
alter session set nls_date_format='mm/dd/yyyy';
create table sales_range
(salesman_id number(5),
salesman_name varchar2(30),
sales_amount number(10),
sales_date date)
partition by range(sales_date)
( partition sales_jan2000 values less than('02/01/2000'),
partition sales_feb2000 values less than('03/01/2000'),
partition sales_mar2000 values less than('04/01/2000'),
partition sales_apr2000 values less than('05/01/2000')
);partition key:最多16個columns,可以是nullable的
非分割槽的表可以有分割槽或者非分割槽的索引;
分割槽表可以有分割槽或者非分割槽的索引;
partitioning 方法:
range partitioning
list partitioning
hash partitioning
composite partitioning
composite partitioning:組合,以及 range-hash and range-list composite partitioning
range partitioning:
每個分割槽都有values less than子句,表示這個分割槽小於(<)某個上限,而大於等於(>=)前乙個分割槽的values less than值。
maxvalue定義最高的分割槽,他表示乙個虛擬的無限大的值。這個分割槽包括null值。
create table sales_range
(salesman_id number(5),
salesman_name varchar2(30),
sales_amount number(10),
sales_date date)
partition by range(sales_date)
( partition sales_jan2000 values less than(to_date('01/02/2000','dd/mm/yyyy')),
partition sales_feb2000 values less than(to_date('01/03/2000','dd/mm/yyyy')),
partition sales_mar2000 values less than(to_date('01/04/2000','dd/mm/yyyy')),
partition sales_apr2000 values less than(to_date('01/05/2000','dd/mm/yyyy')),
partition sales_2000 values less than(maxvalue)
);插入資料:
insert into sales_range values(1,2,3,to_date('21-04-2000','dd-mm-yyyy'));
insert into sales_range values(1,2,3,sysdate);
選擇資料:
select * from sales_range;
select * from sales_range partition(sales_apr2000);
select * from sales_range partition(sales_mar2000);
select * from sales_range partition(sales_2000);
按照多個列分割槽:
create table sales_range1
(salesman_id number(5),
salesman_name varchar2(30),
sales_amount number(10),
sales_date date)
partition by range(sales_date, sales_amount)
( partition sales_jan2000 values less than(to_date('01/02/2000','dd/mm/yyyy'),1000),
partition sales_feb2000 values less than(to_date('01/03/2000','dd/mm/yyyy'),2000),
partition sales_mar2000 values less than(to_date('01/04/2000','dd/mm/yyyy'),3000),
partition sales_apr2000 values less than(to_date('01/05/2000','dd/mm/yyyy'),4000),
partition sales_2000 values less than(maxvalue, maxvalue)
);insert into sales_range1 values(1,2,500, to_date('21/01/2000','dd/mm/yyyy'));
insert into sales_range1 values(2,3,1500, sysdate);
如果多個分割槽列的值衝突,則按照從左到右的優先順序。
list partitioning:
可以組織無序的,或者沒有關係的資料在相同的分割槽。
不支援多列的(multicolumn) partition keys,只能是乙個列。
default表示不滿足條件的都放在這個分割槽。
create table sales_list
(salesman_id number(5),
salesman_name varchar2(30),
sales_state varchar2(20),
sales_amount number(10),
sales_date date)
partition by list(sales_state)
( partition sales_west values('california', 'hawaii'),
partition sales_east values ('new york', 'virginia', 'florida'),
partition sales_central values('texas', 'illinois'),
partition sales_other values(default)
);hash partitioning:
不可以作splitting, dropping or merging操作。但是可以added and coalesced.
當我們無法判斷有多少資料對映或者怎樣對映到各個分割槽時,可以使用這種方法。分割槽資料最好是2的冪,這樣可以平均分配資料。
create table sales_hash1
(salesman_id number(5),
salesman_name varchar2(30),
sales_amount number(10),
week_no number(2))
partition by hash(salesman_id)
partitions 4
store in (users, tools, test, tablespace1); --表空間
create table sales_hash
(salesman_id number(5),
salesman_name varchar2(30),
sales_amount number(10),
week_no number(2))
partition by hash(salesman_id)
( partition p1 tablespace users,
partition p2 tablespace system
);composite partitioning:
先按照range分割槽,每個子分割槽又按照list or hash分割槽。
Oracle分割槽表總結
create table emp empno number 4 ename varchar2 30 location varchar2 30 partition by list location partition p1 values 北京 partition p2 values 上海 天津 重慶 ...
Oracle分割槽表詳解
範圍和列表技術的組合,首先對錶進行範圍分割槽,然後用列表技術對每個範圍分割槽再次分割槽。與組合範圍 雜湊分割槽不同的是,每個子分割槽的所有內容表示資料的邏輯子集,由適當的範圍和列表分割槽設定來描述。注意 先一定要進行範圍分割槽 select from v option s order by s.pa...
分割槽表損壞
分割槽表為何會出故障 在分割槽表被破壞後,啟動系統時往往會出現 non system disk or disk error,replace disk and press a key to reboot 非系統盤或盤出錯 error loading operating system 裝入dos引導記錄...