oracle表分区设计_论oracle分区表的创建与维护
創(chuàng)建分區(qū)表:
oracle分區(qū)方法:range、hash、list和composite partition;
range分區(qū)表示例:
CREATE TABLE sales_range (salesman_id NUMBER(5), salesman_name VARCHAR2(30),
sales_amount NUMBER(10), sales_date DATE) COMPRESS PARTITION BY RANGE(sales_date)
(
PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/YYYY')),
PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/YYYY')),
PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','DD/MM/YYYY')),
PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/YYYY')));
分區(qū)字段values less than必須是確定值,最后一個(gè)可以是maxvalue,每個(gè)分區(qū)可以單獨(dú)指定物理屬性
range分區(qū)特點(diǎn):
最早、最經(jīng)典的分區(qū)方法
Range分區(qū)通過(guò)對(duì)分區(qū)字段值的范圍進(jìn)行分區(qū)
Range分區(qū)特別適合于按時(shí)間周期進(jìn)行數(shù)據(jù)的存儲(chǔ):日、周、月、年等
數(shù)據(jù)管理能力強(qiáng)
數(shù)據(jù)遷移
數(shù)據(jù)備份
數(shù)據(jù)交換
范圍分區(qū)的數(shù)據(jù)可能不均勻
范圍分區(qū)與記錄值有關(guān),實(shí)施難度和可維護(hù)性相對(duì)較差
hash分區(qū)表示例:
create table emp_t(empno integer,ename varchar2(20))
partition by hash(empno)
partitions 4;--指定分區(qū)所在表空間(partition part_01 tablespace test,partition part_02 tablespace sys);
list分區(qū)表示例:
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));
list分區(qū)特點(diǎn):
List分區(qū)通過(guò)對(duì)分區(qū)字段的離散值進(jìn)行分區(qū)
List分區(qū)是不排序的,而且分區(qū)之間也沒(méi)有關(guān)聯(lián)
List分區(qū)適合于對(duì)數(shù)據(jù)離散值進(jìn)行控制
List分區(qū)只支持單個(gè)字段
List分區(qū)具有與range分區(qū)相似的優(yōu)缺點(diǎn):
數(shù)據(jù)管理能力強(qiáng)
各分區(qū)的數(shù)據(jù)可能不均勻
composite分區(qū)表示例:
CREATE TABLE quarterly_regional_sales (deptno NUMBER, item_no VARCHAR2(20),
txn_date DATE, txn_amount NUMBER, state VARCHAR2(2))
PARTITION BY RANGE (txn_date) SUBPARTITION BY LIST (state)
( PARTITION q1_1999 VALUES LESS THAN(TO_DATE('1-APR-1999','DD-MON-YYYY'))
(SUBPARTITION q1_1999_northwest VALUES ('OR', 'WA'),
SUBPARTITION q1_1999_southwest VALUES ('AZ', 'UT', 'NM'),
SUBPARTITION q1_1999_northeast VALUES ('NY', 'VM', 'NJ'),
SUBPARTITION q1_1999_southeast VALUES ('FL', 'GA'),
SUBPARTITION q1_1999_northcentral VALUES ('SD', 'WI'),
SUBPARTITION q1_1999_southcentral VALUES ('NM', 'TX')),
PARTITION q2_1999 VALUES LESS THAN(TO_DATE('1-JUL-1999','DD-MON-YYYY'))
(SUBPARTITION q2_1999_northwest VALUES ('OR', 'WA'),
SUBPARTITION q2_1999_southwest VALUES ('AZ', 'UT', 'NM'),
SUBPARTITION q2_1999_northeast VALUES ('NY', 'VM', 'NJ'),
SUBPARTITION q2_1999_southeast VALUES ('FL', 'GA'),
SUBPARTITION q2_1999_northcentral VALUES ('SD', 'WI'),
SUBPARTITION q2_1999_southcentral VALUES ('NM', 'TX')),
PARTITION q3_1999 VALUES LESS THAN (TO_DATE('1-OCT-1999','DD-MON-YYYY'))
(SUBPARTITION q3_1999_northwest VALUES ('OR', 'WA'),
… ….
SUBPARTITION q4_1999_northcentral VALUES ('SD', 'WI'),
SUBPARTITION q4_1999_southcentral VALUES ('NM', 'TX')));
composite分區(qū)特點(diǎn):
Oracle支持的Composite分區(qū):
range-hash
Range-list
既適合于歷史數(shù)據(jù),又適合于數(shù)據(jù)均勻分布
與范圍分區(qū)一樣提高可用性和可管理性
更好的PDML和partition-wise joins特性
實(shí)現(xiàn)粒度更細(xì)的操作
支持符合local indexes
不支持符合 global indexes
分區(qū)表設(shè)計(jì)原則:
表的大小:當(dāng)表的大小超過(guò)2GB,或?qū)τ贠LTP系統(tǒng),表記錄超過(guò)1000萬(wàn)時(shí),都應(yīng)該考慮對(duì)表進(jìn)行分區(qū)
數(shù)據(jù)訪問(wèn)特性:基于表的大部分查詢應(yīng)用,只訪問(wèn)表中少量的數(shù)據(jù)。對(duì)于這樣的表進(jìn)行分區(qū),可充分利用分區(qū)排除無(wú)關(guān)數(shù)據(jù)查詢的特性
數(shù)據(jù)維護(hù):按時(shí)間段刪除成批的數(shù)據(jù),對(duì)于這樣的表需要考慮進(jìn)行分區(qū),以滿足維護(hù)需要
數(shù)據(jù)備份和恢復(fù):按時(shí)間周期進(jìn)行表空間備份時(shí),將分區(qū)與表空間建立對(duì)應(yīng)關(guān)系
只讀數(shù)據(jù):如果一個(gè)表中大部分?jǐn)?shù)據(jù)都是只讀,通過(guò)對(duì)表進(jìn)行分區(qū),可將只讀數(shù)據(jù)存儲(chǔ)在只讀表空間,對(duì)于數(shù)據(jù)的備份有利
OLAP并行數(shù)據(jù)操作
分區(qū)表及索引分區(qū)數(shù)據(jù)字典信息:
--1、查詢當(dāng)前用戶下有哪些是分區(qū)表:
SELECT * FROM USER_PART_TABLES;
--2、查詢當(dāng)前用戶下有哪些分區(qū)索引:
SELECT * FROM USER_PART_INDEXES;
--3、查詢當(dāng)前用戶下分區(qū)索引的分區(qū)信息:
SELECT *
FROM USER_IND_PARTITIONS T
WHERE T.INDEX_NAME = ?
--4、查詢當(dāng)前用戶下分區(qū)表的分區(qū)信息:
SELECT * FROM USER_TAB_PARTITIONS T WHERE T.TABLE_NAME = ?;
--5、查詢某分區(qū)下的數(shù)據(jù)量:
SELECT COUNT(*) FROM TABLE_PARTITION PARTITION(TAB_PARTOTION_01);
--6、查詢索引、表上在那些列上創(chuàng)建了分區(qū):
SELECT * FROM USER_PART_KEY_COLUMNS;
--7、查詢某用戶下二級(jí)分區(qū)的信息(只有創(chuàng)建了二級(jí)分區(qū)才有數(shù)據(jù)):
SELECT * FROM USER_TAB_SUBPARTITIONS;
--查看某一分區(qū)上的數(shù)據(jù)
select * from user_table partition(partitionname);
分區(qū)表維護(hù):
--刪除分區(qū)
ALTER TABLE table_name DROP PARTITION partition_name;
--說(shuō)明:此語(yǔ)句不可用于hash分區(qū)表,如果是全局索引,因?yàn)槿炙饕姆謪^(qū)結(jié)構(gòu)和表可以不一致,若不一致的情況下,會(huì)導(dǎo)致整個(gè)全局索引失效,在刪除分區(qū)的時(shí)候,語(yǔ)句修改為:
ALTER TABLE table_name DROP PARTITION partition_name UPDATE GLOBAL INDEXES;
--合并分區(qū)(coalesce partition):合并分區(qū)是用來(lái)操作HASH分區(qū)表和hash全局索引的,它會(huì)重新分配刪除的分區(qū)的數(shù)據(jù)到現(xiàn)有的分區(qū)中
ALTER TABLE table_name COALESCE PARTITION;
--合并分區(qū)和刪除中間的RANGE有點(diǎn)像,但是合并分區(qū)是不會(huì)刪除數(shù)據(jù)的,對(duì)于LIST、HASH分區(qū)也是和RANGE分區(qū)不一樣的,其語(yǔ)法為:
ALTER TABLE table_name MERGE PARTITIONS??? partition_name1,partition_name2 INTO PARTITION MERGED_PARTITION;
--創(chuàng)建新的分區(qū)(分區(qū)數(shù)據(jù)若不能提供范圍,則插入時(shí)會(huì)報(bào)錯(cuò),需要增加分區(qū)來(lái)擴(kuò)大范圍)
ALTER TABLE table_name ADD PARTITION partition_name VALUES LESS THAN(2500000);--list分區(qū)or RANGE分區(qū)
ALTER TABLE table_name ADD PARTITION partition_name;--HASH分區(qū)
--創(chuàng)建子分區(qū):在分區(qū)下創(chuàng)建新的子分區(qū)大致如下(RANGE分區(qū),若為L(zhǎng)IST或HASH分區(qū),將創(chuàng)建方式修改為對(duì)應(yīng)的方式即可)
ALTER TABLE MODIFY PARTITION ADD SUBPARTITION VALUES LESS THAN(....);
--修改分區(qū)名稱(修改相關(guān)的屬性信息):
ALTER TABLE TABLE_PARTITION RENAME PARTITION MERGED_PARTITION TO MERGED_PARTITION02;
--交換分區(qū)(快速交換數(shù)據(jù),其實(shí)是交換段名稱指針),首先創(chuàng)建一個(gè)交換表,和原表結(jié)構(gòu)相同,如果有數(shù)據(jù),必須符合所交換對(duì)應(yīng)分區(qū)的條件
CREATE TABLE TABLE_PARTITION_2
AS SELECT * FROM TABLE_PARTITION WHERE 1=2;
--然后將第一個(gè)分區(qū)的數(shù)據(jù)交換出去
ALTER TABLE TABLE_PARTITION EXCHANGE PARTITION TAB_PARTOTION_01
WITH TABLE TABLE_PARTITION_2 INCLUDING INDEXES;
--此時(shí)會(huì)發(fā)現(xiàn)第一個(gè)分區(qū)的數(shù)據(jù)和表TABLE_PARTITION_2做了瞬間交換,比TRUNCATE還要快,因?yàn)檫@個(gè)過(guò)程沒(méi)有進(jìn)行數(shù)據(jù)轉(zhuǎn)存,只是段名稱的修改過(guò)程,和實(shí)際的數(shù)據(jù)量沒(méi)有關(guān)系。
--如果是子分區(qū)也可以與外部的表進(jìn)行交換,只需要將關(guān)鍵字修改為:SUBPARTITION 即可。
--清空分區(qū)數(shù)據(jù)
ALTER TABLE TRUNCATE PARTITION ;
ALTER TABLE TRUNCATE subpartition ;
總結(jié)
以上是生活随笔為你收集整理的oracle表分区设计_论oracle分区表的创建与维护的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 对一张静态图片的识别
- 下一篇: 永远不会被杀的***捆绑机