基于ORACLE数据库自动回收高水位的方法与流程

文档序号:21456560发布日期:2020-07-10 17:52阅读:1293来源:国知局
本发明涉及一种数据库高水位回收方法,尤其涉及一种基于oracle数据库自动回收高水位的方法。
背景技术
::oracle数据库系统的架构从初期的几台服务器到如今庞大的数据中心,单靠人工已无法满足数据库系统的运维需求,那么标准化、自动化、过程优化等自动化运维概念元素越来越为人们所重视。自动化运维解决的核心问题之一即为性能问题。性能问题是大问题,性能不好,再好的应用也发挥不了作用,通常表现出来的症状就是慢,所有的业务人员或者客户都得等待。hwm(highwatermark)是oracle数据库段级别的概念,高水位线的存在影响oracle数据库的性能。因为,在表仅有dml(比如delete、insert)操作时,高水位线只会增长,不会降低。具体来说,由于程序使用的delete语句不回收使用过的空间,数据虽然删除了,但是高水位线却没有降低,仍然处于之前的水位。随着数据的插入和删除,高水位线不断增长,表空间文件中的已使用空间会逐渐增大,当所有的空闲空间均被使用后,表空间文件的大小会在操作系统级别增大,直到达到最大可扩展大小,如图1所示。由于oracle的select语句会扫描高水位线以下的所有块,已分配而无数据的块过多时,必然会影响语句的执行效率。而降低高水位能提高表的扫描效率。降低高水位线可以通过回收高水位操作shrinkspace对高水位之下未储存数据的块加以回收,并降低高水位线。既能减少空间使用,又能提高查询效率,而对表内的数据、表上的索引没有影响,但是,回收高水位操作shrinkspace是表和段级别的操作,能释放表空间文件内的空间,但不能缩小表空间文件的大小,同时,回收操作是ddl操作而非dml操作,不能由应用程序完成,需要管理员手动完成。现有的高水位回收方法,都是通过手动完成,手动执行做不到及时处理,而且比较耗时,同时,手动回收高水位,需要重建高水位,耗费较多的主机资源,也会影响数据库的性能。因此,有必要对现有数据库高水位回收方法进行改进。技术实现要素:本发明要解决的技术问题是提供一种基于oracle数据库自动回收高水位的方法,能够对是否达到回收执行要求进行判断,减少误操作及对数据库的性能影响。本发明为解决上述技术问题而采用的技术方案是提供一种基于oracle数据库自动回收高水位的方法,包括如下步骤:s1:将高水位回收脚本部署到数据库所在的主机上;s2:通过高水位回收脚本从数据库所在的主机获取信息,确认主机处于允许进行高水位回收的状态;s3:通过高水位回收脚本登录数据库,对数据库中的表进行高水位的回收;s4:对进行高水位回收的表进行重建表索引,完成数据库的高水位回收。进一步的,所述步骤s2具体包括:s21:高水位回收脚本从主机提取当前cpu使用率信息和当前时间信息,通过cpu使用率信息得到当前cpu空闲率;s22:将当前cpu空闲率与设定的空闲率进行比较,确认当前cpu空闲率大于设定的空闲率;s23:将当前时间与设定的低业务时间域进行比较,确认当前时间处于低业务时间域内;s24:同时满足步骤s22和s23则允许进行高水位回收操作,否则,中断操作并输出日志。进一步的,所述步骤s3具体包括s31:通过sqlplus命令登录数据库;s32:采用select命令,通过视图user_tables命令进行表查询,获取表信息,并将表信息导出;s33:对导出的表信息进行比较,确认需要进行高水位回收的表;s34:对需要进行高水位回收的表通过重建表、移动表和收表命令进行表重建,释放表空间,回收高水位。进一步的,所述步骤s32中将获取的表信息进行过滤后导出到已经保存的文本中;过滤后导出的的表信息包括表名、所属的schema、表行数、表块数、表初始化大小和表当前占用大小。进一步的,所述步骤s33具体包括:对导出的表行数、表块数、表初始化大小和表当前占用大小进行比较确认该表是否需要进行高水位回收;若表信息的比较结果存在以下情形中的一种,则说明该表需要进行高水位回收,具体包括:表行数为零且表当前占用大小大于表初始化大小;表行数与表块数的比值小于设定的比值,设定的比值为5。进一步的,所述步骤s34还包括在回收高水位后进行表查询获取高水位回收后的表行数,高水位回收后的表行数小于原表行数,确认该表的高水位回收成功。进一步的,所述步骤s4具体包括:通过indexrebuild命令对高水位回收后的表重建表索引,完成所有表的高水位回收后输出日志。本发明对比现有技术有如下的有益效果:本发明提供的基于oracle数据库自动回收高水位的方法,在需要执行回收高水位操作之前,对主机当前的负载和当前时间进行判断,达不到执行的要求,则不执行操作,对数据库性能影响小,使数据库的性能保持在一个高效的位置;只需要将脚本部署到数据库当前的主机上,设置完成后自动维护,对硬件和系统依赖度小,设有相应的输出日志,可清晰了解执行动态,降低对人的依赖,减少误操作,减少人工操作的时间成本。附图说明图1为高水位线与表空间的关系图;图2为本发明实施例中基于oracle数据库自动回收高水位的方法流程图。具体实施方式下面结合附图和实施例对本发明作进一步的描述。图2为本发明实施例中基于oracle数据库自动回收高水位的方法流程图。请参见图2,本发明实施例的基于oracle数据库自动回收高水位的方法,包括如下步骤:s1:将高水位回收脚本部署到数据库所在的主机上。s2:通过高水位回收脚本从数据库所在的主机获取信息,确认主机处于允许进行高水位回收的状态。通过高水位回收脚本从主机提取当前cpu使用率信息和当前时间信息,通过cpu使用率信息得到当前cpu空闲率;将当前cpu空闲率与设定的空闲率进行比较,并将当前时间与设定的低业务时间域进行比较,如果当前cpu空闲率大于设定的空闲率且当前时间处于低业务时间域内,则允许进行高水位回收操作,否则,中断操作并输出日志。自动判断cpu空闲率是否允许进行高水位回收操作,同时自动判读是否在业务的低峰期,在合适的时间进行高水位回收操作,从而降低了操作的风险,也降低的时间成本。s3:通过高水位回收脚本登录数据库,对数据库中的表进行高水位的回收。首先通过sqlplus命令登录数据库;然后采用select命令,通过视图user_tables命令进行表查询,获取表信息将获取的表信息进行过滤后导出到已经保存的文本中,便于进行比较操作;过滤后导出的的表信息包括表名、所属的schema、表行数、表块数、表初始化大小和表当前占用大小;对导出的表行数、表块数、表初始化大小和表当前占用大小进行比较确认该表是否需要进行高水位回收;若表信息的比较结果存在以下情形中的一种,则说明该表需要进行高水位回收,具体包括:表行数为零且表当前占用大小大于表初始化大小;表行数与表块数的比值小于设定的比值,设定的比值为5。对需要进行高水位回收的表通过通过重建表、移动表和收表命令进行表重建,释放表空间,回收高水位,在回收高水位后进行表查询获取高水位回收后的表行数,高水位回收后的表行数小于原表行数,确认该表的高水位回收成功。s4:对进行高水位回收的表进行重建表索引,完成数据库的高水位回收。通过indexrebuild命令对高水位回收后的表重建表索引,完成所有表的高水位回收后输出日志。因为move操作,会导致表数据的行标识符rowid发生变化,那么对应的索引也会失效,为了不影响数据库查询性能,在一个负载低的时间在线对索引rebuild,尽可能将影响降到最低的。综上所述,本发明实施例的基于oracle数据库自动回收高水位的方法,在需要执行回收高水位操作之前,对主机当前的负载和当前时间进行判断,达不到执行的要求,则不执行操作,对数据库性能影响小,使数据库的性能保持在一个高效的位置;只需要将脚本部署到数据库当前的主机上,设置完成后自动维护,对硬件和系统依赖度小,设有相应的输出日志,可清晰了解执行动态,降低对人的依赖,减少误操作,减少人工操作的时间成本。虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善,因此本发明的保护范围当以权利要求书所界定的为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1