文档详情

(oracle分区表的建立方法.doc

发布:2017-01-20约5.09千字共6页下载文档
文本预览下载声明
Oracle提供了分区技术以支持VLDB(Very Large DataBase)。分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。 Oracle的分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区中的数据,也可以通过在查询时直接指定分区的方法来进行查询。 分区提供以下优点: 由于将数据分散到各个分区中,减少了数据损坏的可能性; 可以对单独的分区进行备份和恢复; 可以将分区映射到不同的物理磁盘上,来分散IO; 提高可管理性、可用性和性能。 Oracle提供了以下几种分区类型: 范围分区(range); 哈希分区(hash); 列表分区(list); 范围-哈希复合分区(range-hash); 范围-列表复合分区(range-list)。 Oracle的普通表没有办法通过修改属性的方式直接转化为分区表,必须通过重建的方式进行转变,下面介绍三种效率比较高的方法,并说明它们各自的特点。 方法一:利用原表重建分区表。 步骤: SQL CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE); 表已创建。 SQL INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS; 已创建6264行。 SQL COMMIT; 提交完成。 SQL CREATE TABLE T_NEW (ID, TIME) PARTITION BY RANGE (TIME) 2 (PARTITION P1 VALUES LESS THAN (TO_DATE(2004-7-1, YYYY-MM-DD)), 3 PARTITION P2 VALUES LESS THAN (TO_DATE(2005-1-1, YYYY-MM-DD)), 4 PARTITION P3 VALUES LESS THAN (TO_DATE(2005-7-1, YYYY-MM-DD)), 5 PARTITION P4 VALUES LESS THAN (MAXVALUE)) 6 AS SELECT ID, TIME FROM T; 表已创建。 SQL RENAME T TO T_OLD; 表已重命名。 SQL RENAME T_NEW TO T; 表已重命名。 SQL SELECT COUNT(*) FROM T; COUNT(*) ---------- 6264 SQL SELECT COUNT(*) FROM T PARTITION (P1); COUNT(*) ---------- 0 SQL SELECT COUNT(*) FROM T PARTITION (P2); COUNT(*) ---------- 6246 SQL SELECT COUNT(*) FROM T PARTITION (P3); COUNT(*) ---------- 18 优点:方法简单易用,由于采用DDL语句,不会产生UNDO,且只产生少量REDO,效率相对较高,而且建表完成后数据已经在分布到各个分区中了。 不足:对于数据的一致性方面还需要额外的考虑。由于几乎没有办法通过手工锁定T表的方式保证一致性,在执行CREATE TABLE语句和RENAME T_NEW TO T语句直接的修改可能会丢失,如果要保证一致性,需要在执行完语句后对数据进行检查,而这个代价是比较大的。另外在执行两个RENAME语句之间执行的对T的访问会失败。 适用于修改不频繁的表,在闲时进行操作,表的数据量不宜太大。 方法二:使用交换分区的方法。 步骤: SQL CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE); 表已创建。 SQL INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS; 已创建6264行。 SQL COMMIT; 提交完成。 SQL CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME) 2 (PARTITION P1 VALUE
显示全部
相似文档