1、XXX 数据库【XXX 】巡检报告1 第一部分 操作系统参数检查 .21.1 检查数据库 cpu、I/O、内存性能 .21.2 检查 Oracle 服务进程 .22 第二部分 Oracle 数据库检查 .22.1 数据库状态 .22.1.1 检查 oracle 环境变量 22.1.2 检查监听状态 32.1.3 查看 Oracle 初始化参数 .32.1.4 检查 Oracle 的实例状态 .32.1.5 检查数据库读写状态 32.1.6 查看 oracle 数据库的版本 32.1.7 查看 sga、pga 详细信息 .32.1.8 检查控制文件状态 42.1.9 检查日志文件状态 42.1.
2、10 检查 alter 日志 .42.1.11 检查当前 crontab 任务 42.2 数据库空间监控 .42.2.1 检查数据库的大小,和空间使用情况 42.2.2 查看数据库是否处于归档模式 62.2.3 检查表空间物理文件的名称及大小 62.2.4 数据库数据文件等所在目录使用情况 62.3 数据库性能、资源、对象检查 .62.3.1 负载情况(Load Profile) 62.3.2 数据库内存命中率(Instance Efficiency Percentages (Target 100%)) .62.3.3 监控等待事件(Top 5 Timed Events ) .62.3.4 检
3、查无效的数据对象 .72.3.5 检查碎片程度高的表 .72.3.6 检查排序区 72.3.7 检查日志缓冲区 72.3.8 检查 Oracle 初始化文件中相关参数值 72.3.9 检查数据库连接情况 72.3.10 检查 system 表空间内的内容 .82.3.11 检查表空间碎片率 82.3.12 检查死锁 82.4 数据库备份检查 .82.4.1 检查数据库备份日志信息 82.4.2 检查 backup 卷中文件产生的时间 92.4.3 检查 oracle 用户的 email93 第三部分 总结 .91 第一部分 操作系统参数检查1.1检查数据库 cpu、I/O、内存性能# top检
4、查结果: 正常1.2检查 Oracle 服务进程(1)检查所有 oracle 相关进程# ps -ef|grep ora_(2)查看是否有僵死进程SQL select spid from v$process where addr not in (select paddr from v$session); 检查结果: 正常在检查 Oracle 的进程命令输出后,输出显示至少应包括以下一些进程:Oracle 写数据文件的进程,输出显示为:“ora_dbw0_CKDB”Oracle 写日志文件的进程,输出显示为:“ora_lgwr_ CKDB”Oracle 监听实例状态的进程,输出显示为:“ora_
5、smon_ CKDB”Oracle 监听客户端连接进程状态的进程,输出显示为:“ora_pmon_CKDB”Oracle 进行归档的进程,输出显示为:“ora_arc0_ CKDB”Oracle 进行检查点的进程,输出显示为:“ora_ckpt_ CKDB”Oracle 进行恢复的进程,输出显示为:“ora_reco_ CKDB”2 第二部分 Oracle 数据库检查2.1数据库状态2.1.1 检查 oracle 环境变量# cat /home/oracle/.profile检查结果: 正常2.1.2 检查监听状态$ lsnrctl status检查结果: 正常2.1.3 查看 Oracle
6、初始化参数SQL show parameter检查结果: 正常2.1.4 检查 Oracle 的实例状态SQL select status from v$instance;检查结果: 正常其中“STATUS“ 表示Oracle 当前的实例状态,必须为 “OPEN“;“DATABASE_STATUS“表示Oracle当前数据库的状态,必须为“ACTIVE“。2.1.5 检查数据库读写状态SQL select open_mode from v$database;检查结果: 正常2.1.6 查看 oracle 数据库的版本SQL select * from v$version; 检查结果:正常2.1
7、.7 查看 sga、pga 详细信息SQL select * from v$sgainfo;SQL select * from v$pgastat;检查结果:正常2.1.8 检查控制文件状态SQL select name,status from v$controlfile;检查结果:正常2.1.9 检查日志文件状态SQL select group#,status,type,member from v$logfile;检查结果:正常2.1.10 检查 alter 日志SQL show parameter background_dump_dest$ tail -1000 alert_实例名.log
8、检查结果:正常查看有无“ORA-”,Error”,“Failed”等出错信息。根据错误信息进行分析并解决2.1.11 检查当前 crontab 任务(1)任务清单$ crontab -l(2)Oracle Job 是否有失败SQL select job,what,last_date,next_date,failures,broken from dba_jobs Where schema_user=CAIKE;检查结果:正常2.2数据库空间监控2.2.1 检查数据库的大小,和空间使用情况(1)查所有表空间总量:SQL select sum(tablespace_size * 8192 / 102
9、4 / 1024 /1024) “totalmsize(G)“ from dba_tablespace_usage_metrics;(2)datafile 占文件系统的空间SQL select sum(bytes)/1024/1024/1024 GB from dba_data_files;(3)查所有表空间使用量(11g)SQL SELECT /* + RULE */ df.tablespace_name “Tablespace“, df.bytes / (1024 * 1024) “Size (MB)“, SUM(fs.bytes) / (1024 * 1024) “Free (MB)“,
10、 Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1) “% Free“, Round(df.bytes - SUM(fs.bytes) * 100 / df.bytes) “% Used“ FROM dba_free_space fs, (SELECT tablespace_name,SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) df WHERE fs.tablespace_name (+) = df.tablespace_name GROUP BY df.tablespace
11、_name,df.bytes UNION ALL SELECT /* + RULE */ df.tablespace_name tspace, fs.bytes / (1024 * 1024), SUM(df.bytes_free) / (1024 * 1024), Nvl(Round(SUM(fs.bytes) - df.bytes_used) * 100 / fs.bytes), 1), Round(SUM(fs.bytes) - df.bytes_free) * 100 / fs.bytes) FROM dba_temp_files fs, (SELECT tablespace_name
12、,bytes_free,bytes_used FROM v$temp_space_header GROUP BY tablespace_name,bytes_free,bytes_used) df WHERE fs.tablespace_name (+) = df.tablespace_name GROUP BY df.tablespace_name,fs.bytes,df.bytes_free,df.bytes_used ORDER BY 4 DESC;(4)检查一些扩展异常的对象SQL select Segment_Name,Segment_Type,TableSpace_Name, (E
13、xtents / Max_extents) * 100 Percent From sys.DBA_SegmentsWhere Max_Extents != 0 and (Extents / Max_extents) * 100 = 95order By Percent;检查结果:正常2.2.2 查看数据库是否处于归档模式SQL archive log list;检查结果:正常2.2.3 检查表空间物理文件的名称及大小SQL col name for a55SQL select file#,ts#,status,name from v$datafile;检查结果:正常2.2.4 数据库数据文件等
14、所在目录使用情况# df -h检查结果:正常2.3数据库性能、资源、对象检查2.3.1 负载情况(Load Profile)生成 awr 报告SQL ?/rdbms/admin/awrrpt 检查结果:正常如果 DBtime 远小于 elapse 说明数据库比较空闲如果 Logons 大于每秒 12 个、Hard parses 大于每秒 100、全部 parses 超过每秒 300 表明可能有争用问题2.3.2 数据库内存命中率(Instance Efficiency Percentages (Target 100%))检查结果:正常Buffer Nowait 表示在内存获得数据的未等待比例。
15、Buffer Nowait 的这个值一般需要大于99%。否则可能存在争用,可以在后面的等待事件中进一步确认。Redo NoWait 表示在 LOG 缓冲区获得 BUFFER 的未等待比例。如果太低(可参考 90%阀值),考虑增加 LOG BUFFERbuffer hit 表示进程从内存中找到数据块的比率。常应在 95%以上。否则,小于 95%,需要调整重要的参数,小于 90%可能是要加 db_cache_size。In-memory Sort:在内存中排序的比率。如果低于 95%,可以通过适当调大初始化参数PGA_AGGREGATE_TARGET 或者 SORT_AREA_SIZE 来解决li
16、brary hit 表示 Oracle 从 Library Cache 中检索到一个解析过的 SQL 或 PL/SQL 语句的比率。如果 library hit ratio 低于 90%,可能需要调大 shared pool 区。Soft Parse:软解析的百分比(softs/softs+hards)小于99%,否则存在严重的性能问题。Parse CPU to Parse Elapsd:解析实际运行时间/(解析实际运行时间+解析中等待资源时间)越高越好。Non-Parse CPU :SQL 实际运行时间 /(SQL 实际运行时间+SQL 解析时间),太低表示解析消耗时间过多2.3.3 监控等
17、待事件(Top 5 Timed Events )检查结果:正常一个性能良好的系统,cpu time 应该在 top 5 的前面,否则说明你的系统大部分时间都用在等待上。2.3.4 检查无效的数据对象SQL col OBJECT_NAME for a35SQL SELECT owner, object_name, object_type,status FROM dba_objects WHERE status = INVALID; 检查结果: 正常如存在状态为N/A的表示分区对象,不用理会2.3.5 检查碎片程度高的表SQL SELECT segment_name table_name,COUN
18、T(*) extents FROM dba_segments WHERE ownerNOT IN (SYS, SYSTEM) GROUP BY segment_name HAVING COUNT(*)=(SELECT MAX(COUNT(*) FROM dba_segments GROUP BY segment_name);检查结果:正常2.3.6 检查排序区SQL select name,value from v$sysstat where name like %sort%;检查结果:正常如果disk/(memoty+row) 的比例过高,则需要调整2.3.7 检查日志缓冲区SQL sele
19、ct name,value from v$sysstat where name in (redo entries,redo buffer allocation retries);检查结果:正常如果 redo buffer allocation retries/redo entries 超过 1% ,则需要增大 log_buffer。2.3.8 检查Oracle初始化文件中相关参数值SQL select resource_name,max_utilization,initial_allocation, limit_value from v$resource_limit;检查结果:正常若 LIMI
20、T_VALU-MAX_UTILIZATION select sid,serial#,username,program,machine,status from v$session;检查结果:正常建议通过 sid 查到操作系统的 spid,使用 ps ef|grep spidno 的方式确认 spid 不是ORACLE 的后台进程。使用操作系统的 kill -9 命令杀掉连接),SID 为 1 到10(USERNAME 列为空)的会话,是 Oracle 的后台进程,不要对这些会话进行任何操作。2.3.10 检查system表空间内的内容SQL select distinct(owner) from
21、 dba_tables where tablespace_name=SYSTEM and owner!=SYS and owner!=SYSTEM Union select distinct(owner) from dba_indexes where tablespace_name=SYSTEM and owner!=SYS and owner!=SYSTEM;检查结果:正常如果记录返回,则表明 system 表空间内存在一些非 system 和 sys 用户的对象。应该进一步检查这些对象是否与我们应用相关。如果相关则把这些对象移到非 System 表空间,同时应该检查这些对象属主的缺省表空间
22、值。2.3.11 检查表空间碎片率(1)查看fsfi值,如果碎片率小于30则说明碎片过多SQL select a.tablespace_name,trunc(sqrt(max(blocks)/sum(blocks)* (100/sqrt(sqrt(count(blocks),2) fsfi from dba_free_space a,dba_tablespaces bwhere a.tablespace_name=b.tablespace_nameand b.contents not in(TEMPORARY,UNDO,SYSAUX)group by A.tablespace_name ord
23、er by fsfi;(2)查看dba_free_space 采用字典管理的表空间碎片超过500就需要对表空间进行碎片整理SQL select a.tablespace_name ,count(1) 碎片量 from dba_free_space a, dba_tablespaces b where a.tablespace_name =b.tablespace_nameand b.contents not in(TEMPORARY,UNDO,SYSAUX)group by a.tablespace_namehaving count(1) 20order by 2;检查结果:正常2.3.12
24、检查死锁SQL select sid,serial#,username,SCHEMANAME,osuser,MACHINE,terminal,PROGRAM,owner,object_name,object_type,o.object_idfrom dba_objects o, v$locked_object l, v$session s where o.object_id = l.object_id and s.sid = l.session_id; 检查结果:正常2.4数据库备份检查2.4.1 检查数据库备份日志信息# cat XX.log|grep i error检查结果:正常2.4.2 检查backup卷中文件产生的时间# ls lt /XXX/XXX检查结果:正常2.4.3检查oracle用户的email# tail -n 300 /var/mail/oracle检查结果:正常3 第三部分 总结