Oracle 分区功能可以提高许多应用程序的可管理性性能与可用性通过分区功能可以将表索引和索引组织表进一步细分为段从而能够更精确地管理和访问这些数据库对象Oracle 提供了种类繁多的分区方案以满足每种业务要求而且因为在 SQL 语句中分区是完全透明的所以该功能几乎可应用于任何应用程序
分区功能的优势
分区功能通过改善可管理性性能和可用性从而为各式应用程序带来了极大的好处通常分区可以使某些查询以及维护操作的性能大大提高此外分区还可以极大简化常见的管理任务通过分区数据库设计人员和管理员能够解决前沿应用程序带来的一些难题分区是构建千兆字节数据系统或超高可用性系统的关键工具
分区功能的基本知识
分区功能能够将表索引或索引组织表进一步细分为段这些数据库对象的段叫做分区每个分区有自己的名称还可以选择自己的存储特性从数据库管理员的角度来看一个分区后的对象具有多个段这些段既可进行集体管理也可单独管理这就使数据库管理员在管理分区后的对象时有相当大的灵活性但是从应用程序的角度来看分区后的表与非分区表完全相同使用 SQL DML 命令访问分区后的表时无需任何修改
表的分区是通过分区键来实现的分区键指的是一些列这些列决定了某一行所在的分区Oracle 数据库 g 提供了六项技术用于对表进行分区
范围分区
每个分区都由一个分区键值范围指定(对于一个以日期列作为分区键的表 年 月分区包含分区键值为从 年 月 日到 年 月 日的行)
列表分区
每个分区都由一个分区键值列表指定(对于一个地区列作为分区键的表北美分区可能包含值加拿大美国和墨西哥)
散列分区
将散列算法用于分区键来确定指定行所在的分区
组合范围散列分区
范围和散列分区技术的组合通过该组合首先对表进行范围分区然后针对每个单独的范围分区再使用散列分区技术进一步细分索引组织表只能进行范围分区
组合范围列表分区
范围和列表分区技术的组合通过该组合首先对表进行范围分区然后针对每个单独的范围分区再使用列表分区技术进一步细分索引组织表可以按范围列表或散列进行分区
Oracle 数据库 g 还提供了三种类型的分区索引
本地索引
本地索引是其分区方式与其所在基础表的分区方式一模一样的索引本地索引的每个分区仅对应于其所在基础表的一个分区
全局分区索引
全局分区索引是使用不同于其所在表的分区键进行分区的索引其所在表可以是分区表或非分区表全局分区的索引可以使用范围或散列分区进行分区例如某个表可以按月份进行范围分区因此具有十二个分区而该表上的索引则可以使用不同的分区键进行范围分区从而具有不同的分区数量
全局非分区索引
全局非分区索引基本上和非分区表的索引一样索引结构是不分区的
Oracle 提供了一系列丰富的技术可用于对表索引和索引组织表进行分区因此可以针对任何业务环境中的任何应用程序进行最佳的分区 Oracle 还提供一套完整的 SQL 命令用于管理分区表其中包括添加新分区删除分区分拆分区以及合并分区的命令
用分区功能提高可管理性
通过 Oracle 分区功能可将表和索引分成更多更小的可管理单元从而使数据库管理员能以化整为零个个击破的方式管理数据
使用分区功能维护操作可集中于表的特定部分例如数据库管理员可以只对表的一部分做备份而不必对整个表做备份对整个数据库对象的维护操作可以在每个分区的基础上进行从而将维护工作分解成更容易管理的小块
利用分区功能提高可管理性的一个典型用法是支持数据仓库中的滚动视窗加载进程假设数据库管理员每周向表中加载新数据可以对该表进行范围分区使每个分区包含一周的数据这样加载进程只是简单地添加新的分区添加一个分区的操作比修改整个表效率高很多因为 DBA 不需要修改任何其他分区
用分区功能提高性能
由于限制了所检查或操作的数据数量同时支持并行任务执行Oracle 分区功能实现了性能上增益这些特性包括
分区修整
分区修整是用分区功能提高性能的最简单最有价值的手段分区修整常常能够将查询性能提高几个数量级例如假设某个应用程序包含一个存储订单历史记录的 Orders 表并且此表已按周分区查询一周的订单只需访问该订单表的一个分区如果该订单表包含两年的历史记录这个查询只需要访问一个分区而不是一百零四个该查询的执行速度因为分区修整而有可能快一百倍分区修整能与所有其他 Oracle 性能特性协作Oracle 能将分区修整功能与任何索引技术联接技术或并行访问方法结合使用
分区智能联接
分区功能可以通过称为分区智能联接的技术提高多表联接的性能当两个表要联接在一起而且每个表都用联接键来分区时就可以使用分区智能联接分区智能联接将大型联接分解成较小的发生在各个分区间的联接从而用较少的时间完成全部联接这就给串行和并行的执行都能带来显着的性能改善
用分区功能提高可用性
分区的数据库对象具有分区独立性该分区独立性特点可能是高可用性战略的一个重要部分例如如果分区表的一个分区不能用但该表的所有其他分区仍然保持在线并可用那么这个应用可以继续针对该分区表执行查询和事务处理只要不是访问不可用的分区数据库操作仍然能够成功运行
数据库管理员可以指定各分区存放在不同的表空间里从而让管理员隔离其它表分区针对单个分区进行备份与恢复操作还有分区功能可以减少计划停机时间由于分区功能改善了性能使数据库管理员能用相对较少的时间完成大型数据库对象的维护工作
未来发展方向
自从引入分区技术以来Oracle 公司在每次推出重要版本时都会增加新的分区方法Oracle 引入了范围分区功能Oraclei 引入了散列和组合范围散列分区功能Oraclei 引入了列表分区功能在最新版本 Oracle 数据库 g 中则增强了用于索引组织表和全局分区索引的分区策略并且扩展了其用于所有分区维护操作的并发索引维护功能Oracle 公司致力于不断完善分区技术确保满足所有的业务需求
结论
具有 Oracle 分区功能的 Oracle 数据库 g 可以显着增强几乎任何数据库应用程序的可管理性性能和可用性分区功能可用于前沿应用程序分区功能确实能够成为保障这些应用程序成功的关键技术成分同时分区功能也可用于较为普通的数据库应用来简化这些应用的管理工作降低管理成本