AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > Oracle

Oracle 数据表分区的策略

51自学网 http://www.51zixue.net

  二 分区表的定义

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

分区名记录数
orders20030187311
orders220030287553
orders2200303107533
............  
orders200401124812

  三 分区表的维护操作

  增添分区:

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 、分区对用户透明,最终用户感觉不到分区的存在。

 
 

上一篇:深入了解Oracle数据字典  下一篇:Oracle数据库集中复制方法浅议