日常工作手册2文档控制修改记录审阅姓名职位李娇华3目录背景概述......................................错误!未定义书签。工作内容......................................................2每天的工作..................................................2每周的工作.................................................10每月的工作.................................................12每季度的工作...............................................13附录.........................................................1412工作内容每天的工作检查数据库状态确认所有的INSTANCE状态以及listener状态正常,登陆到所有数据库或例程,检测ORACLE后台进程:$ps–ef|grepora$lsnrctlstatusSQLselectstatusfromv$instance;检查文件系统如果文件系统的剩余空间过小或增长较快,需对其进行确认并删除不用的文件以释放空间。$df–k$df-h检查警告日志文件(alert_SID.log)Oracle在运行过程中,会在警告日志文件(alert_SID.log)中记录数据库的一些运行情况:数据库的启动、关闭,启动时的非缺省参数;数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点(checkpoint)操作没有执行完成造成不能切换,会记录不能切换的原因;对数据库进行的某些操作,如创建或删除表空间、增加数据文件;数据库发生的错误,如表空间不够、出现坏块、数据库内部错误(ORA-600)定期检查日志文件,根据日志中发现的问题及时进行处理3问题处理启动参数不对检查初始化参数文件因为检查点操作或归档操作没有完成造成重做日志不能切换如果经常发生这样的情况,可以考虑增加重做日志文件组;想办法提高检查点或归档操作的效率;有人未经授权删除了表空间检查数据库的安全问题,是否密码太简单;如有必要,撤消某些用户的系统权限出现坏块检查是否是硬件问题(如磁盘本生有坏块),如果不是,检查是那个数据库对象出现了坏块,对这个对象进行重建表空间不够增加数据文件到相应的表空间出现ORA-600根据日志文件的内容查看相应的TRC文件,如果是Oracle的bug,要及时打上相应的补丁alert_SID.log通常是在$ORACLE_BASE/admin/SID/bdump目录下。使用Unix‘tail’或者more命令查看该日志信息(为了方便查询,每天查询后将查询的日志mv到与日志同一目录下的bak目录下);定期检查警告日志、TRC文件及listener日志如果这些日志量非常大,占用很大的资源空间,可考虑定期删除以便释放资源。4一般情况下这些文件存在的相关目录:警告日志:$ORACLE_BASE/admin/SID/bdump或者通过SQLshowparameterbackground_dump_dest参数查看其存放位置;Trc文件:$ORACLE_BASE/admin/SID/udump或者通过SQLshowparameteruser_dump_dest参数查看其存放位置;Listener日志:$ORACLE_HOME/network/log查看数据库连接信息定时对数据库的连接情况进行检查,看与数据库建立的会话数目是不是正常,如果建立了过多的连接,会消耗数据库的资源。同时,对一些“挂死”的连接,可能需要手工进行清理。以下的SQL语句列出当前数据库建立的会话情况:Selectcount(*)fromv$session;――查看当前会话连接数selectsid,serial#,username,program,machine,statusfromv$session;SIDSERIAL#USERNAMEPROGRAMMACHINESTATUS--------------------------------------------------------------------------513oracle@xz15saledb(PMON)xz15saledbACTIVE23oracle@xz15saledb(DBW0)xz15saledbACTIVE33oracle@xz15saledb(DBW1)xz15saledbACTIVE43oracle@xz15saledb(LGWR)xz15saledbACTIVE53oracle@xz15saledb(CKPT)xz15saledbACTIVE63oracle@xz15saledb(SMON)xz15saledbACTIVE73oracle@xz15saledb(RECO)xz15saledbACTIVE81oracle@xz15saledb(CJQ0)xz15saledbACTIVE93oracle@xz15saledb(ARC0)xz15saledbACTIVE103oracle@xz15saledb(ARC1)xz15saledbACTIVE1111319ZKAccPrtInv_svr@xz15tuxedo2(TNSV1-V3)xz15tuxedo2INACTIVE1348876ZGupload@xz15saleap(TNSV1-V3)xz15saleapINACTIVE1720405ZKAccCreateRpt@xz15tuxedo1(TNSV1-V3)xz15tuxedo1INACTIVE2012895ZKOweScanSvr@xz15billdb(TNSV1-V3)xz15billdbINACTIVE其中,6SID会话(session)的ID号;SERIAL#会话的序列号,和SID一起用来唯一标识一个会话;USERNAME建立该会话的用户名;PROGRAM这个会话是用什么工具连接到数据库的;STATUS当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;如果DBA要手工断开某个会话,则执行:(一般不建议使用这种方式去杀掉数据库的连接,这样有时候session不会断开。容易引起死连接。建议通过sid查到操作系统的spid,使用ps–ef|grepspidno的方式确认spid不是ORACLE的后台进程。使用操作系统的kill-9命令杀掉连接)altersystemkillsession'SID,SERIAL#';注意:上例中SID为1到10(USERNAME列为空)的会话,是Oracle的后台进程,不要对这些会话进行任何操作。检查数据库当日备份的有效性。对RMAN备份方式:检查第三方备份工具的备份日志以确定备份是否成功对EXPORT备份方式:检查exp日志文件以确定备份是否成功对其他备份方式:检查相应的日志文件检查数据文件的状态SQLselectfile_name,statusfromdba_data_files;7SQLselectcount(*)fromdba_data_files;SQLselectcount(*)fromdba_data_fileswherestatus='AVAILABLE';如果数据文件的STATUS列不是AVAILABLE,那么就要采取相应的措施,如对该数据文件进行恢复操作,或重建该数据文件所在的表空间。检查表空间的使用情况selectf.tablespace_name,a.total,f.free,round((f.free/a.total)*100)%Freefrom(selecttablespace_name,sum(bytes/(1024*1024))totalfromdba_data_filesgroupbytablespace_name)a,(selecttablespace_name,round(sum(bytes/(1024*1024)))freefromdba_free_spacegroupbytablespace_name)fWHEREa.tablespace_name=f.tablespace_name(+)orderby%Free检查数据库的等待事件setpages80setlines120coleventfora40selectsid,event,p1,p2,p3,WAIT_TIME,SECONDS_IN_WAITfromv$session_waitwhereeventnotlike'SQL%'andeventnotlike'rdbms%'8如果数据库长时间持续出现大量像latchfree,enqueue,bufferbusywaits,dbfilesequentialread,dbfilescatteredread等等待事件时,需要对其进行分析,可能存在问题的语句。锁表问题的处理查询目前锁对象信息,更细节的锁处理方式请查看工作中长用脚本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;解锁处理:altersystemkillsession'&sid,&serial#';检查数据库性能,记录数据库的cpu使用、IO、buffer命中率等等使用vmstat,iostat,sar,top等命令进行信息收集并检查这些信息,判断资源使用情况。9查看是否有僵死进程selectspidfromv$processwhereaddrnotin(selectpaddrfromv$session);有些僵尸进程有阻塞其他业务的正常运行,定期杀掉僵尸进程10每周的工作监控数据量的增长情况根据本周每天的检查情况找到空间扩展很快的数据库对象,并采取相应的措施---删除历史数据规定数据库中至少保留6个月的历史数据,所以以前的历史数据可以考虑备份然后进行清除以便释放其所占的资源空间。---扩表空间altertablespacetablespace_nameadddatafile‘file’sizesizeautoextendoff;注意:在数据库结构发生变化时,如增加了表空间,增加了数据文件或重做日志文件这些操作,都会造成Oracle数据库控制文件的变化,DBA应及进行控制文件的备份,备份方法是:执行SQL语句:alterdatabasebackupcontrolfileto'/home/backup/control.bak';或:alterdatabasebackupcontrolfiletotrace;这样,会在USER_DUMP_DEST(初始化参数文件中指定)目录下生成创建控制文件的SQL命令。检查无效的数据库对象SELECTowner,object_name,object_typeFROMdba_objectsWHEREstatus='INVALID';11检查不起作用的约束SELECTowner,constraint_name,table_name,con