ORACLE的表分区管理.ppt
ORACLE8的分区管理的分区管理中联重庆公司服务部目的通过本节的学习,你应该能够掌握以下内容n1、了解Oracle分区的概念及其优点;n2、掌握Oracle分区的管理,包括分区的建立、扩容、导出/导入等。2中联重庆公司服务部目录n1、分区概述n2、分区的优点n3、分区的管理n3.1、分区表的建立n3.2、建立基于分区的表n4、分区表的扩容n5、删除不必要的分区n6、EXPORT分区n7、IMPORT分区n8、查看分区信息3中联重庆公司服务部1、分区概述n为了简化数据库大表的管理,ORACLE推出了分区选项。分区将表分离在若干不同的表空间上,用分而治之的方法来支撑无限膨胀的大表(如:病人费用记录,药品收发记录),给大表在物理一级的可管理性。将大表分割成较小的分区可以改善表的维护、备份、恢复、事务及查询性能。针对当前ZLHIS中日益增长的大量日常业务数据,可以推荐使用ORACLE的该选项。4中联重庆公司服务部2、分区的优点n1、增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍然可以使用;n2、减少关闭时间:如果系统故障只影响表的一部分分区,那么只有这部分分区需要修复,故比整个大表修复花的时间更少;n3、维护轻松:如果需要重建表,独立管理每个分区比管理单个大表要轻松得多;n4、均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;n5、改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快;n6、分区对用户透明:最终用户感觉不到分区的存在。5中联重庆公司服务部3、分区的管理-1、分区表的建立n某医院每年产生巨大的业务数据,我们可以为用户将每季度或每月的数据分别放在不同分区内。以下示范的是该医院2003年的数据(假设每月产生30M的数据),按登记时间划分,操作如下:6中联重庆公司服务部3、分区的管理-1、分区表的建立n以system身份创建独立的表空间:ncreatetablespacezl9expense2003_01datafiled:oracleoradataorclzl9expense2003_01.dbfsize30Mdefaultstorage(initial512knext512kminextents1maxextentsunlimitedpctincrease1);ncreatetablespacezl9expense2003_02datafiled:oracleoradataorclzl9expense2003_02.dbfsize30Mdefaultstorage(initial512knext512kminextents1maxextentsunlimitedpctincrease1);ncreatetablespacezl9expense2003_03datafiled:oracleoradataorclzl9expense2003_03.dbfsize30Mdefaultstorage(initial512knext512kminextents1maxextentsunlimitedpctincrease1);ncreatetablespacezl9expense2003_04datafiled:oracleoradataorclzl9expense2003_04.dbfsize30Mdefaultstorage(initial512knext512kminextents1maxextentsunlimitedpctincrease1);7中联重庆公司服务部3、分区的管理-2、建立基于分区的表n用EXPORT工具把旧数据备份在backup.dmp中n把原来的“病人费用记录表”改名naltertable病人费用记录renameto病人费用记录oldn以zlhis身份创建分区的表nIMPORT导入数据,参数ignore=y8中联重庆公司服务部3、分区的管理-2、建立基于分区的表ncreatetable病人费用记录(IDNUMBER(18),n记录性质NUMBER(3),nNoVARCHAR2(8),nn)partitionbyrange(登记时间)(partition病人费用记录2003_01valueslessthan(to_date(2003-01-01,yyyy-mm-dd)tablespacezl9expense2003_01,partition病人费用记录2003_02valueslessthan(to_date(2003-04-01,yyyy-mm-dd)tablespacezl9expense2003_02,partition病人费用记录2003_03valueslessthan(to_date(2003-07-01,yyyy-mm-dd)tablespacezl9expense2003_03,partition病人费用记录2003_04valueslessthan(to_date(2003-10-01,yyyy-mm-dd)tablespacezl9expense2003_04);n说明:分区的名称可以和表空间的名称不一致。这里是每个季度做一个分区,当然也可以每个月做一个分区9中联重庆公司服务部4、分区表的扩容n到了2004年,建立新的表空间:ncreatetablespacezl9expense2004_01datafiled:oracleoradataorclzl9expense2004_01.dbfsize30Mdefaultstorage(initial512knext512kminextents1maxextentsunlimitedpctincrease1);n为表添加新分区和表空间:naltertable病人费用记录addpartition病人费用记录2004_01valueslessthan(to_date(2001-10-01,yyyy-mm-dd)tablespacezl9expense2004_01;10中联重庆公司服务部5、删除不必要的分区n将2003年的数据备份(备份方法见6、EXPORT分区),将2003年的分区删除。naltertable病人费用记录droppartion病人费用记录2003_01;n(删除其他分区)n利用操作系统的工具删除以上表空间占用的文件(表空间基于裸设备无须此步)。11中联重庆公司服务部6、EXPORT分区nexpzlhis/histables=病人费用记录:病人费用记录2003_01rows=Yfile=200301.dmp12中联重庆公司服务部7、IMPORT分区n例如在2004年,用户要查看2003年的数据,先创建表空间ncreatetablespacezl9expense2003_01datafiled:oracleoradataorclzl9expense2003_01.dbfsize30Mdefaultstorage(initial512knext512kminextents1maxextentsunlimitedpctincrease1);n为表添加新分区和表空间:naltertable病人费用记录addpartition病人费用记录2003_01valueslessthan(to_date(2001-10-01,yyyy-mm-dd)tablespacezl9expense2003_01;n导入数据nimpzlhis/hisfile=200301.dmptables=病人费用记录:病人费用记录2003_01ignore=yn说明:如果不指明导入的分区,imp会自动按分区定义的范围装载数据13中联重庆公司服务部8、查看分区信息n要查看表的分区信息,可查看数据字典user_extents,操作如下:select*fromuser_extentswheresegment_name=病人费用记录;14中联重庆公司服务部总结在本节,你应该有以下收获:n1、了解分区的概念及其特点;n2、如何建立分区;n3、分区表数据的导入及导出;n4、分区信息的查询等。15中联重庆公司服务部