还剩22页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
Oracle数据库作业指导书更改前版本号更改后版本号更改人生效日期备注
11.1薛煜昆2015-3-2修改内存故障检查方法
1.
11.2张德帅2015-7-3修改CPU故障检查方法
1.
21.3张德帅2015-10-4修改表空间检查方法目录TOC\o1-3\h\z\uHYPERLINK\l_Toc
2664543371.检查数据库基本状况
41.
1.检查Oracle实例状态
41.
2.检查Oracle服务进程
41.
3.检查Oracle监听状态
52.检查系统和oracle日志文件
62.
1.检查操作系统日志文件
62.
2.检查oracle日志文件
62.
3.检查Oracle核心转储目录
72.
4.检查Root用户和Oracle用户的email
73.检查Oracle对象状态
73.
1.检查Oracle控制文件状态
73.
2.检查Oracle在线日志状态
83.
3.检查Oracle表空间的状态
83.
4.检查Oracle所有数据文件状态
83.
5.检查无效对象
93.
6.检查所有回滚段状态
104.检查Oracle相关资源的使用情况
104.
1.检查Oracle初始化文件中相关参数值
104.
2.检查数据库连接情况
114.
3.检查系统磁盘空间
124.
4.检查表空间使用情况
124.
5.检查一些扩展异常的对象
134.
6.检查system表空间内的内容
144.
7.检查对象的下一扩展与表空间的最大扩展值
145.检查Oracle数据库备份结果
145.
1.检查数据库备份日志信息
155.
2.检查backup卷中文件产生的时间
155.
3.检查oracle用户的email
156.检查Oracle数据库性能
156.
1.检查数据库的等待事件
156.
2.DiskRead最高的SQL语句的获取
156.
3.查找前十条性能差的sql
166.
4.等待时间最多的5个系统等待事件的获取
166.
5.检查运行很久的SQL
166.
6.检查消耗CPU最高的进程
166.
7.检查碎片程度高的表
176.
8.检查表空间的I/O比例
176.
9.检查文件系统的I/O比例
176.
10.检查死锁及处理
176.
11.检查数据库cpu、I/O、内存性能
186.
12.查看是否有僵死进程
196.
13.检查行链接/迁移
196.
14.定期做统计分析
196.
15.检查缓冲区命中率
206.
16.检查共享池命中率
206.
17.检查排序区
206.
18.检查日志缓冲区
217.检查数据库安全性
217.
1.检查系统安全日志信息
217.
2.检查用户修改密码
218.其他检查
228.
1.检查当前crontab任务是否正常
228.
2.OracleJob是否有失败
228.
3.监控数据量的增长情况
228.
4.检查失效的索引
238.
5.检查不起作用的约束
238.
6.检查无效的trigger
231.检查数据库基本状况在本节中主要对数据库的基本状况进行检查,其中包含检查Oracle实例状态,检查Oracle服务进程,检查Oracle监听进程,共三个部分
1.
1.检查Oracle实例状态 SQLselectinstance_namehost_namestartup_timestatusdatabase_statusfromv$instance;INSTANCE_NAMEHOST_NAMESTARTUP_TIMESTATUSDATABASE_STATUS---------------------------------------------------------------------------------CKDBAS142009-5-79:3OPENACTIVE其中“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;“DATABASE_STATUS”表示Oracle当前数据库的状态,必须为“ACTIVE”SQLselectnamelog_modeopen_modefromv$database;NAMELOG_MODEOPEN_MODE--------------------------------------CKDBARCHIVELOGREADWRITE其中“LOG_MODE”表示Oracle当前的归档方式“ARCHIVELOG”表示数据库运行在归档模式下,“NOARCHIVELOG”表示数据库运行在非归档模式下在我们的系统中数据库必须运行在归档方式下
1.
2.检查Oracle服务进程$ps-ef|grepora_|grep-vgrepps-ef|grepora_|grep-vgrep|wc–loracle296010May0700:01:02ora_pmon_CKDBoracle296210May0700:00:22ora_psp0_CKDBoracle296410May0700:00:00ora_mman_CKDBoracle296610May0700:03:20ora_dbw0_CKDBoracle296810May0700:04:29ora_lgwr_CKDBoracle297010May0700:10:31ora_ckpt_CKDBoracle297210May0700:03:45ora_smon_CKDBoracle297410May0700:00:00ora_reco_CKDBoracle297610May0700:01:24ora_cjq0_CKDBoracle297810May0700:06:17ora_mmon_CKDBoracle298010May0700:07:26ora_mmnl_CKDBoracle298210May0700:00:00ora_d000_CKDBoracle298410May0700:00:00ora_s000_CKDBoracle299410May0700:00:28ora_arc0_CKDBoracle299610May0700:00:29ora_arc1_CKDBoracle300010May0700:00:00ora_qmnc_CKDBoracle362510May0700:01:40ora_q000_CKDBoracle3159410Jul2000:00:00ora_q003_CKDBoracle238021005:0900:00:33ora_j000_CKDB19在检查Oracle的进程命令输出后,输出显示至少应包括以下一些进程.Oracle写数据文件的进程,输出显示为“ora_dbw0_CKDB”.Oracle写日志文件的进程,输出显示为“ora_lgwr_CKDB”.Oracle监听实例状态的进程,输出显示为“ora_smon_CKDB”.Oracle监听客户端连接进程状态的进程,输出显示为“ora_pmon_CKDB”.Oracle进行归档的进程,输出显示为“ora_arc0_CKDB”.Oracle进行检查点的进程,输出显示为“ora_ckpt_CKDB”.Oracle进行恢复的进程,输出显示为“ora_reco_CKDB”
1.
3.检查Oracle监听状态/home/oraclelsnrctlstatusLSNRCTLforLinux:Version
10.
2.
0.
2.0-Productionon23-JUL-200914:11:53Copyrightc19912005Oracle.Allrightsreserved.ConnectingtoADDRESS=PROTOCOL=tcpHOST=PORT=1521STATUSoftheLISTENER------------------------AliasLISTENERVersionTNSLSNRforLinux:Version
10.
2.
0.
2.0-ProductionStartDate07-MAY-200909:35:52Uptime77days4hr.36min.0secTraceLeveloffSecurityON:LocalOSAuthenticationSNMPOFFListenerParameterFile/data/oracle/product/
10.
2.0/network/admin/listener.oraListenerLogFile/data/oracle/product/
10.
2.0/network/log/listener.logListeningEndpointsSummary...DESCRIPTION=ADDRESS=PROTOCOL=tcpHOST=AS14PORT=1521ServicesSummary...ServiceCKDBhas1instances.InstanceCKDBstatusREADYhas1handlersforthisservice...ServiceCKDBXDBhas1instances.InstanceCKDBstatusREADYhas1handlersforthisservice...ServiceCKDB_XPThas1instances.InstanceCKDBstatusREADYhas1handlersforthisservice...Thecommandcompletedsuccessfully“ServicesSummary”项表示Oracle的监听进程正在监听哪些数据库实例,输出显示中至少应该有“CKDB”这一项检查监听进程是否存在[oracle@AS14~]$ps-ef|greplsn|grep-vgreporacle295410May0700:01:17/data/oracle/product/
10.
2.0/bin/tnslsnrLISTENER–inherit
2.检查系统和oracle日志文件在本节主要检查相关的日志文件,包含检查操作系统的日志文件,检查Oracle日志文件,检查Oracle核心转储目录,检查Root用户和Oracle用户的email,总共四个部分
2.
1.检查操作系统日志文件#cat/var/log/messages|grepfailed查看是否有与Oracle用户相关的出错信息
2.
2.检查oracle日志文件[oracle@AS14~]$cat/data/oracle/admin/CKDB/bdump/alert_CKDB.log|grepora-[oracle@AS14~]$cat/data/oracle/admin/CKDB/bdump/alert_CKDB.log|greperr[oracle@AS14~]$cat/data/oracle/admin/CKDB/bdump/alert_CKDB.log|grepfailOracle在运行过程中,会在警告日志文件alert_SID.log中记录数据库的一些运行情况数据库的启动、关闭,启动时的非缺省参数;数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点checkpoint操作没有执行完成造成不能切换,会记录不能切换的原因;对数据库进行的某些操作,如创建或删除表空间、增加数据文件;数据库发生的错误,如表空间不够、出现坏块、数据库内部错误ORA-600等定期检查日志文件,根据日志中发现的问题及时进行处理问题处理启动参数不对检查初始化参数文件因为检查点操作或归档操作没有完成造成重做日志不能切换如果经常发生这样的情况,可以考虑增加重做日志文件组;想办法提高检查点或归档操作的效率;有人未经授权删除了表空间检查数据库的安全问题,是否密码太简单;如有必要,撤消某些用户的系统权限出现坏块检查是否是硬件问题如磁盘本生有坏块,如果不是,检查是那个数据库对象出现了坏块,对这个对象进行重建表空间不够增加数据文件到相应的表空间出现ORA-600根据日志文件的内容查看相应的TRC文件,如果是Oracle的bug,要及时打上相应的补丁Listener日志$ORACLE_HOME/network/log
2.
3.检查Oracle核心转储目录$ls$ORACLE_BASE/admin/CKDB/cdump/*.trc|wc-l$ls$ORACLE_BASE/admin/CKDB/udump/*.trc|wc–l如果上面命令的结果每天都在增长,则说明Oracle进程经常发生核心转储这说明某些用户进程或者数据库后台进程由于无法处理的原因而异常退出频繁的核心转储特别是数据库后台进程的核心转储会导致数据库异常终止
2.
4.检查Root用户和Oracle用户的email#tail–n200/var/mail/root#tail–n200/var/mail/oracle查看有无与Oracle用户相关的出错信息
3.检查Oracle对象状态在本节主要检查相关Oracle对象的状态,包含检查Oracle控制文件状态,检查Oracle在线日志状态,检查Oracle表空间的状态,检查Oracle所有数据文件状态,检查Oracle所有表、索引、存储过程、触发器、包等对象的状态,检查Oracle所有回滚段的状态,总共六个部分
3.
1.检查Oracle控制文件状态SQLselectstatusnamefromv$controlfile;STATUSNAME---------------------------------------------------------------------------------------/data/oradata/CKDB/control
01.ctl/data/oradata/CKDB/control
02.ctl/data/oradata/CKDB/control
03.ctl输出结果应该有3条以上(包含3条)的记录,“STATUS”应该为空状态为空表示控制文件状态正常
3.
2.检查Oracle在线日志状态SQLselectgroup#statustypememberfromv$logfile;GROUP#STATUSTYPEMEMBER-----------------------------------3ONLINE/data/oradata/CKDB/redo
03.log2ONLINE/data/oradata/CKDB/redo
02.log1ONLINE/data/oradata/CKDB/redo
01.log4ONLINE/data/oradata/CKDB/redo
04.log5ONLINE/data/oradata/CKDB/redo
05.log6ONLINE/data/oradata/CKDB/redo
06.log6rowsselected输出结果应该有3条以上(包含3条)记录,“STATUS”应该为非“INVALID”,非“DELETED”注“STATUS”显示为空表示正常
3.
3.检查Oracle表空间的状态SQLselecttablespace_namestatusfromdba_tablespaces;TABLESPACE_NAMESTATUS---------------------------------------SYSTEMONLINEUNDOTBS1ONLINESYSAUXONLINETEMPONLINEUSERSONLINESJ1ONLINEADM_INDEXONLINEHOME_DATAONLINEHOME_INDEXONLINEPHOTO_DATAONLINEPHOTO_INDEXONLINE输出结果中STATUS应该都为ONLINE
3.
4.检查Oracle所有数据文件状态SQLselectnamestatusfromv$datafile;NAMESTATUS---------------------------------------------------------/data/oradata/CKDB/system
01.dbfSYSTEM/data/oradata/CKDB/undotbs
01.dbfONLINE/data/oradata/CKDB/sysaux
01.dbfONLINE/data/oradata/CKDB/users
01.dbfONLINE/data/oradata/CKDB/sj.dbfONLINE/data/oradata/CKDB/HOME_DATA
1.dbfONLINE/data/oradata/CKDB/HOME_INDEX
1.dbfONLINE/data/oradata/CKDB/PHOTO_DATA
1.dbfONLINE/data/oradata/CKDB/PHOTO_INDEX
1.dbfONLINE/data/oradata/CKDB/BLOG_DATA
1.dbfONLINE/data/oradata/CKDB/BLOG_INDEX
1.dbfONLINE/data/oradata/CKDB/AUDIO_DATA
1.dbfONLINE/data/oradata/CKDB/AUDIO_INDEX
1.dbfONLINE/data/oradata/CKDB/VIDEO_DATA
1.dbfONLINE/data/oradata/CKDB/VIDEO_INDEX
1.dbfONLINE/data/oradata/CKDB/SYS_DATA
1.dbfONLINE/data/oradata/CKDB/SYS_INDEX
1.dbfONLINE/data/oradata/CKDB/ADM_DATA
1.dbfONLINE/data/oradata/CKDB/ADM_INDEX
1.dbfONLINE/data/oradata/CKDB/perfstat.dbfONLINE输出结果中“STATUS”应该都为“ONLINE”或者SQLselectfile_namestatusfromdba_data_files;FILE_NAMESTATUS------------------------------------------------------/data/oradata/CKDB/users
01.dbfAVAILABLE/data/oradata/CKDB/sysaux
01.dbfAVAILABLE/data/oradata/CKDB/undotbs
01.dbfAVAILABLE/data/oradata/CKDB/system
01.dbfAVAILABLE/data/oradata/CKDB/sj.dbfAVAILABLE/data/oradata/CKDB/perfstat.dbfAVAILABLE/data/oradata/CKDB/HOME_DATA
1.dbfAVAILABLE/data/oradata/CKDB/HOME_INDEX
1.dbfAVAILABLE/data/oradata/CKDB/PHOTO_DATA
1.dbfAVAILABLE输出结果中“STATUS”应该都为“AVAILABLE”
3.
5.检查无效对象sqlselectownerobject_nameobject_typefromdba_objectswherestatus!=VALIDandowner!=SYSandowner!=SYSTEM;norowsselected如果有记录返回,则说明存在无效对象若这些对象与应用相关,那么需要重新编译生成这个对象,或者SELECTownerobject_nameobject_typeFROMdba_objectsWHEREstatus=INVALID;
3.
6.检查所有回滚段状态SQLselectsegment_namestatusfromdba_rollback_segs;SEGMENT_NAMESTATUS----------------------------------------------SYSTEMONLINE_SYSSMU1$ONLINE_SYSSMU2$ONLINE_SYSSMU3$ONLINE_SYSSMU4$ONLINE_SYSSMU5$ONLINE_SYSSMU6$ONLINE_SYSSMU7$ONLINE_SYSSMU8$ONLINE_SYSSMU9$ONLINE_SYSSMU10$ONLINE11rowsselected输出结果中所有回滚段的“STATUS”应该为“ONLINE”
4.检查Oracle相关资源的使用情况在本节主要检查Oracle相关资源的使用情况,包含检查Oracle初始化文件中相关的参数值,检查数据库连接情况,检查系统磁盘空间,检查Oracle各个表空间使用情况,检查一些扩展异常的对象,检查system表空间内的内容,检查对象的下一扩展与表空间的最大扩展值,总共七个部分
4.
1.检查Oracle初始化文件中相关参数值SQLselectresource_namemax_utilizationinitial_allocationlimit_valuefromv$resource_limit;RESOURCE_NAMEMAX_UTILIZATIONINITIAL_ALLOCATLIMIT_VALUE-----------------------------------------------------------------processes162500500sessions168555555enqueue_locks13669306930enqueue_resources1112660UNLIMITEDges_procs000ges_ress00UNLIMITEDges_locks00UNLIMITEDges_cache_ress00UNLIMITEDges_reg_msgs00UNLIMITEDges_big_msgs00UNLIMITEDges_rsv_msgs000gcs_resources000gcs_shadows000dml_locks762440UNLIMITEDtemporary_table_locks26UNLIMITEDUNLIMITEDtransactions13610UNLIMITEDbranches0610UNLIMITEDcmtcallbk3610UNLIMITEDsort_segment_locks5UNLIMITEDUNLIMITEDmax_rollback_segments1161065535RESOURCE_NAMEMAX_UTILIZATIONINITIAL_ALLOCATLIMIT_VALUE-----------------------------------------------------------------max_shared_servers1UNLIMITEDUNLIMITEDparallel_max_servers1680360022rowsselected若LIMIT_VALU-MAX_UTILIZATION=5,则表明与RESOURCE_NAME相关的Oracle初始化参数需要调整可以通过修改Oracle初始化参数文件$ORACLE_BASE/admin/CKDB/pfile/initORCL.ora来修改
4.
2.检查数据库连接情况查看当前会话连接数,是否属于正常范围SQLselectcount*fromv$session;COUNT*----------29selectsidserial#usernameprogrammachinestatusfromv$session;SIDSERIAL#USERNAMEPROGRAMMACHINESTATUS--------------------------------------------------------------------------13oracle@xz15saledbPMONxz15saledbACTIVE23oracle@xz15saledbDBW0xz15saledbACTIVE33oracle@xz15saledbDBW1xz15saledbACTIVE43oracle@xz15saledbLGWRxz15saledbACTIVE53oracle@xz15saledbCKPTxz15saledbACTIVE63oracle@xz15saledbSMONxz15saledbACTIVE73oracle@xz15saledbRECOxz15saledbACTIVE81oracle@xz15saledbCJQ0xz15saledbACTIVE93oracle@xz15saledbARC0xz15saledbACTIVE103oracle@xz15saledbARC1xz15saledbACTIVE1111319ZKAccPrtInv_svr@xz15tuxedo2TNSV1-V3xz15tuxedo2INACTIVE1348876ZGupload@xz15saleapTNSV1-V3xz15saleapINACTIVE1720405ZKAccCreateRpt@xz15tuxedo1TNSV1-V3xz15tuxedo1INACTIVE2012895ZKOweScanSvr@xz15billdbTNSV1-V3xz15billdbINACTIVE其中SID会话session的ID号;SERIAL#会话的序列号,和SID一起用来唯一标识一个会话;USERNAME建立该会话的用户名;PROGRAM这个会话是用什么工具连接到数据库的;STATUS当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;如果建立了过多的连接,会消耗数据库的资源,同时,对一些“挂死”的连接可能需要手工进行清理如果DBA要手工断开某个会话,则执行(一般不建议使用这种方式去杀掉数据库的连接,这样有时候session不会断开容易引起死连接建议通过sid查到操作系统的spid使用ps–ef|grepspidno的方式确认spid不是ORACLE的后台进程使用操作系统的kill-9命令杀掉连接)altersystemkillsessionSIDSERIAL#;注意上例中SID为1到10USERNAME列为空的会话,是Oracle的后台进程,不要对这些会话进行任何操作
4.
3.检查系统磁盘空间如果文件系统的剩余空间过小或增长较快,需对其进行确认并删除不用的文件以释放空间[oracle@AS14~]$df-hFilesystemSizeUsedAvailUse%Mountedon/dev/sda
59.7G
3.9G
5.4G42%//dev/sda1479M16M438M4%/boot/dev/sda249G19G28G41%/datanone1014M01014M0%/dev/shm
4.
4.检查表空间使用情况SQLselectf.tablespace_namea.totalf.freeroundf.free/a.total*100%Freefromselecttablespace_namesumbytes/1024*1024totalfromdba_data_filesgroupbytablespace_nameaselecttablespace_nameroundsumbytes/1024*1024freefromdba_free_spacegroupbytablespace_namefWHEREa.tablespace_name=f.tablespace_name+orderby%Free;TABLESPACE_NAMETOTALFREE%Free------------------------------------------------------------OPERATION_DATA180054730WAPWEB_DATA1003636OPERATION_INDEX50018637SYSTEM102451550SYSAUX102453452SALE8_TEMP1006262SJ150034870PERFSTAT50035671……….HOME_DATA1007777SYS_INDEX100100100VIDEO_INDEX100100100VIDEO_DATA100100100BLOG_DATA10010010039rowsselected如果空闲率%Free小于10%以上(包含10%),则注意要增加数据文件来扩展表空间而不要是用数据文件的自动扩展功能请不要对表空间增加过多的数据文件,增加数据文件的原则是每个数据文件大小为2G或者4G,自动扩展的最大限制在8G
4.
5.检查一些扩展异常的对象sqlselectSegment_NameSegment_TypeTableSpace_NameExtents/Max_extents*100PercentFromsys.DBA_SegmentsWhereMax_Extents!=0andExtents/Max_extents*100=95orderByPercent;norowsselected如果有记录返回,则这些对象的扩展已经快达到它定义时的最大扩展值对于这些对象要修改它的存储结构参数
4.
6.检查system表空间内的内容selectdistinctownerfromdba_tableswheretablespace_name=SYSTEMandowner!=SYSandowner!=SYSTEMunionselectdistinctownerfromdba_indexeswheretablespace_name=SYSTEMandowner!=SYSandowner!=SYSTEM;norowsselected如果记录返回,则表明system表空间内存在一些非system和sys用户的对象应该进一步检查这些对象是否与我们应用相关如果相关请把这些对象移到非System表空间,同时应该检查这些对象属主的缺省表空间值
4.
7.检查对象的下一扩展与表空间的最大扩展值sqlselecta.table_namea.next_extenta.tablespace_namefromall_tablesaselecttablespace_namemaxbytesasbig_chunkfromdba_free_spacegroupbytablespace_namefwheref.tablespace_name=a.tablespace_nameanda.next_extentf.big_chunkunionselecta.index_namea.next_extenta.tablespace_namefromall_indexesaselecttablespace_namemaxbytesasbig_chunkfromdba_free_spacegroupbytablespace_namefwheref.tablespace_name=a.tablespace_nameanda.next_extentf.big_chunk;norowsselected如果有记录返回,则表明这些对象的下一个扩展大于该对象所属表空间的最大扩展值,需调整相应表空间的存储参数
5.检查Oracle数据库备份结果在本节主要检查Oracle数据库备份结果,包含检查数据库备份日志信息,检查backup卷中文件产生的时间,检查oracle用户的email,总共三个部分
5.
1.检查数据库备份日志信息假设备份的临时目录为/backup/hotbakup,我们需要检查2009年7月22日的备份结果,则用下面的命令来检查#cat/backup/hotbackup/hotbackup-09-7-
22.log|grep–ierror备份脚本的日志文件为hotbackup-月份-日期-年份.log,在备份的临时目录下面如果文件中存在“ERROR:”,则表明备份没有成功,存在问题需要检查
5.
2.检查backup卷中文件产生的时间#ls–lt/backup/hotbackupbackup卷是备份的临时目录,查看输出结果中文件的日期,都应当是在当天凌晨由热备份脚本产生的如果时间不对则表明热备份脚本没执行成功
5.
3.检查oracle用户的email#tail–n300/var/mail/oracle热备份脚本是通过Oracle用户的cron去执行的cron执行完后操作系统就会发一条Email通知Oracle用户任务已经完成查看Oracleemail中今天凌晨部分有无ORA-,Error,Failed等出错信息,如果有则表明备份不正常
6.检查Oracle数据库性能在本节主要检查Oracle数据库性能情况,包含检查数据库的等待事件,检查死锁及处理,检查cpu、I/O、内存性能,查看是否有僵死进程,检查行链接/迁移,定期做统计分析,检查缓冲区命中率,检查共享池命中率,检查排序区,检查日志缓冲区,总共十个部分
6.
1.检查数据库的等待事件setpages80setlines120coleventfora40selectsideventp1p2p3WAIT_TIMESECONDS_IN_WAITfromv$session_waitwhereeventnotlikeSQL%andeventnotlikerdbms%;如果数据库长时间持续出现大量像latchfree,enqueue,bufferbusywaits,dbfilesequentialread,dbfilescatteredread等等待事件时,需要对其进行分析,可能存在问题的语句
6.
2.DiskRead最高的SQL语句的获取SQLSELECTSQL_TEXTFROMSELECT*FROMV$SQLAREAORDERBYDISK_READSWHEREROWNUM=5desc;
6.
3.查找前十条性能差的sqlSELECT*FROMSELECTPARSING_USER_IDEXECUTIONSSORTSCOMMAND_TYPEDISK_READSSQL_TEXTFROMV$SQLAREAORDERBYDISK_READSDESCWHEREROWNUM10;
6.
4.等待时间最多的5个系统等待事件的获取SELECT*FROMSELECT*FROMV$SYSTEM_EVENTWHEREEVENTNOTLIKESQL%ORDERBYTOTAL_WAITSDESCWHEREROWNUM=5;
6.
5.检查运行很久的SQLCOLUMNUSERNAMEFORMATA12COLUMNOPNAMEFORMATA16COLUMNPROGRESSFORMATA8SELECTUSERNAMESIDOPNAMEROUNDSOFAR*100/TOTALWORK0||%ASPROGRESSTIME_REMAININGSQL_TEXTFROMV$SESSION_LONGOPSV$SQLWHERETIME_REMAINING0ANDSQL_ADDRESS=ADDRESSANDSQL_HASH_VALUE=HASH_VALUE;
6.
6.检查消耗CPU最高的进程SETLINE240SETVERIFYOFFCOLUMNSIDFORMAT999COLUMNPIDFORMAT999COLUMNS_#FORMAT999COLUMNUSERNAMEFORMATA9HEADINGORAUSERCOLUMNPROGRAMFORMATA29COLUMNSQLFORMATA60COLUMNOSNAMEFORMATA9HEADINGOSUSERSELECTP.PIDPIDS.SIDSIDP.SPIDSPIDS.USERNAMEUSERNAMES.OSUSEROSNAMEP.SERIAL#S_#P.TERMINALP.PROGRAMPROGRAMP.BACKGROUNDS.STATUSRTRIMSUBSTRA.SQL_TEXT180SQLFROMV$PROCESSPV$SESSIONSV$SQLAREAAWHEREP.ADDR=S.PADDRANDS.SQL_ADDRESS=A.ADDRESS+ANDP.SPIDLIKE%1%;
6.
7.检查碎片程度高的表SQLSELECTsegment_nametable_nameCOUNT*extentsFROMdba_segmentsWHEREownerNOTINSYSSYSTEMGROUPBYsegment_nameHAVINGCOUNT*=SELECTMAXCOUNT*FROMdba_segmentsGROUPBYsegment_name;
6.
8.检查表空间的I/O比例SQLSELECTDF.TABLESPACE_NAMENAMEDF.FILE_NAMEFILEF.PHYRDSPYRF.PHYBLKRDPBRF.PHYWRTSPYWF.PHYBLKWRTPBWFROMV$FILESTATFDBA_DATA_FILESDFWHEREF.FILE#=DF.FILE_IDORDERBYDF.TABLESPACE_NAME;
6.
9.检查文件系统的I/O比例SQLSELECTSUBSTRA.FILE#12#SUBSTRA.NAME130NAMEA.STATUSA.BYTESB.PHYRDSB.PHYWRTSFROMV$DATAFILEAV$FILESTATBWHEREA.FILE#=B.FILE#;
6.
10.检查死锁及处理查询目前锁对象信息colsidfor999999colusernamefora10colschemanamefora10colosuserfora16colmachinefora16colterminalfora20colownerfora10colobject_namefora30colobject_typefora10selectsidserial#usernameSCHEMANAMEosuserMACHINEterminalPROGRAMownerobject_nameobject_typeo.object_idfromdba_objectsov$locked_objectlv$sessionswhereo.object_id=l.object_idands.sid=l.session_id;oracle级kill掉该session altersystemkillsessionsidserial#;操作系统级kill掉session#kill-9pid
6.
11.检查数据库cpu、I/O、内存性能记录数据库的cpu使用、IO、内存等使用情况,使用vmstatiostatsartop等命令进行信息收集并检查这些信息,判断资源使用情况
1.CPU使用情况[root@sale8~]#toptop-10:29:35up73days19:541userloadaverage:
0.
370.
380.29Tasks:353total2running351sleeping0stopped0zombieCpus:
1.2%us
0.1%sy
0.0%ni
98.8%id
0.0%wa
0.0%hi
0.0%siMem:16404472ktotal12887428kused3517044kfree60796kbuffersSwap:8385920ktotal665576kused7720344kfree10358384kcachedPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND30495oracle1508329m866m861mR
105.47:
53.90oracle32501oracle1508328m
1.7g
1.7gS
210.61:
58.38oracle32503oracle1508329m
1.6g
1.6gS
210.22:
06.62oracle注意上面的蓝色字体部分,此部分内容表示系统剩余的cpu,当其平均值下降至10%以下的时视为CPU使用率异常,需记录下该数值,并将状态记为异常
2.内存使用情况#free-mtotalusedfreesharedbufferscachedMem:20261958670761556-/+buffers/cache:3261700Swap:5992925900如上所示,蓝色部分表示系统总内存,红色部分表示系统使用的内存,黄色部分表示系统剩余内存,当剩余内存低于总内存的10%时视为异常
3.系统I/O情况#iostat-k13Linux
2.
6.9-
22.ELsmpAS1407/29/2009avg-cpu:%user%nice%sys%iowait%idle
0.
160.
000.
050.
3699.43Device:tpskB_read/skB_wrtn/skB_readkB_wrtnsda
3.
3313.
1650.2594483478360665804avg-cpu:%user%nice%sys%iowait%idle
0.
000.
000.
000.
00100.00Device:tpskB_read/skB_wrtn/skB_readkB_wrtnsda
0.
000.
000.0000如上所示,蓝色字体部分表示磁盘读写情况,红色字体部分为cpuIO等待情况
4.系统负载情况#uptime12:08:37up162days23:3315usersloadaverage:
0.
010.
150.10如上所示,蓝体字部分表示系统负载,后面的3个数值如果有高于
2.5的时候就表明系统在超负荷运转了,并将此值记录到巡检表,视为异常
6.
12.查看是否有僵死进程selectspidfromv$processwhereaddrnotinselectpaddrfromv$session;有些僵尸进程有阻塞其他业务的正常运行,定期杀掉僵尸进程
6.
13.检查行链接/迁移Sqlselecttable_namenum_rowschain_cntFromdba_tablesWhereowner=CTAIS2Andchain_cnt0;注含有longraw列的表有行链接是正常的找到迁移行保存到chained_rows表中如没有该表执行../rdbms/admin/utlchain.sqlSqlanalyzetabletablenamelistchainedrows;可通过表chained_rows中table_namehead_rowid看出哪些行是迁移行如:Sqlcreatetableaaasselecta.*fromsb_zsxxachained_rowsbwherea.rowid=b.head_rowidandb.table_name=SB_ZSXX;sqldeletefromsb_zsxxwhererowidinselecthead_rowidfromchained_rowswheretable_name=SB_ZSXX;sqlinsertintosb_zsxxselect*fromchained_rowwheretable_name=SB_ZSXX;
6.
14.定期做统计分析对于采用OracleCost-Based-Optimizer的系统,需要定期对数据对象的统计信息进行采集更新,使优化器可以根据准备的信息作出正确的explainplan在以下情况更需要进行统计信息的更新
1、应用发生变化
2、大规模数据迁移、历史数据迁出、其他数据的导入等
3、数据量发生变化查看表或索引的统计信息是否需更新,如SqlSelecttable_namenum_rowslast_analyzedFromuser_tableswheretable_name=DJ_NSRXXsqlselectcount*fromDJ_NSRXX如num_rows和count*如果行数相差很多则该表需要更新统计信息,建议一周做一次统计信息收集,如Sqlexecsys.dbms_stats.gather_schema_statsownname=CTAIS2cascade=TRUEdegree=4;
6.
15.检查缓冲区命中率SQLSELECTa.VALUE+b.VALUElogical_readsc.VALUEphys_readsround100*1-c.value/a.value+b.value4hit_ratioFROMv$sysstatav$sysstatbv$sysstatcWHEREa.NAME=dbblockgetsANDb.NAME=consistentgetsANDc.NAME=physicalreads;LOGICAL_READSPHYS_READSHIT_RATIO---------------------------------
12736457057119143094.4104如果命中率低于90%则需加大数据库参数db_cache_size
6.
16.检查共享池命中率SQLselectsumpinhits/sumpins*100fromv$librarycache;SUMPINHITS/SUMPINS*100--------------------------
99.5294474716798如低于95%,则需要调整应用程序使用绑定变量,或者调整数据库参数sharedpool的大小
6.
17.检查排序区SQLselectnamevaluefromv$sysstatwherenamelike%sort%;NAMEVALUE--------------------------------------------------------------------------sortsmemory6135534sortsdisk8sortsrows2264742084如果disk/memoty+row的比例过高,则需要调整sort_area_sizeworkarea_size_policy=false或pga_aggregate_targetworkarea_size_policy=true
6.
18.检查日志缓冲区SQLselectnamevaluefromv$sysstatwherenameinredoentriesredobufferallocationretries;NAMEVALUE--------------------------------------------------------------------------redoentries27663705redobufferallocationretries880如果redobufferallocationretries/redoentries超过1%,则需要增大log_buffer
7.检查数据库安全性在本节主要检查Oracle数据库的安全性,包含检查系统安全信息,定期修改密码,总共两个部分
7.
1.检查系统安全日志信息系统安全日志文件的目录在/var/log下,主要检查登录成功或失败的用户日志信息检查登录成功的日志[root@rac2~]#grep-iaccepted/var/log/secureJan808:44:43rac2sshd
[29559]:Acceptedpasswordforrootfrom::ffff:
10.
10.
10.6port1119ssh2……检查登录失败的日志[root@rac2~]#grep-iinval/var/log/securegrep-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]:Failedpasswordforrootfrom::ffff:
10.
10.
10.6port1723ssh2在出现的日志信息中没有错误Invalid、refused提示,如果没有Invalid、refused视为系统正常,出现错误提示,应作出系统告警通知
7.
2.检查用户修改密码在数据库系统上往往存在很多的用户,如第三方数据库监控系统,初始安装数据库时的演示用户,管理员用户等等,这些用户的密码往往是写定的,被很多人知道,会被别有用心的人利用来攻击系统甚至进行修改数据需要修改密码的用户包括数据库管理员用户SYS,SYSTEM;其他用户登陆系统后,提示符下输入cat/etc/passwd,在列出来的用户中查看是否存在已经不再使用的或是陌生的帐号若存在,则记录为异常修改密码方法SqlalteruserUSER_NAMEidentifiedbyPASSWORD;
8.其他检查在本节主要检查当前crontab任务是否正常,检查OracleJob是否有失败等共六个部分
8.
1.检查当前crontab任务是否正常[oracle@AS14~]$crontab-l
8.
2.OracleJob是否有失败Sqlselectjobwhatlast_datenext_datefailuresbrokenfromdba_jobsWhereschema_user=CAIKE;如有问题建议重建job,如execsys.dbms_job.remove1;commit;execsys.dbms_job.isubmit1REFRESH_ALL_SNAPSHOT;SYSDATE+1/1440SYSDATE+4/1440;commit;
8.
3.监控数据量的增长情况SQLselect2A.tablespace_name1-A.total/B.total*100used_percent3fromselecttablespace_namesumbytestotal4fromdba_free_spacegroupbytablespace_nameA5selecttablespace_namesumbytestotal6fromdba_data_filesgroupbytablespace_nameB7whereA.tablespace_name=B.tablespace_name;TABLESPACE_NAMEUSED_PERCENT------------------------------------------HOME_INDEX
1.5BLOG_DATA
0.375VIDEO_DATA
0.25VIDEO_INDEX
0.25SYS_DATA
9.5SYS_INDEX
0.4375CURRENCY_INDEX13UNDOTBS
12.3055555555SYSAUX
47.875976562根据本周每天的检查情况找到空间扩展很快的数据库对象并采取相应的措施---删除历史数据移动规定数据库中至少保留6个月的历史数据,所以以前的历史数据可以考虑备份然后进行清除以便释放其所占的资源空间---扩表空间altertablespacetablespace_nameadddatafile‘file’sizesizeautoextendoff;注意在数据库结构发生变化时,如增加了表空间,增加了数据文件或重做日志文件这些操作,都会造成Oracle数据库控制文件的变化,DBA应及进行控制文件的备份,备份方法是执行SQL语句alterdatabasebackupcontrolfileto/home/backup/control.bak;或alterdatabasebackupcontrolfiletotrace;这样,会在USER_DUMP_DEST初始化参数文件中指定目录下生成创建控制文件的SQL命令
8.
4.检查失效的索引Sqlselectindex_nametable_nametablespace_namestatusFromdba_indexesWhereowner=CTAIS2AndstatusVALID;注分区表上的索引status为N/A是正常的,如有失效索引则对该索引做rebuild,如SqlalterindexINDEX_NAMErebuildtablespaceTABLESPACE_NAME;
8.
5.检查不起作用的约束SELECTownerconstraint_nametable_nameconstraint_typestatusFROMdba_constraintsWHEREstatus=DISABLEandconstraint_type=P;如有失效约束则启用,如SqlalterTableTABLE_NAMEEnableConstraintsCONSTRAINT_NAME;
8.
6.检查无效的triggerSELECTownertrigger_nametable_namestatusFROMdba_triggersWHEREstatus=DISABLED;如有失效触发器则启用,如SqlalterTriggerTRIGGER_NAMEEnable;。