Oracle数据库的日常维护实践研究
2019-01-23王淑平刘杉
王淑平, 刘杉
(湖北省肿瘤医院,武汉 430079)
0 引言
Oracle数据库是甲骨文公司研发的一款优秀的关系型数据库产品,在国内政府机关、企事业单位、医疗机构中被广泛应用。Oracle数据库具有性能稳定、功能强大、移植性好等特点,适用于多种环境,能够满足不同的数据处理和业务需求。在Oracle数据库使用过程,需要做好Oracle数据库日常维护工作,从而保证Oracle数据库正常高效地运行。
1 Oracle数据库的日常维护内容
Oracle 数据库经过多年的不断完善,现在已经成为较为成熟的产品,Oracle 数据库的体系结构如图1所示。
图1 Oracle 数据库的体系结构
Oracle数据库的日常维护内容包括六个方面。(1)运行状态检查,通过检查服务、进程、监听、定时作业等运行状态,及时发现数据库是否处于正常工作状态。(2)实时性能监测,对服务器参数(如CPU占用率、I/O情况等)、数据库性能(如session数、cache命中率、锁情况等)进行实时监控,时刻掌握数据库的性能状况。(3)空间使用情况,主要是表空间、本地存储和共享存储的剩余情况,保证足够的磁盘空间。(4)日志文件检查,通过监控警告日志文件alert_〈SID〉.log,捕获数据库运行过程中的异常,及时处理解决。(5)用户及权限监管,关注每个用户的状态和权限分配,管理好权限传递和角色,确保数据的正常产生和不被非法操作。(6)备份与恢复管理,灵活应用逻辑备份和物理备份方式做好数据的备份工作,通过RMAN工具,以自动化脚本的方式,定期对数据库备份,通过数据泵expdp/impdp工具,结合业务的实际需要,快速导入导出指定数据。此外,还要定期检查备份的有效性,保证备份能够正常使用。
2 Oracle数据库的日常维护工作
2.1 运行状态检查
作为数据库管理员,应当首要关注数据库的整体运行状态。Oracle数据库的运行状态检查主要包括服务状态、进程状态、监听状态、数据库状态、定时作业JOB情况等。数据库服务的开启和关闭一定要按照正确的顺序进行,错误的操作顺序可能会导致服务的异常。Oracle的进程需要重点检查名字以ora_开头进程,检查进程状态是否正常。监听的正常与否,直接影响到用户是否能远程或者通过应用程序连接到数据库,用户端的TNS提示可以判断监听服务的异常。数据库正常连接后可以通过SQL*plus检查数据库实例、文件、配置参数的情况。定时作业JOB是为解决某些特定需求而定时执行的任务,具有自动性,数据库管理人员需要检查确保JOB的有效性和执行产生的结果。
2.2 实时性能监测
在日常维护中,分析Oracle数据库的性能是一件非常重要的工作,通常可以通过AWR和Statspack报告来进行分析,获得数据库历史状态。AWR和Statspack报告是通过收集历史数据进行事后分析,具有时间滞后性,不能及时发现问题,因此进行实时性能监测能及时发现问题,做出应对之策。
Oracle数据库的实时性能监测需要综合多项运行参数进行综合评判。在运维实践中,一般会对服务器关键参数和数据库核心性能进行实时监测。服务器关键参数,如进程数量和CPU的占用率、内存使用情况、I/O读写效率以及磁盘的占用率等参数进行实时观察,尤其是其使用峰值及其持续时间是判断的重要依据,比如长时间占用CPU通常推断出有大事务SQL在执行,再配合AWR报告可以进行查看。数据库核心性能,如session数、cache命中率、锁情况等进行实时监测,及时动态调整参数或人工干预,比如出现死锁等待时,要及时进行杀死相关进程以解除死锁,保证数据库的可用性。
2.3 空间使用情况
Oracle数据库系统的存储日常检查维护主要包括表空间、本地存储、共享存储等。其中,表空间是Oracle数据库的逻辑划分,用以存逻辑存放数据文件,本地存储通常为Oracle服务器的本地磁盘,用来安装数据库软件等,共享存储一般在集群中用来物理存放数据文件、归档日志文件以及备份文件等。
表空间的日常维护主要是检查表空间的使用情况,尤其是表空间的剩余容量,表空间不足会造成数据库性能下降,表空间已满会造成数据无法正常写入。数据库管理人员应当定期关注表空间的剩余情况和表空间的数据增长情况,根据“二八”原则,表空间剩余低于20%时,应该重点关注,表空间剩余空间低于10%时,要及时采取措施,如扩展表空间等。本地存储和共享存储是物理存放Oracle系统及各种文件的地方,需要定期检查存储的空间使用情况,根据文件的增长率,适时扩容。
2.4 日志文件检查
Oracle警告日志文件alert_〈SID〉.log是数据库运维过程中的一类特殊的跟踪文件,按时间顺序记录了message和错误信息。在日常运维过程中,警告日志十分重要,是数据库遇到问题时候首要检查的文件。
Oracle数据库管理人员应当重视警告日志文件,了解日志的存放位置、日志包括的内容,能通过专门的工具,如Linux中grep工具或外部表的方式,时刻监控日志中出现的各种提示,及时了解数据库的状态。日志中需要重点检查警告提示,如“Error”、“ORA-错误(如内部错误ORA-600)”、“Failed”等报错信息;管理操作,如数据库的启动、关闭等信息,内部参数调整等信息,表空间的创建、删除等操作;checkpoint事件的执行等。数据大部分的异常运行信息提示都会在警告日志中所有反应,Oracle 数据库管理人员应该及时检查alert_〈SID〉.log,根据报错提示解决问题。
2.5 用户及权限监管
一个完整的数据库系统中通常拥有很多用户,这些用户以不同权限对数据库进行各种操作,是数据的产生者和管理者。Oracle数据库通过授权管理和角色管理对用户的权限进行分配和管理。数据库管理人员要随时关注每个用户的状态和权限分配,管理好权限传递和角色,以保证数据的正常产生和不被非法操作。用户权限分配应该遵循“最小权限原则”。数据库管理人员要重点关注高权限用户和临时用户,高权限用户应该做好操作日志记录,接受安全审计;临时用户通常是因为某些临时或短期需求而产生的用户,使用完后应该及时停止或删除用户,以保证安全。在运维中,经常使用profile文件对用户的密码进行管理,常见的方法包括登录限制锁定机制和强制密码过期修改,如高权限用户连续3次尝试登录失败后,则该用户被限制登录进入锁状态,不允许再继续尝登录。
2.6 备份与恢复管理
数据库备份是为了在数据出现故障(如数据丢失、损坏等)时,能快速地实现数据恢复,从而起到数据保护作用。通常数据库的备份分为逻辑备份和物理备份,逻辑备份是以数据文件为基本单位导出数据内容的映像,只能用于数据的逻辑恢复;物理备份是以磁盘块为基本单位进行数据拷贝,能够将数据按照原来的存储特征进行物理恢复。物理备份包括冷备份和热备份。Oracle数据库的备份方式,如图2所示。
图2 Oracle数据库的备份方式
Oracle数据库的数据备份机制做的非常完善,备份方法和策略灵活。Oracle的逻辑备份工具,在Oracle 9i之前使用的是exp/imp,Oracle 10g以后的版本提供了新的导入导出工具,数据泵expdp/impdp,能够更高效、灵活地进行数据的备份与恢复。在大型业务系统中,RMAN是Oracle数据库最常使用的备份与恢复工具,功能强大,自动化程度很高。
在实际的运维过程中, Oracle 数据库管理人员应当充分发挥备份工具,灵活应用逻辑备份和物理备份方式做好数据的备份工作。通过RMAN工具,以自动化脚本的方式,定期对数据库的“四大文件”,即数据文件、控制文件、日志文件和参数文件进行备份。RMAN备份最好存放在与数据库文件不同存储设备上,以保证备份的独立可用性。通过数据泵expdp/impdp工具,可以结合业务的实际需要,快速获取指定需求数据。备份的有效性检查在数据的备份与恢复管理是一项重要工作,一个完整有效的备份不仅要能做到数据的完全拷贝,更重要的是要能保证备份能够使用,数据库管理人员要定期检查备份的有效性,通常生产库需要时刻处于运行状态,数据不能随意改动,数据库管理人员应该搭建专门的测试环境,在测试库上验证备份的可用性。
3 Oracle数据库的日常维护实践
Oracle数据库的正常运行离不开数据库管理人员的日常运行维护,实际过程中往往以人工手动维护和自动化运维相结合的方式,全面高效地对数据库进行日常维护。不同的运行环境,维护方式也有所不同。以下以Linux环境中Oracle数据库维护演示。
3.1 人工手动维护
在Linux操作系统环境中,通过df-h查看系统磁盘的使用情况,ps-ef |grep ora_查询进程情况,top命令实时动态地显示系统的整体运行情况,iostat显示设备使用率(%until)、响应时间(await)等情况,free-m 以MB为单位显示内存使用情况。
[root@hostname~]# top
[root@hostname~]# df -h
[root@hostname~]# free -m
[root@hostname~]# ps -ef |grep ora_
[root@hostname~]# iostat -d -k 1 10
在共享存储命令行操作中,通过asmcmd命令,比如lsdg显示存储的使用情况,包括已使用量和剩余容量等。
[grid@hostname~]asmcmd
asmcmd>lsdg
在Oracle集群服务检查中,crsctl check crs命令检查整个集群的的健康状态,crs_stat-t 用来检查资源的运行情况,lsnrctl status命令反应了集群的监听状态。
[grid@hostname~]crsctl check crs
[grid@hostname~]crs_stat -
[grid@hostname~]lsnrctl status
在数据库状态中,vinstance记录了数据库实例状态,vdatafil记录了数据文件状态,vcontrofile记录了控制文件状态,vlog记录了日志文件状态,统计vsession可以查看用户会话的连接数量。
SQL>select status from vinstance;
SQL >select name,status from vdatafile;
SQL >select name, status from vcontrofile;
SQL >select group#,members, aschiveg, status from v$log;
SQL >select count(*) from v$session;
除了使用命令外,还可以借助可视化工具进行维护,例如OEM(Oracle Enterprise manager),Grid Control等工具,或者第三方工具,例如toad,spotlight,ignite等。Toad 12.1 Database Monitor的监控实例图,如图3所示。
图3 Toad 12.1 Database Monitor的监控实例图
3.2 自动化运维
自动化维护通常需要提前制定好运维策略,通过sql脚本等方式自动执行,如表空间的使用情况是日常运维中需要经常关注的,可以提前编制脚本观察表空间名字、使用大小(MB)、文件数、使用率(%)等信息。
Select a.Tablespace_Name, File_Nums, Total || 'M', Free || 'M', Round(To_Number(Total - Free) / To_Number(Total) * 100, 2) As Used_Ratio
From (Select Tablespace_Name, Sum(1) As File_Nums, To_Number(Sum(Bytes) / 1024 / 1024) Total, Round(To_Number(Sum(Maxbytes) / 1024 / 1024)) Max_t
From 数据库管理人员_Data_Files
Group By Tablespace_Name) a,
(Select Tablespace_Name, To_Number(Sum(Bytes) / 1024 / 1024) Free From 数据库管理人员_Free_Space Group By Tablespace_Name) b
Where a.Tablespace_Name = b.Tablespace_Name
Order By a.Tablespace_Name
自动化运维中最典型的操作就是数据库自动备份。Oracle数据库为数据库管理人员提供了灵活强大的备份方式,RMAN备份和逻辑备份相结合是常见的最备份方式之一。RMAN增量备份与逻辑备份结合备份策略,如表1所示。
表1 RMAN增量备份与逻辑备份结合备份策略
在Linux环境中,可以通过crontab命令定期性执行备份脚本文件,根据表1的策略,可以通过提前编制rman_level0.sh、rman_level1.sh和rman_archive.sh脚本的方式实现自动备份。
[root@ hostname~]# crontab -l
0 21 * * 5 su - Oracle -c " /script/rman_level0.sh"
0 21 * * 1,0,2,3,4,6 su - Oracle -c " /script/rman_level1.sh"
0 22 * * * su - Oracle -c " /script/rman_archive.sh"
4 总结
Oracle数据库的日常维护可以保障数据库高效地运行,对业务系统的正常运作和提高生产效率有着非常重要的意义。数据库管理人员应当充分发挥人工手动维护和自动化运维相结合的方式,不断实践、不断总结,加强数据库的日常维护,保障数据库的正常运行。