對DBA_TAB_COLUMNS數據字典視圖進行查詢 [NextPage]
產生表1-2
select table_name,column_name,num_distinct
from DBA_TAB_COLUMNS
where owner like 'ORDADM';
表1-2
列
不同的值
PATIENT_ID
28720
VISIT_ID
2
ORDER_NO
395
ORDER_SUB_NO
10
ORDER_CLASS
9
ORDER_CODE
825
ORDER_TEXT
1551
ORDERING_DEPT
15
START_DATE_TIME
1194176
STOP_DATE_TIME
636798
從表1-2中,我們可以看到欲分區表的各個候選分區鍵的
[1] [2] 下一頁
正在看的ORACLE教程是:Oracle數據表分區的策略。分布頻譜,ORDER_CODE(醫囑代碼)鍵值沒有出現一種均勻分布,用它作分區鍵,明顯不合適; 二 分區表的定義
Create Table orders (
PATIENT_ID varchar2(10) not null, ORDER_NO number(4), ORDER_SUB_NO number(2),
..............
ORDER_CLASS char(1),
ORDER_TEXT varchar2(80),
ORDER_CODE varchar2(10),
.............
START_DATE_TIME date
STOP_DATE_TIME date
.................
ORDERING_DEPT varchar2(8)
storage (initial 100M next 1M)
PARTITION BY RANGE(START_DATE_TIME)
SUBPARTITION BY HASH(ORDER_CODE)
SUBPARTITIONS 3 STORE IN (ordersub1, ordersub 2, ordersub 3)
(PARTITION orders200212 VALUES LESS THAN (to_date('2003-01-01 00:00: 00','yyyy-mm-dd hh24:mi:ss'))
tablespace Tsp_Orders,
PARTITION orders200301
VALUES LESS THAN (to_date('2003-02-01 00:00: 00','yyyy-mm-dd hh24:mi:ss'))
tablespace Tsp_Orders,,
PARTITION orders 200302
VALUES LESS THAN (to_date('2003-03-01 00:00: 00','yyyy-mm-dd hh24:mi:ss'))
tablespace Tsp_Orders,,
.....................
PARTITION orders200402
VALUES LESS THAN (to_date('2004-03-01 00:00: 00','yyyy-mm-dd hh24:mi:ss'))
tablespace Tsp_Orders
(SUBPARTITION ordersub1 TABLESPACE Tsp_Orders, SUBPARTITION ordersub 2 TABLESPACE Tsp_Orders,
SUBPARTITION ordersub3 TABLESPACE Tsp_Orders));
在建立的Orders表中,按每月一個分區,從2002年12月開始,2004年02月止,共15個分區, PARTITION BY RANGE(START_DATE_TIME) 子句,表示用表的START_DATE_TIME屬性建立范圍分區,具體的每個分區名、時間范圍,在PARTITION子句定義;SUBPARTITION BY HASH(ORDER_CODE)子句,表示用表的ORDER_CODE 屬性,在每個分區下建立散列子分區,具體的每個子分區名、所在表空間,在UBPARTITION子句定義。
用下面ALTER TABLE數據定義語句為Orders建立約束和索引。
ALTER TABLE Orders ADD CONSTRAINT Pk_Orders KEY (Patient_id,
Visit_id,Order_no,Order_sub_no) USING INDEX PCTFREE 5 TABLESPACE Tsp_Orders;
表1-3是用select count(*) from orders partition (分區名)語句,查詢出的名分區的記錄數。
表1-3
分區名
記錄數
orders200301
87311
orders2200302
87553
orders2200303
107533
............
orders200401
124812
三 分區表的維護操作
增添分區:
Alter Table orders Add partition orders200403
Aalues less (to_date('2004-04-01 00:00:00','yyyy-mm-dd hh24: mi:ss'))
Tablespace Tsp_Orders;
刪除分區:
Alter Table table_name Drop Partition partition_name;
裁斷分區:
Alter Table table_name Truncate Partition partition_name Storage;
Oracle數據表分區小知識:
為了簡化數據庫大表的管理,O r a c l e 8 及以後版本推出了分區選項。分區將表分離在若干不同的表空間上,用分而治之的方法來支撐無限膨脹的大表,給大表在物理一級的可管理性。將大表分割成較小的分區可以改善表的維護、備份、恢復、事務及查詢性能。針對當前社保及電信行業的大量日常業務數據, 可以推薦使用ORACLE8 的該選項。
分區的優點:
1 、增強可用性:如果表的一個分區由於系統故障而不能使用,表的其余好的分區仍然可以使用;
2 、減少關閉時間:如果系統故障只影響表的一部分分區,那麼只有這部分分區需要修復,故能比整個大表修復花的時間更少;
3 、維護輕松:如果需要重建表,獨立管理每個分區比管理單個大表要輕松得多;
4 、均衡I / O : 可以把表的不同分區分配到不同的磁盤來平衡I / O 改善性能;
5 、改善性能:對大表的查詢、增加、修改等操作可以分解到表的不同分區來並行執行,可使運行速度更快;
6 、分區對用戶透明,最終用戶感覺不到分區的存在。
上一頁
上一頁 [1] [2]