无论数据表采用了什么样的存储技术,经过一定的时间和事务处理运行后,在存储空间里都会产生一些“碎片”,从而导致性能下降。此外,由于预先估计的不足,很可能会发现已经定义的表空间的大小不能满足需要等情况,这些问题都是管理员进行数据库的日常管理维护过程中会遇到的问题,解决这些问题的一个有效的办法就是表的重组。
数据表性能下降的原因
1.迁移的数据行
对数据表的更新操作会引起数据行的扩展,因此当一个数据块中的空闲空间不足以容纳某个数据行时,这行数据将从初始的数据块移到重新分配的数据块中,这就是数据行的迁移,Oracle 9i系统必须在初始块中保留一个指针指向这一数据行所在的新块的ID,如果一个数据表中有很多迁移行,为了检索或更新发生迁移的数据行,每次操作必须读取两个数据块,这样表的性能必然会降低。
解决数据行的迁移的一个有效的办法就是设置有效的存储参数值“PCTFREE”,通过对表的数据的分析得出的统计信息可以帮助管理员确定一个合适的PCTFREE值。
2.链接的数据行
如果某个数据行的大小大于数据块的大小,比如LOB(Large Object,大对象)数据类型的数据表就极有可能会产生数据行的链接。在每个数据块里都要设计指针指向下一个数据块的ID。因此,当链接过多时也会造成性能的下降。
解决数据行的链接问题只能通过优化这些构成同一个数据行的数据块的存储,尽可能将他们存储在物理上相邻的数据块中。
重组的含义
重组,顾名思义,就是结构的重新组织。在Oracle 9i中提供了名为Reorg Wizard(重组向导)的操作。Reorg Wizard通过解决空间利用率来帮助管理员维护数据库,使之运行良好,Reorg Wizard 提供了3个重组功能。
重组特定方案对象:可以对特定的方案对象进行重组,尤其是对数据表的重组,可以在表空间之间移动数据表,可以更改表的存储参数,指定新的空闲表管理参数和新的事务处理参数。Oracle 9i对表的重组是通过创建新的数据段、复制数据、删除旧的数据段3个步骤完成的,可以在同一表空间完成,也可以在不同的表空间完成,但表空间的空闲空间要足够大。
重组整个表空间:主要完成修复表空间的空闲空间碎片以提高性能。
修复移植行:修复数据表或数据表分区中的迁移数据行。
Oracle 9i中可重组的方案对象包括:表 (包括含 LOB 列的表)、表范围分区、索引、索引范围分区、索引簇和散列簇。修复移植行功能移植的行已被修复,但并未执行整个对象的完全重组,可以修复移植的行的方案对象包括表和表分区。
利用重组向导进行表的重组
在Oracle 9i中表的重组可以通过图形化的重组向导操作来进行。重组操作将由一个 【企业管理器】的作业使用Oracle Agent(代理)来执行,这就要求执行重组的服务器节点上有Enterprise Manager Console(企业管理器控制台)、Oracle Management Server(管理服务器) 和Agent,而且Agent必须运行在数据库重组处的同一节点上。
(1)以【登录到管理服务器】方式来登录【企业管理器】,在【管理目标导航器】中选择【网络】/【数据库】/【myoracle.m.net】/【方案】/【表】/【HR】/【EMPLOYEES】选项,单击鼠标右键,在弹出的快捷菜单里选择【重组】选项,如图13.43所示。
(2)出现如图13.44所示的重组向导的【欢迎使用】的界面,单击按钮。
(3)出现如图13.45所示的重组向导的【对象属性】界面的对象的【一般属性】选项卡。在【对象导航器】中是按照【用户名】/【表】/【表名】/【从属对象】分级组织对象的,单击选择某个对象后,在右边的【对象属性编辑区】里出现该对象的【一般信息】选项卡。
这里选择【表】/【EMPLOYEES】,在【一般信息】选项卡的【表空间】下拉列表框里可以更改数据表所属的表空间。
(4)切换到如图13.46所示的重组向导的【对象属性】界面的对象的【存储】选项卡。可以修改表的数据区的【初始大小】参数、事务处理数量的【初始值】参数、空闲列表的【空闲列表】参数等,设置修改完毕后单击按钮。
表的重组操作可以更改表空间,但无法修改表的结构,如果选择修改表的结构是无法更改表空间的。
(5)出现如图13.47所示的重组向导的【重组方法】界面,有两种重组的方法供选择:脱机重组和联机重组,两种重组方法比较如下。
【速度(脱机重组)】单选钮:表示使用脱机重组的方法,侧重于重组的速度,但需要先将数据库脱机,脱机重组的所有操作不记入REDO日志文件因此速度较快。
【可用性(联机重组)】单选钮:表示使用联机重组的方法,侧重于可用性。生成的脚本将在相应服务器可以支持的情况下充分利用联机功能的长处,在重组的过程中,数据表上仍然可以执行数据的查询操作,但不允许有插入、更新和删除操作,仍然保留表的各种存取权限。
这里选择【可用性(联机重组)】单选钮,单击按钮。
(6)出现如图13.48所示的重组向导的【暂存表空间】界面。重组向导一般通过将数据移到它在数据库中创建的临时对象来执行重组。当重组内容小于整个表空间时,可选择在其当前表空间创建这些临时对象,也可以另外使用一个暂存表空间。使用当前表空间更为快捷,因为对象只移动了一次。但是创建并使用暂存表空间可以避免在当前表空间内进行的重组对空间的影响,有两个选项可供选择。
【当前表空间】单选钮:对象所在的表空间如果有足够的空间来维护当前对象的两个副本时选择此项,数据只需要移动一次,因此效率最高。
【暂存表空间】单选钮:若对象所在的表空间没有足够的空间来维护当前对象的两个副本时选择此项,数据需要移动两次。
这里选择【当前表空间】单选钮,单击按钮。
(7)出现如图13.49所示的重组向导的【效果报告和作业概要】界面,共有两个选项卡。
【效果报告】选项卡:效果报告提供一个错误列表,或者提供被发现的关于重组作业的其他问题,还提供有关被重组的对象以及将要执行的操作的信息。
【作业概要】选项卡:生成的作业脚本,包括用来执行重组的数据库命令的概要。实际脚本中既有来自概要的数据库命令,也有执行该作业所需的Oracle事务处理语句。
单击按钮将自动生成效果报告和作业概要。
(8)重组向导将完成效果报告和作业概要的生成过程,该过程持续时间较长,生成完毕后的界面如图13.50所示,单击“关闭”按钮。
(9)在图13.49中单击按钮,出现如图13.51所示的重组向导的【调度】界面。在这里可以用于指定需要运行重组作业的时间。
选择【立即执行】单选钮表示将作业提交给Oracle Agent作业系统并立即执行该作业。
选择【稍后提交】单选钮可以设置运行作业的日期和时间,如果希望在访问系统的用户较少时运行作业,则该项特别有用,它将重组作业提交给Oracle Agent,以便在预定的时间执行。这里选择【立即执行】单选钮,单击按钮。
(10)出现如图13.52所示的重组向导的【概要】界面。概要报告重组向导的设置参数,包括以下3类。
一般信息:包括重组选项、暂存表空间、重组方法参数。
作业信息:包括名称、说明、目标、调度参数。
已选对象:包括选择用于重组的对象。
单击“确定”按钮。
(11)重组操作最后形成一个作业被提交给Oracle 9i的作业系统,由作业系统自动调度完成,成功提交后出现如图13.53所示界面。成功提交并不等于作业就能成功执行,如果选择的表空间空闲空间不够或者表空间读写有问题都将导致作业的执行失败。