表空間是指磁盤上的一塊存儲區域,用來存放表。
使用範圍分區法對數據量大的表進行分區,分區存放到不同的表空間。
範圍分區就是用表中的某個字段值的範圍進行分區。
比如:
1)用數值型的id字段,id<100000的在第1個分區,100000<=id<200000的在第二個分區。
2)用日期類型的字段,2011年的數據在一個分區,2012年的數據在另一個分區,或者也可以按月份進行劃分。
範圍分區語法:
field) field 就是表中要劃分範圍的那個字段。
value) value 就是field的值,表示小於這個值的。
1000) 就表示屬性值小於1000,不包括1000
TO_DATE('2012/2/1','yyyy/MM/dd')) 就表示屬性值小於2012年2月1日的,不包括2012年2月1日
3)在最高的分區中,VALUES LESS THAN(maxValue)定義的是一個最大的值
範圍分區步驟:
1)建立表空間
建立三個表空間測試用
CREATE TABLESPACE APP_TS_01 --建立第一個表空間 APP_TS_01
NOLOGGING --不生成日誌
DATAFILE '/home/oracle/oradata/appdata/app_data_01.def' --指定表空間在磁盤上的位置
SIZE 1024M --指定表空間大小
CREATE TABLESPACE APP_TS_02 --建立第二個表空間 APP_TS_02
NOLOGGING --不生成日誌
DATAFILE '/home/oracle/oradata/appdata/app_data_02.def' --指定表空間在磁盤上的位置
SIZE 1024M --指定表空間大小
CREATE TABLESPACE APP_TS_03 --建立第三個表空間 APP_TS_03
NOLOGGING --不生成日誌
DATAFILE '/home/oracle/oradata/appdata/app_data_03.def' --指定表空間在磁盤上的位置
SIZE 1024M --指定表空間大小
2)建立表和對錶進行分區
--創建訂單表
create table t_order
(
id NUMBER primary key not null , --主鍵
order_no VARCHAR2(30) not null, --訂單號
order_time DATE not null --訂單時間
)
--對訂單表進行分區
partition by range (order_time)--根據訂單時間範圍進行劃分
(
--小於2012年1月份的數據存放到分區t_order_01,存在表空間APP_TS_01
PARTITION t_order_01 VALUES LESS THAN (TO_DATE('2012/2/1','yyyy/MM/dd')) TABLESPACE APP_TS_01,
--2012年2月份的數據存放到分區t_order_02,存在表空間APP_TS_02
PARTITION t_order_02 VALUES LESS THAN (TO_DATE('2012/3/1','yyyy/MM/dd')) TABLESPACE APP_TS_02,
--2012年3月份的數據存放到分區t_order_03,存在表空間APP_TS_03
PARTITION t_order_03 VALUES LESS THAN (TO_DATE('2012/4/1','yyyy/MM/dd')) TABLESPACE APP_TS_03
)
4)查詢分區數據
--查詢所有分區數據
select * from t_order
--只查t_order_01分區的訂單數據
select * from t_order PARTITION(t_order_01)
--聯合查詢t_order_01分區和t_order_02分區的數據
select * from t_order PARTITION(t_order_01)
UNION ALL
select * from t_order PARTITION(t_order_02)
5)查看當前用户哪些表有分區
--查看當前用户有哪些表已分區
SELECT * from USER_TABLES where partitioned='YES'
6)查看某個表有多少個分區
--查詢某個表有多少個分區
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='表名';