当前位置: 首页 > 科技观察

高效进行Oracle日常巡检:数据库性能与安全检查

时间:2023-03-19 22:31:45 科技观察

Oracle高效日常巡检:数据库性能与安全巡检除了通过监控平台对数据库进行监控外,还需要定期对数据库进行“健康检查”,这是保证Oracle系统稳定运行必不可少的辅助手段数据库。本文在系列一的基础上简单介绍一下需要检查的内容,主要包括资源使用、性能、安全等。1.检查oracle相关资源的使用情况主要检查Oracle相关资源的使用情况,包括:查看oracle初始化文件中的相关参数值查看数据库连接状态查看系统磁盘空间查看oracle中各个表空间的使用情况查看一些有扩展异常的对象查看系统表空间中的内容,查看下对象的扩展和表空间的最大扩展值,共七部分。1、查看oracle初始化文件中的相关参数。如果LIMITVALU-MAXUTILIZATION<=5,说明需要调整RESOURCENAME相关的Oracle初始化参数。可以通过修改Oracle初始化参数文件$ORACLEBASE/admin/ORCL/pfile/initORCL.ora来修改。2、查看数据库连接状态,当前会话连接数是否在正常范围内。其中:SID为会话(session)的ID号;SERIAL#为会话的序号,与SID一起使用,唯一标识一个会话;USERNAME是建立会话的用户名;PROGRAM是本次session使用什么工具连接数据库;STATUS是当前这个会话的状态,ACTIVE表示会话正在执行一些任务,INACTIVE表示当前会话没有执行任何操作;3.检查系统盘空间。如果文件系统剩余空间过小或增长过快,需要确认并删除。文件以释放空间。4.查看表空间的使用情况。如果空闲率%Free小于10%(含10%),注意增加数据文件扩容表空间,不要使用数据文件的自动扩容功能。5.检查一些扩展异常对象。如果有记录返回,说明这些对象的扩展几乎已经达到了定义时的最大扩展值。对于这些对象,应该修改其存储结构参数。6.查看系统表空间的内容。如果返回记录,说明系统表空间中存在一些非系统和sys用户对象。应该进一步检查这些对象是否与我们的应用程序相关。如果相关,将这些对象移动到非系统表空间,您应该检查对象所有者的默认表空间值。7.检查对象的下一个扩展和表空间的最大扩展值。如果有返回记录,说明这些对象的下一个扩展大于该对象所属表空间的最大扩展值,需要调整相应表空间的存储参数。2、检查数据库的性能检查Oracle数据库的性能,包括:检查数据库的等待事件检查死锁和处理检查cpu、I/O、内存性能检查是否有死进程检查共享命中率poolhitratechecksortareachecklogbuffer一共十个部分。1.查看数据库的等待事件setpages80setlines120coleventfora40selectsid,event,p1,p2,p3,WAIT_TIME,SECONDS_IN_WAITfromv$session_waitwhereeventnotlike'SQL%'andeventnotlike'rdbms%';在等待文件顺序读、db文件分散读等事件时,需要分析,可能会出现有问题的语句。2、获取DiskRead最高的SQL语句SQL>SELECTSQL_TEXTFROM(SELECT*FROMV$SQLAREAORDERBYDISK_READS)WHEREROWNUM<=5desc;3.找出性能最差的前十位SQLSELECT*FROM(SELECTPARSING_USER_IDEXECUTIONS,SORTS,COMMAND_TYPE,RESK_READS,SQL_HERADWERADDERBYAREA)<10;4.获取等待时间最长的5个系统等待事件SELECT*FROM(SELECT*FROMV$SYSTEM_EVENTWHEREEVENTNOTLIKE'SQL%'ORDERBYTOTAL_WAITSDESC)WHEREROWNUM<=5;5。检查长时间运行的SQLCOLUMNUSERNAMEFORMATA12COLUMNOPNAMEFORMATA16COLUMNPROGRESSFORMATASOFAR*100/TOTALWORK,0)||'%'ASPROGRESS,TIME_REMAINING,SQL_TEXTFROMV$SESSION_LONGOPS,V$SQLWHERETIME_REMAINING<>0ANDSQL_ADDRESS=ADDRESSANDSQL_HASH_VALUE=HASH_VALUE;6。检查检查消耗cpu最最高的进程进程进程进程的的高的#S_#,P.TERMINAL,P.PROGRAMPROGRAM,P.BACKGROUND,S.STATUS,RTRIM(SUBSTR(A.SQL_TEXT,1,80))SQLFROMV$PROCESSP,V$SESSIONS,V$SQLAREAAWHEREP.ADDR=S.PADDRANDS.SQL_ADDRESS=A.ADDRESS(+)ANDP.SPIDLIKE'%&1%';7.检查碎片高的表程序SQL>SELECTsegment_nametable_name,COUNT(*)extentsFROMdba_segmentsWHEREownerNOTIN('SYS','SYSTEM')GROUPBYsegment_nameHAVINGCOUNT(*)=(SELECTMAX(COUNT(*))FROMdba_segmentsGROUPBYsegment_name);8.检查表空间的I/O比率,DBA_DATA_FILESDFWHEREF.FILE#=DF.FILE_IDORDERBYDF.TABLESPACE_NAME;9.查看文件系统的I/O比SQL>SELECTSUBSTR(A.FILE#,1,2)"#",SUBSTR(A.NAME,1,30)"NAME",A.STATUS,A.BYTES,B.PHYRDS,B.PHYWRTSFROMV$DATAFILEA,V$FILESTATBWHEREA.FILE#=B.FILE#;10.检查死锁及处理查询目标前锁对图像信息:colsidfor999999colusernamefora10colschemanamefora10colosuserfora16colmachinefora16colterminalfora20colownerfora10colobject_namefora30colobject_typefora10selectsid,serial#,username,SCHEMANAME,osuser,MACHINE,terminal,PROGRAM,owner,object_name,object_type,o.object_idfromdba_objectso,v$locked_objectl,v$sessionswhereo.object_id=l.object_idands.sid=l.session_id;oracle级别kill终止会话:altersystemkillsession'&sid,&serial#';在操作系统级别终止会话:#>kill-9pid11。检查是否有僵尸进程selectspidfromv$processwhereaddrnotin(selectpaddrfromv$session);一些僵尸进程阻塞了其他服务的正常运行,定期杀死僵尸进程12.检查缓冲命令的成功率13.检查共享池命令的成功率。如果低于95%,则需要调整应用使用的绑定变量,或者调整数据库参数共享池的大小。14.检查分拣区。如果disk/(memoty+row)的比例过高,需要调整sortareasize(workareasizepolicy=false)或者pgaaggregatetarget(workareasizepolicy=true)。15.检查日志缓冲区。如果重做缓冲区分配重试/重做条目超过1%,则需要增加log_buffer。三、查看数据库cpu、I/O、内存性能1、CPU使用率top2。内存使用免费-m3。系统io情况4、检查Oracle数据库的安全性主要检查Oracle数据库的安全性,包括:检查系统安全信息,定期修改密码,共两部分。1、查看系统安全日志信息系统安全日志文件目录在/var/log下,主要查看登录成功或失败的用户日志信息。查看登录成功的日志:[root@rac2~]#grep-iaaccepted/var/log/secureJan808:44:43rac2sshd[29559]:Acceptedpasswordforrootfrom::ffff:10.10.10.6port1119ssh2...查看登录失败的日志:[root@rac2~]#grep-iinval/var/log/secure&&grep-ifailed/var/log/secureJan910:30:44rac2sshd[3071]:Invaliduserydbuserfrom::ffff:192.168.3.5Jan910:30:56rac2sshd[3071]:Failedpasswordforinvaliduserydbuserfrom::ffff:192.168.3.5port36005ssh2Jan910:30:56rac2sshd[3071]:Failedpasswordforinvaliduserydbuserfrom::ffff:192.168.3.5port36005ssh2Jan1022:44:38rac2sshd[21611]:root.ffs3from21611::Failedpasswordforinvaliduserydbuser63.6sh10portfrom::ff0.1of1022:44:38日志信息中没有error(Invalid,refused)提示,如果没有(Invalid,refused)则认为系统正常,如果有错误提示,应发出系统报警通知。2、查看用户修改密码数据库系统上往往有很多用户,比如:第三方数据库监控系统、初始安装数据库时的demo用户、管理员用户等,这些用户的密码往往写着而且很多人都知道会被别有用心的人用来攻击系统,甚至修改数据。需要修改密码的用户包括:数据库管理员用户SYS、SYSTEM;其他用户。修改密码方法:sql>alteruserUSER_NAMEidentifiedbyPASSWORD;