Oracle数据库日常管理方案.docx
1. Oracle数据库平常管理方案OraCIe数据库的运维解决,更重要的是做好数据库的管理工作,做好数据库的检查与备份工作,然后需要熟悉相关的逻辑结构故障解决方法、物理结构故障解决方法,应对数据库损坏的情况,在数据库发生损坏而无法修复的时候,能运用数据库管理工作中所做的数据备份及时恢复系统、数据,恢复正常生产工作。1.1 .数据库管理Oracle数据库的管理重要是要做好平常的检查管理工作,并检查好数据库的备份情况,在发生紧急情况时能及时不仅切换到备用系统上进行工作,并要能在数据库数据出现异常的时候,能及时恢复数据。因此,做好平常的检查与管理工作特别重要,重要工作涉及: 数据库的性能监控检查 数据库状态巡检检查 数据库备份情况与可恢复性检查1.1.1.数据库性能监控管理通过对数据库性能监控的管理工作,可以有效的防范风险事件的发生,并能从长时间的运营数据中,总结出数据库性能的状态,为系统性能优化、隐患事件排查提供更好的依据。1.1.1.1.查找前十条性能差的SqlSE1.ECT*FROM(selectPARSlNG_USERD,EXECUTIONS,SORTS,COMMANDJYPE,DISK_READS,sqI_textFROMvSsqlareaorderBYdisk_readsDESC)whereROWNUM<10;1.1.1.2,查询有enqueue等待的事件SE1.ECTb.SID,b.serial#,b.username,machine,event,wait_time,CHR(BITAND(pl,-16777216)/16777215)CHR(BITAND(p1,16711680)/65535)"EnqueueType"FROMv$session_waita,v$sessionbWHEREa.eventNOT1.IKE'SQ1.*N%'ANDa.eventNOT1.IKE,rdbms%,ANDa.SID=b.SIDANDb.SID>8ANDa.event='enqueue'ORDERBYusername;1.1.13.如何拟定哪个表空间读写频繁selectname,phyrds,phywrts,readtim,writetimfromv$filestata,v$dbfilebwherea.file#=b.file#orderbyreadtimdesc;SE1.ECTs.sid,kglpnmod"Mode”,kglpnreq"Req”,SPID“OSProcessFROMv$session_waitw,x$kglpnp,v$sessionS,vSprocessoWHEREp.kglpnuse=s.saddrANDkglpnhdl=w.plrawandw.eventliket%librarycachepin%,ands.paddr=o.addr;1.1.1.4.查询全表扫描的表SQ1.>colnamefora30SQ1.>selectname,valuefromv$SySSUnwherenamein('tablescans(shorttables)','tablescans(longtables)');NAMEVA1.UE18602tablescans(shorttables)111tablescans(longtables)SQ1.>selectcount(target),targetfromv$SeSSion_1OngOPSwhereopname='TableScan'groupbytarget;COUNT(TARGET)TARGET84ECM,APP1.RPT1.OG159ECM_DCTM_OTHR.DMR_CONTENT_S9ECM_DCTM_OTHR.DM_SYSOBJECT_R2ECM_DCTM_OTHR.DM_SYSOBJECT_S1.1.1.5. 查出全表扫描的表Selectsql_textfromv$sqltextt,v$sql_planpWheret.hash_value=p.hash_valueAndp.opcration=,TAB1.EACCESS,Andp.option=TU1.1.,Orderbyp.hash-value,t.piece;1.1.1.6. 查找FastFullindex扫描的SqI语句可以这样:Selectsql_textfromv$sqltextt,v$Sq1.PIanpWheret.hash_value=p.hash_valueAndp.opcration='INDEX'Andp.option=TU1.1.SCAN,Orderbyp.hash-value,t.piece;1.1.1.7. 查询硬语法分析的次数SQ1.>selectname,valuefromv$SySStalwherenamelike'parsecount%'NAMEVA1.UEparsecount(total)16103parsecount(hard)343parsecount(failures)5该项显示buffercache大小是否合适。公式:!-(physicalreads-physicalreadsdirect-physicalreadsdirect(lob)/sessionlogicalreads)执行:selectl-(a.value-b.value-c.value)d.value)fromv$sysstata,v$SySStatb,v$SySStatc,v$SySStatdwherea.name=,physicalreads'andb.name=,physicalreadsdirect'andc.name=,physicalreadsdirect(Iob)'andd.name='sessionlogicalreads'1.1.1.8. 显示buffer命中率公式:1-(physicalreads/(dbblockgets+consistentgets)执行:select1-(sum(decode(name,physicalreads',value,0)(sum(decode(name,dbblockgetsvalue,0)÷sum(decode(name,'consistentgets*,value,0),'bufferhitratio"fromv$sysstat;Softparseratio:这项将显示系统是否有太多硬解析。该值将会与原始记录数据对比以保证精确。例如,软解析率仅为02则表达硬解析率太高。但是,假如总解析量(ParSeCOUnttotal)偏低,这项值可以被忽略。公式:1-(parsecount(hard)/parsecount(total)执行:selectl-(a.valueb.value)fromv$SySStaIa,v$SySStatbWherea.name='parsecount(hard)'andb.name='parsecount(total)1;In-memorysortratio:该项显示内存中完毕的排序所占比例。最抱负状态下,在O1.TP系统中,大部分排序不仅小并且可以完全在内存里完毕排序。公式:sorts(memory)/(sorts(memory)÷sorts(disk)执行:selecta.value(b.value+c.value)fromv$SySStata,v$sysstatb,v$SySStaIcwherea.name=,sorts(memory)'andb.name='sorts(memory)*andc.name=,sorts(disk),;Parsetoexecuteratio:在生产环境,最抱负状态是条SqI语句一次解析多数运营。公式:1-(parsecount/executecount)执行:selectl-(a.valueb.value)fromvSsysstata,vSsysstatbwherea.name=,parsecount(total),andb.name=,executecount,;ParseCPUtototalCPUratio:该项显示总的CPU花费在执行及解析上的比率。假如这项比率较低,说明系统执行了太多的解析。公式:1-(parsetimecpu/CPUusedbythissession)执行:select1-(a.valueb.value)fromvSsysstata,vSsysstatbwherea.name=,parsetimecpu,andb.name='CPUusedbythissession,;ParsetimeCPUtoparsetimeelapsed:通常,该项显示锁竞争比率。这项比率计算是否时间花费在解析分派给CPU进行周期运算(即生产工作)。解析时间花费不在CPU周期运算通常表达由于锁竞争导致了时间花费。公式:parsetimecpu/parsetimeelapsed执行:selecta.value/b.valuefromvSsysstata,v$sysstatbwherea.name=,parsetimecpu,andb.name=,parsetimeelapsed,;从VSSYSSTAT获取负载间档(1.OadPrOfne)数据负载间档是监控系统吞吐量和负载变化的重要部分,该部分提供如下每秒和每个事务的记录信息:IOgonSCUmUIatiVe,parsecount(total),parsecount(hard),executes,physicalreads,physicalwrites,blockchanges,andredosize.被格式化的数据可检查rates'是否过高,或用于对比其它基线数据设立为辨认systemprofile在期间如何变化。例如,计算每个事务中blockchanges可用如下公式:dbblockchanges/(usercommits+userrollbacks)执行:selecta.value(b.value+c.value)fromv$sysstata,vSsysstatb,v$SySStatcwherea.name=,dbblockchanges'andb.name=,uscrcommits,andc.name=,userrollbacks,;其它计算记录以衡量负载方式,如下:Blockschangedforeachread:这项显示出blockchanges在blockreads中的比例。它将指出是否系统.重:要用于只读访问或是重要进行诸多数据操作(如:insertsUpdatesZdeletes)公式:dbblockchanges/sessionlogicalreads执行:selecta.value/b.valuefromvSsysstata,vSsysstatbwherea.name=,dbblockchanges,andb.name=,sessionlogicalreads'Rowsforeachsort:数据排序情况公式:sorts(rows)/(sorts(memory)+sorts(disk)执行:selecta.value(b.value+c.value)fromv$sysstata,vSsysstatb,v$sysstatCwherea.name=,sorts(rows),andb.name=,sorts(memory)'andc.name='sorts(disk)*