Oracle分区索引(精选5篇)
创建该分区索引基于一下2个主要方面
1、由于目前大部分CTAIS2.0上线单位对SB_ZSXX表创建了以NSR_SWJG_DM为分区键的分区表,以加快数据检索速度和降低系统资源消耗。
2、CTAIS2.0系统中相当部分对SB_ZSXX表的查询都具有nsr_swjg_dm和kprq列为条件的特征,典型的如上解入库查询、税款开票查询等。查询语句示例如下(注意红色部分):
SELECT NSRDZDAH, JKPZZL_DM, …………
FROM SB_ZSXX A WHERE :“SYS_B_00” = :“SYS_B_01” AND A.JKPZZL_DM!= :“SYS_B_02” AND A.ZSXM_DM!= :“SYS_B_03” AND A.NSRDZDAH IN(:“SYS_B_04”)AND A.KPRQ >= TO_DATE(:“SYS_B_05”, :“SYS_B_06”)AND A.KPRQ <= TO_DATE(:“SYS_B_07”, :“SYS_B_08”)
AND(A.SJRQ IS NULL)AND(A.SJXHRQ IS NULL)AND(A.SJXHR_DM IS NULL)AND(A.JKPZXH IS NOT NULL)AND(A.RKRQ IS NULL)AND(A.RKXHRQ IS NULL)AND(A.RKXHR_DM IS NULL)AND(A.HZJKSH IS NULL)AND A.TZLX_DM IN(:“SYS_B_09”, :“SYS_B_10”)AND KPRQ IS NOT NULL
AND(EXISTS(SELECT :“SYS_B_11” FROM DM_SWJG C WHERE C.SWJG_DM = A.NSR_SWJG_DM AND C.JBDM LIKE :“SYS_B_12”))
ORDER BY JKPZXH ASC, KPRQ ASC 针对以上类型的查询,如果缺少基于nsr_swjg_dm为前缀的本地分区索引,将无法体现出分区表的特性、发挥分区表的优势,具体表现为无法使用分区裁剪功能(partition range single等操作)
创建分区索引的脚本示例和注意事项
创建本地前缀分区索引需要注意一下几个方面:
1、表已经按分区键创建了分区表
2、待创建索引前缀列必须是分区键
3、创建分区索引的partition数目必须大于或等于分区表的partition数目 以河南省创建idx_sb_zsxx_nsr_swjg_kprq索引为例:
1、确认是否存在该分区索引
通过user_indexes和user_idx_columns查询取得。
2、取得sb_zsxx表分区数目
方法一:使用dbms_metadata.get_ddl()包取得表定义脚本
方法二:查询user_part_tables或user_tab_partitions表取得分区数目
3、创建本地前缀分区索引 Create index CTAIS2.IDX_SB_ZSXX_NSR_SWJG_KPRQ on CTAIS2.SB_ZSXX(NSR_SWJG_DM,KPRQ)TABLESPACE CTAIS2_SB_IDX LOCAL(PARTITION “SB_ZSXX_P1” TABLESPACE “CTAIS2_SB_IDX”, PARTITION “SB_ZSXX_P2” TABLESPACE “CTAIS2_SB_IDX”,............PARTITION “SB_ZSXX_P19” TABLESPACE “CTAIS2_SB_IDX”,PARTITION “SB_ZSXX_P_MAX” TABLESPACE “CTAIS2_SB_IDX”)ONLINE NOLOGGING COMPUTE STATISTICS;
ORACLE的分区是一种处理超大型表、索引等的技术。通过将大表和索引按照分区规则分成可以管理的若干小块,从而避免了对每个表作为一个大的、单独的对象进行管理,为大量数据提供了可伸缩的性能。分区通过将操作分配给更小的存储单元,减少了需要进行管理操作的时间,并通过增强的并行处理提高了性能,通过屏蔽故障数据的分区,还增加了可用性。
在oracle 10gR2版本中,支持以下几种分区类型:1)范围分区(range);2)列表分区(list);3)散列分区(hash);4)组合分区(range-lis和range-hash)。
范围分区(range):范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据业务记录的创建日期进行分区等。
散列分区(Hash):散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。
列表分区(List):当你需要明确地控制如何将行映射到分区时,就使用列表分区方法。与范围分区和散列分区所不同,列表分区不支持多列分区。如果要将表按列分区,那么分区键就只能由表的一个单独的列组成,然而可以用范围分区或散列分区方法进行分区的所有的列,都可以用列表分区方法进行分区。
2 数据库分区设计优化方案
2.1 确定哪些大表需要进行分区
使用分区技术时,并不是对数据库中的所有表都进行分区,而只针对数据量比较大的一些大表才进行分区。根据分区的定义可知,分区其实就是将一个大数据段按规则划分成若干个小数据段,如果表对象本身很小,就失去了分区的意义。
根据经验,数据量大于1000万的表才需要做分区。
说明:
在使用以上语句统计需要做分区的大表时,必须先收集数据库系统的统计信息。否则num_rows的数据不准确,无法正确表达出表对象的记录数。
2.2 讨论分区类型及分区字段的选择:
这一步至关重要,分区类型和分区字段的选择严重影响到数据表的访问性能。选择了错误的分区类型或分区字段给数据库性能带来的负面影响会比不做分区更大,因此在决定分区类型和分区字段时一定要与项目组讨论,按照业务需求及业务逻辑共同制定。
根据经验,选择分区类型的步骤:
1)先确定该表中哪个字段在select语句的谓词中使用最频繁.此字段将做为分区字段。
因为分区的目的是将一个大表的数据段按规则分离成若干个小数据段,索引也分离为若干小索引段,在数据访问时,根据索引只需要访问其中的一个小索引段,最后访问其中的一个数据段,从而减小了需要访问的数据量,达到优化的目的。如果select语句的谓词中不包括分区字段,则必须访问完整个索引段,最后访问所有的小数据段,才能定位出需要访问的数据。
2)根据分区字段的特点,确定分区类型。
如果该字段有明确的顺序先后关系,则该表合适做范围分区。如:时间;如果该字段没有明确的范围顺序关系,则是具有唯一值或若干值,则该表合适做列表分区。如:部门、分公司;如果该字段既无明确的范围顺序关系,也无具体值,而是些流水号,则该表合适做散列分区。如:批处理号、流水号。
2.3 数据表空间及索引表空间设计
表对象和索引对象的第一个规则是把表和索引分离。把表和相应的索引建立在不同的表空间中,最好在不同的磁盘上。这样可以避免在数据管理和查询时出现的许多I/O冲突。
在此优化方案中,我们将为每个分区创建一个对应的表空间,让表分区存放在不同的表空间中,达到不同分区间数据访问的分离。同时为每个索引分区也创建独立的索引分区表空间。
例:
2.4 分区表执行计划的选择:
执行一个select语句,查看其执行计划:
可以看出,创建为分区表后,数据访问时只需要访问其中的某一个分区的数据,而其他的分区则不需要进行访问。对大表而言,可以减小很多的I/0操作,达到优化的目的。
3 总结
Oracle数据库的分区技术可以改善查询性能,仅搜索自己关心的分区,提高检索速度。同时可以把不同的分区分离至不同的磁盘上,以平衡I/0,改善整个系统的性能。除此之外,在数据维护方面,分区技术也有很大的优势。在进行历史数据转储时,只需要将需要转储的数据分区export备份出来转储至磁带中。而不需要将整张表全部export备份出来。在历史数据清理时,可以将历史数据所在的分区truncate或drop,而不影响表的其他数据,同时释放空间。
参考文献
[1]Hart M,Jesse S.Oracle Database10g高可用性实现方案——运用RAC、Flashback和Data Guard技术[M].刘永健,孔令梅,译.北京:清华大学出版社,2005.
[2]张天慧.专家精讲:Oracle数据库管理与维护[M].北京:电子工业出版社,2009.
[3]汪照东.Oracle11g数据库管理与优化宝典[M].北京:电子工业出版社,2008.
[4]安东尼尼.Oracle性能诊断艺术[M].北京:人民邮电出版社,2009.
索引序列优缺点
在计算机模块中, 使用索引可以大大提高工作的效率, 同时还能对工作的准确性有一定的提高。但是无度的增加索引会带来一些不利的因素。一是过多的增加索引会带来成本的提高, 二是索引的使用会使系统的整体运行速度有所降低。由此看来, 使用索引必须选择适当的数量、使用上也必须合理。在确定使用索引的范围时, 采用的是ORACLE优化方式, 在了解整套系统的运行环境后, 充分的发挥系统的资源。找寻出最为合理的数据管理模式。
对于索引的方式使用中, 考虑到索引表中的行列数, 可以将行列作为索引的目标, 在一些常用的索引模式下, 可以单独的建立索引, 并在限定的范围中来根据新建的索引来搜索需要的索引。在ORACLE程序中, 索引是以具体排列完整的列表存在, 查询中, 为了提高索引的时间, 可以将多个索引目标编辑在一起, 形成复合式的索引模式。但是并不是在所有条件下都可以将索引的进行整合, 在一些不常用的索引中, 可以利用抑制的方式将插入率高的搜索模块与删除动作相互连接, 作为不能索引的范围, 并对具有函数运算的模块中的索引方式进行归类, 并在否定条件下与NULL相互对比, 同时ORACLE索引程序不能在WHEEL下进行操作。
在建立新的索引程序中, 数据库的操作系统将支持系统作为候选序列, 在索引进行中降低程序运行速度的同时来保证索引的可靠性。同时在数据仓库中, 可以同时对大多个数据进行处理, 把数据的容量在多次的数据运算后可以在很短的时间内索引出要求内容, 对索引的内容进行调试, 并对调试的结果进行比对测试, 得到最终准确的索引结果。
ORACLE程序的索引方式
在ORACLE索引中, 主要是采用了函数的索引方式, 在树程序的模拟下, 实现索引的准确性。利用索引的平衡性, 在树的节点中很方便的找寻出对应的低阶节点, 并利用树支点的模式, 找寻出索引存放的空间, 这就是叶程序中索引的位置。在树索引中, 系统的分区十分重要, 根据多个范围的数据键值来将分区中的索引范围缩小, 在最短的时间内对程序数据进行筛选。
ORACLE程序使用中十分的方便, 可靠性能好。同时可以将列值的程序内容高速的检索。这套方法使用于大型数据库中的数据调查。但是, 在树系统ORACLE程序中, 不适用多次的数据插入, 在完成一次的索引任务后很难再多次进行操作, 表中的主、副键需要重新运行才能进行有效的数据检索。数据程序使用中, 位索引也会使用到ORACLE程序, 不同与树程序, 位索引的存储能力更强, 在很多的索引中, 由于路径的不同, 可以将索引的操作在I/O模式下进行, 在不同的I/O运行下, 数据的查询结果可以在扫描的情况下遗传下来, 在低阶的数据模拟中得到的数据可以应用在高阶的模拟中, 这样可以有效的保证数据索引的方便, 但是这套系统的确定在于, 程序运行过程中, 所耗费的计算机资源较大, 很难对其他程序进行兼容。
创建ORACLE索引程序
1群是ORACLE程序中的段, 遵循以下两个规律
(1) 在物理化的控制中, 数据通过叠加的方式整合在一起, 并且通过系统的合并进行保存。但是数据与数据之间不会进行排列, 系统会根据序号进行物理排序后进行保存。但是在公共平台中, 对于索引中建立的群可以进行数值键的连接。并将有相同的键值的数据在物理环境下进行整合并保存。但是系统对于大数据量的存储中, 无法有足够的磁盘空间, 最好是保存在相同的数据库块上。
(2) 允许将来自多个数据库表的数据存储在相同的物理数据库块中。可考虑将这种方法于数据预连接。
2树群具有正反两个方面
优点:物理地集中放置数据, 提高缓冲区高速缓存效率, 减少逻辑I/O, 减少索引需求, 因为所有表共享一个群建索引。
缺点:不能进行直接路径装载和分区, 正确设置群尺寸需要仔细考虑, 设置SIZE值过大会浪费空间, 过小不能体现群的好处。为了纠正尺寸, 需要重建该群;集群表的插人比传统表慢, 因为数据需要它必须进人确定的位置。
3建立和维护数据仓库索引的基本原则
(1) 最好先将数据装人数据仓库对象, 然后手工创建索引
当向表中聚居数据时, 若表上已存在一些索引, 则当这些数据被插入后, 必须更新这些索引。
(2) 建立索引时, 特别是建立唯一性索引和那些定义主关键字的索引时, 需要大量的临时工作空间
该工作空间是在表空间中留出的、专门用于存放临时对象的空间。这些对象可能在create index语句执行期间被产生, 然后, 在建立索引完成后即被删除。由于需完成的索引创建工作很多, 以致于许多管理员要为专用的表空间分配数G字节磁盘来完成该任务。
(3) 如果索引效率起反作用, 必须进行删除
如果一个应用需要在晚上执行复杂的查询, 而在白天执行很短的插人事务那么可以考虑在插入开始时, 删除索引, 等到插入完成之后重新建立索引。
(4) 数据仓库运行一段时间后, 随着数据的增加和删除, 索引对系统的优化性能会大大降低, 我们需要对索引进行重建。
(5) 在时间更迭的过程中, 数据处于累加的过程, 在程序中保证语句的完整性, 同时在计划中, 数据处于变动的状态
例如在数据处理中的优化方式是开销法, 数据在运算的过程中, 不断的增大会导致服务器的错误, 优化的过程就是改变索引方式, 优化器可能错误地不选择索引而采用全表扫描。
结束语
数据时代的发展趋势是程序处理的稳定性, 在对于数据仓库的管理中, 着重是对于索引技术的完善。在本文中, 详细的介绍了索引技术的相关内容, 并将ORACLE系统的创建方式进行了说明, 根据比对不同的运算方式得出最为合理的模式, 同时在这个基础上提出了索引的创建技术和维护方式。在实际的数据库处理中, 要想将索引技术更好的服务于企业, 就需要在不断的实践中根据企业的要求分析和模拟出最为有效的索引模式, 在测试完毕后更好的进行索引的工作。
摘要:在计算机信息技术不断发展的过程中, 数据管理系统的研究受到了人们的广泛关注。在现有的数据仓库管理中, 大数据的储存和数据的处理需要在更大的网络平台下进行, 简单的操作系统很难满足新时代下的计算机数据要求。在这样的环境下, 发展数据控制方法变得尤为重要。在本文中, 详细的对ORACLE技术进行介绍, 通过在数据搜索的不同模块下进行数据仓库中的管理, 并对比了几种数据索引的方式, 根据索引技术中的不足之处提出相应的改进方式, 更好的提高数据仓库的管理效能。
注释
11 王菲.数据仓库中数据组织和管理的研究[J].情报科学, 2002, 20 (17) :727-729
22 周丽娟, 柳池.关于数据仓库若干技术的研究[J].微机发展, 2002.12 (11) :29-31
33 夏红霞, 赵杨.数据仓库中的索引技术[J].微机发展, 2000, 6 (10) :150-511
广播监测系统是一个三层的体系架构:由数据处理中心、监测台和监测前端组成。监测前端接收监测台下发的监测指令,对当地广播质量和效果进行监测,并将监测结果传回监测台。监测台一方面负责管理和维护它所管辖的监测前端,确保它们正常运转;另一方面对监测前端传回的广播质量和效果监测数据进行处理,上报给数据处理中心。数据处理中心是广播监测系统的核心,负责汇总和处理各监测台上报的广播质量和效果数据,形成各类报表和报告上报有关部门。
广播监测系统的软件架构也是分布式的,数据处理中心和监测台都有自己的广播监测软件,软件包括应用软件和数据库两部分。监测台的广播监测系统数据库存储自台的广播质量和效果监测数据,而数据处理中心广播监测系统数据库存储各监测台上报所有的广播质量和效果监测数据。数据处理中心和各监测台的数据库之间存在双向同步。所有数据库软件均采用Oracle数据库管理系统。Oracle作为当今世界上使用最广泛的数据库,也是最优秀的数据库管理系统,它以能保证分布式信息的安全性、完整性和一致性、较强的并发控制能力和恢复能力,以及管理超大规模数据库的能力而著称于世。目前数据处理中心数据库软件的版本是Oracle10g,各监测台的版本是Oracle9i, 见图1。
每天监测台利用本台的监测系统和下属的各个监测前端对当地的广播效果进行不间断地收测,收测结果存储在本台广播监测系统数据库的表Gbxg_Tab里。通过同步软件,这些收测数据会实时地同步到数据处理中心的广播监测系统数据库的同名表Gbxg_Tab里。由于监测台和监测前端较多,同时每个监测台和监测前端要收测的频率也很多,而且是不间断的收测,因此表Gbxg_Tab的数据增长很快。据统计,该表记录数每天会增加五万多条,一年下来记录数将达到两千万条左右,堪称广播监测系统数据库第一大表。随着广播监测系统规模的进一步扩大,监测台和监测前端的数量进一步增加,该表的数据会以更快的速度增加。在这种情况下,采用分区表来存储这些海量数据是非常适合的,下面首先对Oracle数据库里分区表的概念、优点、分类和日常管理维护等进行简要介绍。
2 分区表简介
2.1 分区表的基本概念
在大型的数据库应用中,需要处理的数据量可以达到几十到几百GB,甚至TB级。为了提高对对这些巨型数据库的读写和查询速度,Oracle提供一种分区技术。用户可以在创建表时应用分区技术,将数据以分区形式保存。
分区表是指将巨型的表或索引分割成相对较小、可独立管理的部分。分区后的表和未分区表在执行查询语句或DML语句时没有任何区别。相反,当对表进行分区后,使用DDL时还可以对每个单独的分区进行操作。因此,对巨型表或索引分区后,能够简化对它们的管理和维护操作,而这对于应用是完全透明的。
对表进行分区时,每个分区都有相同的逻辑属性,如每个分区都有相同的字段名、数据类型和约束等。但是各个分区的物理属性可以不同,各分区可以位于不同的表空间中。
2.2 分区表的优点
(1) 增强可用性:如果表的某个分区损害,表在其他分区的数据仍然可用。
(2) 维护方便:如果表的每个分区损害,只需修复该分区即可。
(3) 均衡IO:可以把不同的分区映射到不同的磁盘以平衡IO,改善整个系统性能。
(4) 改善查询性能:对分区表的查询可以只搜索自己关心的分区,以提高检索速度。
2.3 分区表的分类
在Oracle10g数据库中,分区的方法有多种:范围分区、列表分区、散列分区、组合范围散列分区和组合范围列表分区等,以下分别进行介绍。
2.3.1 范围分区
范围分区根据要分区表中一列或多列的范围将行映射到分区上。而且要分区的行应当平均地发布在每个分区中。为了使用范围分区,必须指定三个标准:分区方法;分区的一列或多列;每个分区的界限。
2.3.2 列表分区
使用列表分区,通过知道分区列中的离散值,列表分区可以明确地控制分区列中的每个值映射到分区的方式。
2.3.3 散列分区
如果数据的分布不能轻易地匹配范围分区模式或不知道表中的行数,但又希望得到分区表固有的好处,这种情况下采用分区列表是一种较好的选择。
2.3.4 组合范围列表分区
组合范围列表分区是对范围和列表分区技术的组合。通过该组合,首先对表进行范围分区,然后针对每个单独的范围分区再使用列表分区技术进一步细分。
2.3.5 组合范围散列分区
有时需要根据范围分区后,还需要将每个分区内的数据再散列地分布在几个表空间中。这种分区方法称为组合范围散列分区。组合范围散列分区是范围分区的一种改进形式,同时具有范围分区和散列分区的优势。
2.4 分区索引
在分区表上建立索引时,可以对索引进行分区,也可以不对索引进行分区。对索引进行分区的目的与对表进行分区的目的是相同的,都是为了更加易于管理和维护巨型对象。在Oracle10g数据库中,一共可以为分区表建立三种类型的索引:局部分区索引,全局分区索引和全局非分区索引。
2.5 分区表的维护
分区表建立好以后,在应用的过程中还需要经常对分区表进行维护和管理。日常维护和管理的内容包括:增加分区、合并分区、分割分区、删除分区和截取分区等。
3 分区表应用举例
下面具体介绍如何利用分区表技术存储海量的广播效果监测数据。对于表Gbxg_Tab,我们决定采用范围分区的方法,分区列为表Gbxg_Tab中的字段Mark_Datetime,该字段存储广播效果每次打分的时间。这样做的原因是广播效果打分的次数每天大致相同,按照字段Mark_Datetime范围分区时,可以确保不同分区的记录数相差不多,数据分布比较均匀。然后考虑分区界限:如果采用按年分区,每个分区需要存储一年的数据,这会导致分区数据太多而无法体现其优势;如果按月分区,每个分区只存储一个月的数据,数据量少了很多,但一年就有十二个分区,分区数太多,不好管理和维护。因此采取的是一个折中方案:按季度分区,每个分区存储一个季度的数据,这样每个分区的记录数不会太多,同时一年只有四个分区,分区数也不会太多。
以下是创建该分区表的具体命令(Sql>表示Sql命令行提示符):
在上述命令中,Create Table New_Gbxg_Tab表示新建一张表,表名为New_Gbxg_Tab。
Partition By Range (Mark_Datetime) 表示采用范围分区的方法, 分区列为Mark_Datetime。
接下来的五行分别指定五个分区,以第一行为例:Partition P2010a指定该分区名为P2010a, 代表2010年的第一季度;Values Less Than (To_Date (‘2010-04-01’, ’Yyyy-Mm-Dd’) 指定该分区的打分时间上限是2010年4月1日,即该分区存储的是2010年第一季度的广播效果打分数据;Tablespace App_Data_01指定该分区存储在表空间App_Data_01上。其它四行依此类推。前四个分区分别存储在四个不同的表空间上,这样做的好处是避免一个表空间的损坏不会影响到所有分区的数据。最后一个分区是为2011年提前创建的,打分时间上限Maxvalue表示没有时间限制。As Select*From Gbxg_Tab指定该表的数据取自广播效果打分表Gbxg_Tab(非分区表)。
分区表建完后,为了避免对应用的修改,需要将新表New_Gbxg_Tab改名为Gbxg_Tab。改名之前首先删除老表Gbxg_Tab:
Sql>Drop Table Gbxg_Tab;
然后将新表New_Gbxg_Tab改名为Gbxg_Tab
Sql>Alter Table New_Gbxg_Tab Rename To Gbxg_Tab;
为了提高检索速度,可以为表Gbxg_Tab创建索引,这里选择建立局部分区索引,因为它相对简单且易维护。
Sql>Create Index Gbxg_Idx On Gbxg_Tab (Mark_Datetime) Local;
其中索引名称为Gbxg_Idx,索引字段为Mark_Datetime, Local指定该索引为局部分区索引。
表和索引建完,我们再设想一下2010年结束进入2011年时需要做哪些工作?首先需要为表Gbxg_Tab创建五个新的分区,四个代表2011年的四个季度,最好一个代表2012年。这就需要用到上面分区表维护里面提到的分割分区命令:
上述四条语句共创建了五个分区。其中第一条语句将分区P2011进行分割为两个分区:P2011a和P2011,分割的打分时间点为2011年4月1日;P2011a存储在表空间App_Data_01上,P2011存储在表空间App_Data_02上。其它三条命令依此类推。
除了分割分区,这时需要做的工作可能还包括对历史数据的归档:即对2011年的数据进行归档。这时需要首先将表Gbxg_Tab里2010年的数据进行备份,备份完后再将这些数据从表Gbxg_Tab里删除。
备份最好采用Oracle自身提供的逻辑备份工具Exp进行,Exp支持对分区表里的指定分区进行导出:
, Dos>Exp Username/Password@Gbwdb Tables= (Gbxg_Tab:P2010a, Gbxg_Tab:P2010b, Gbxg_Tab:P2010c, Gbxg_Tab:P2010d) File=Gbxg_2010.Dmp Log=Gbxg_2010.Log
在上述命令中,Username/Password@Gbwdb指定连接广播网数据库的用户名、密码和数据库名;Tables= (Gbxg_Tab:P2010a, Gbxg_Tab:P2010b, Gbxg_Tab:P2010c, Gbxg_Tab:P2010d) 指定要导出分区表G bx g_Ta b里四个分区P2010a、P2010b、P2010c、P2010d的数据;File=Gbxg_2010.Dmp指定导出数据存储在二进制文件Gbxg_2010.Dmp里;Log=Gbxg_2010.Log指定导出日志存储在文本文件Gbxg_2010.Log里。
备份完后,就可以删除2010年四个分区里的数据了。可以直接删除分区,也可以截取分区。
分区表建好后,还有一个问题需要注意:如果用户修改了表Gbxg_Tab中分区列Mark_Datetime里的数据,使得被修改记录记录从一个分区移动到其它分区(例如打分时间原来是2010年1月10日,修改为2010年8月10日),系统会报错ORA-14402:更新分区关键字列将导致分区的更改。
这时需要对表Gbxg_Tab进行如下修改:
Sql>Alter Table Gbxg_Tab Enable Row Movement;
该命令的作用是将表Gbxg_Tab设置为允许行移动,这样系统就不会报错了。
4 结束语
随着广播监测系统规模的不断扩大和监测业务的不断发展,广播监测系统数据库里的巨型表和索引会越来越多,利用Oracle的分区技术,将这些巨型的表或索引分割成相对较小可独立管理的部分,无疑会使简化数据库的管理和维护工作,同时也使数据库的性能得到改善。
参考文献
[1]董志鹏等著.《Oracle11g从入门到精通》.北京:电子工业出版社, 2008年.
1 Oracle的分区功能
1.1 分区的定义
分区就是将一个表或索引物理地分解为多个更小、更可管理的部分。就访问数据库的应用而言, 逻辑上讲只有一个表或一个索引, 但在物理上这个表或索引可能由数十个物理分区组成。每个分区都是一个独立的对象, 可以独自处理, 也可以作为一个更大对象的一部分进行处理[2]。
1.2 采用分区技术管理数据的特点
分区有利于管理非常大的表和索引, 它使用了一种“分而治之”的逻辑。分区引入了一种分区键 (partition key) 的概念, 分区键用于根据某个区间值 (或范围值) 、特定值列表或散列函数值执行数据的聚集。采用分区管理海量数据的好处如下: (1) 改善查询性能:利用表分区技术将一个大表水平分区成若干小的分区。 查询时只需访问某些分区数, 减少了对大表的全表扫描, 缩短了磁盘检索时间, 加快了查询速度。 (2) 减少管理负担:与在一个大对象上执行操作相比, 在小对象上执行同样的操作从本质上讲更为容易, 速度更快, 而且占用的资源也更少。对数据表进行分区后利于数据的备份与恢复, 并且可以灵活分配磁盘使用, 极大地提高了磁盘性能, 便于管理。 (3) 提高可用性:表中的每个分区具有很好的独立性, 对象中一个分区的可用性或不可用性并不意味着对象本身是不可用的。此外还可以通过减少出现错误时的停机时间来提高可用性, 因为恢复所需的工作量大幅减少。 (4) 分区对用户透明, 最终用户感觉不到分区的存在[3]。
2 Oracle分区技术介绍
针对大型数据表的管理, Oracle数据库管理系统提供了区间分区、列表分区、散列分区、组合区间-列表分区、组合区间-散列5种分区方案, 其特点如下: (1) 区间分区 (range partitioning) :由一定范围值的分区关键字指定每个分区, 这是最常用的分区类型 而且常常分区键为日期类型。 (2) 列表分区 (list partitioning) :由列表值的分区关键字指定每个分区, 能够准确地控制数据行到分区的映射, 用一种自然方式组织无序和无关联的数据集。 (3) 散列分区 (hash partitioning) :将散列算法用于分区关键字来确定指定行的分区, 通过散列函数控制数据行到分区的映射, 分区易于实现, 并且有助于提高并行查询、连接等操作的执行性能。 (4) 组合分区 (composite partitioning) 组合分区首先进行区间分区, 然后在每个子分区中使用散列或列表分区。组合区间-散列分区结合了区间分区提供的增强的管理性和散列分区并行化查询的优势, 组合区间-列表分区结合了列表分区的可管理性和列表分区用于准确控制的优势。
以上4种分区方案都具有各自不同的应用特征, 因此在选择何种分区方案前需对实施的对象进行综合分析, 在实际应用中根据需求及分区键的属性特征选定一种适合的分区方法。下面将结合公共卫生数据共享中法定报告传染病历史数据管理说明如何应用分区方案。
3 Oracle分区技术在公共卫生数据共享数据管理系统中的应用
法定报告传染病历史数据是我国公共卫生数据共享中的一个重要部分, 该数据库存储了1997年至今的全国至县级的法定报告传染病报告数据:分地区统计表、分年龄性别统计表和分职业统计表, 每张表的数据量均为千万级, 而且每年都有几百万的数据增长量, 每天都有各地疾病预防控制相关部门进行数据访问, 系统吞吐量和数据访问量巨大。因此选择采用Oracle分区技术对这3张表进行有效的分区管理, 用以提高系统的访问性能和维护性能。
3.1 选择分区表的策略
分区键的选择是决定分区方案的关键步骤。分区键的值分布得越平均, 各分区的空间大小就越均等, 磁盘I/O负载就越均衡[4], 因此分区键决定了采用的分区方案。
法定报告传染病历史数据是以时间年度进行管理维护的, 以分地区统计表为例, 该表记录了历年各地各类法定报告传病的发病和死亡情况。根据业务需求, 传染病历史数据一般按时间进行查询和维护, 且表中的year (年份) 字段记录了传染病报告的年份。因此采用了列表分区方案, 选用表中的year (年份) 作为分区键。这样当有新年度的数据加入时, 只需要增加一个新的分区就可以了, 大大减少了数据管理的负担。图1说明了对分地区统计表应用列表分区后的结构。
3.2 建立分区表
确定了分区策略后将按照相应的策略建立对应的分区表。以下是建立T_CRB_REGION表的操作语句, 需要指定表名、列名和列的数据类型等。
这是创建分区表的语句, 其中指定了按照year (年份) 进行分区。例如, 年份等于“1997”的数据将放在“P 1997”分区中, 其他分区也依此原则建立。注意最后一个分区的定义, 不需要为最后一个分区指定列表值, DEFAULT关键字告诉Oracle使用这个分区存放任何前面分区所不能存放的数据。
3.3 创建索引分区
上面的关键字LOCAL告诉Oracle为表T_CRB_REGION的各分区创建独立的索引。
3.4 分区表的维护
Oracle中提供了查看分区、增加分区、删除分区、移动分区、分割分区、合并分区、截取分区、导出分区和导入分区等分区维护方法[5]。通过这些方法可以对分区表进行管理和数据的备份与恢复等工作, 使得历史数据的管理变得更加简便灵活;可以随时从数据表中备份出暂时已经不需要的历史数据分区数据, 然后从数据表中删除对应分区, 这样将大大减少数据表的规模, 提升数据库和应用系统的性能;当需要时也可以很方便地通过增加分区来恢复数据。
3.5 系统优化后的运行效果
(1) 大大改善了系统性能, 成倍提高了查询和统计的速度。对大数据表进行分区管理后, 表的查询、统计等操作可以分解到表的不同分区来并行执行, 跳过无关分区的访问, 大大提高了运行速度, 某些查询操作时间缩短了约6~10倍。 (2) 分区对用户完全透明, 不影响查询统计结果, 对已创建分区的数据表进行查询, 跟未分区前的查询是一样的。虽然数据存放在不同的分区上, 但Oracle的列表分区仍可查出正确的结果。 (3) 系统可用提高了, 数据备份与恢复工作变得容易。如果表的一个分区由于系统故障而不能使用, 其余好的分区仍然可以正常使用。把表的不同分区放在不同磁盘驱动器上, 降低了磁盘带来的数据不可用性。利用Oracle表空间具有的联机备份功能[4], 可以在线备份表的分区, 这样备份/恢复过程就更快了。如果属于表的分区需要做存储介质的恢复, 那么该表未受影响的分区依然可以存取。
综上可见, 通过在公共卫生数据共享数据管理系统中合理应用分区技术, 大大改善了系统的性能, 加快了数据查询统计的速度, 降低了数据管理和维护的工作量, 简化了数据的备份与恢复工作, 对建立一个先进、高效的公共卫生数据共享数据管理系统起到了促进作用。当然, 并不是所有的数据库应用都需要使用分区技术, 当数据表记录数大到一定程度时, 使用分区技术才能显著提高系统的可维护性、性能及可用性。
参考文献
[1]樊秀娥, 李欣欣.公共卫生数据共享政策探讨〔J〕.中国卫生工程学, 2006, 5 (2) :113.
[2] (美) Thomas Kyte著, 苏金国, 王小振译.Oracle 9i&10g编程艺术数据库体系结构〔M〕.北京:人民邮电出版社, 2006:900.
[3]庄建阳.ORACLE8的分区管理功能及在社会保险管理管理信息系统中的应用〔J〕.医学信息, 2004, 17 (2) :76-77.
[4]徐小燕, 张桂珠.Oracle表分区技术在税务纳税申报系统的应用研究〔J〕.电脑知识与技术, 2009, 5 (21) :5615-5617.
【Oracle分区索引】推荐阅读:
医院食堂就餐分区管理02-01
土地用途分区管理制度04-10
笔记本电脑硬盘无法分区怎么办03-17
oracle 笔试06-30
经典oracle语句09-30
oracle学习总结11-20
图解学习oracle12-09
怎样学习oracle02-14
ORACLE学习日记03-03
oracle数据库总结06-03