您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 数据库项目组日常运维及应急故障处理手册
常见问题及处理方案CPU使用率高的问题通过操作系统命令toptopasglance等查看top进程号,确认是系统进程还是oracle应用进程,查询当前top进程执行的操作和sql语句进行分析。根据进程号获取正在执行的sqlSELECTa.osuser,a.username,b.address,b.hash_value,b.sql_textfromv$sessiona,v$sqltextb,v$processpwherep.spid=&spidandp.addr=a.paddranda.STATUS='ACTIVE'anda.sql_address=b.addressorderbyaddress,piece;数据库无法连接数据库无法连接,一般可能是如下原因造成:(1)数据库宕了(2)监听异常(3)数据库挂起(4)归档目录满(5)数据库或应用主机的网卡出现问题不能正常工作(6)应用主机到数据库主机的网络出现问题。1、数据库宕了立即启动数据库。2、监听异常此时一般体现为:监听进程占用CPU资源大;监听日志异常。此时,立即重启监听,监听重启一般能在1分钟之内完成。3、数据库挂起立即重启数据库。4、归档目录满(1)在没有部署OGG数据同步的情况下,立即清理归档日志文件。(2)如果部署了OGG数据同步,查看OGG正在读取的归档日志文件,立即清理OGG不再需要的日志文件。5、数据库或应用主机的网卡出现问题不能正常工作。立即联系主机工程师处理。6、应用主机到数据库主机的网络出现问题。立即联系网络维护人员查看。CRS/GI无法启动对于10g及11gR1版本的CRS问题1、进入/tmp目录下,看是否产生了crsctl.xxxxx文件如果有的话,看文件内容,一般会提示OCR无法访问,或者心跳IP无法正常绑定等信息。2、如果/tmp目录下没有crsctl.xxxxx文件此时查看ocssd.log文件,看是否能从中得到有价值的信息。可能的问题:网络心跳不通。3、/tmp目录无crsctl.xxxxx且日志中没有报错信息,只有停CRS时的日志信息。此时可能是RAC两个节点对并发裸设备的访问有问题,此时考虑:(1)停掉两个节点的CRS。(2)两个节点先同时去激活并发VG,然后再激活VG。(3)重新启动CRS。对于11gR2的GI问题分析$GRID_HOME/log/nodename目录下的日志文件,看是否能从中找出无法启动的原因。常见问题:1、心跳IP不同。2、ASM实例无法启动。对CRS的故障诊断和分析,参加本文档中RAC部分的MOS文档.数据库响应慢应急处理步骤:(1)找到占用CPU资源大的sql或者模块,然后停掉此应用模块。(2)如果属于由于种种原因引起的数据库hang住情况,立即重启数据库,此时重启需要约15分钟时间。重要说明:如果重启数据库的话,会有如下负面影响:(1)要kill掉所有连接到数据库中的会话,所有会话都会回滚。(2)立即重启的话,不能获取并保留分析数据库挂起原因的信息,在后续分析问题时,没有足够信息用于分析问题产生的根本原因。一般正常重启的话,都需要手动获取用于分析数据库重启原因的信息,以便编写分析报告,但是在最长情况下,获取日志信息可能就要40分钟时间。此时一般做systemstatedump,且如果是rac情况的话,需要2个节点都做,且需要做2次或以上。常规处理步骤,分如下几种情况处理:(1)所有业务模块都慢。(2)部分业务模块慢。(3)数据库hang住。所有业务模块都慢此时首先查看系统资源,看是否属于CPU资源使用率100%的问题,如果是,参考本章“CPU使用率高的问题”解决办法。如果系统资源正常,那很可能是数据库hang住了,此时参考数据库Hang部分。部分业务模块慢分析运行慢的模块的sql语句:(1)看是否是新上的sql。(2)看执行计划是否高效。(3)优化运行慢的模块的sql语句。数据库hang住应急处理方式:重启数据库。常规处理方式:(1)分析alert日志,看是否能从alert日志中,可以很快找到引起问题的原因。(2)做3级别的hanganalyze,先做一次,然后隔一分钟以后再做一次。并分析hanganalyze生成的trace文件,看是否可以找到引起数据库hang住的会话的信息。(3)做systemstatedump此时生成systemstatedump的时间会比较长,尤其是在会话数量较多的情况下。且生成dump文件的大小较大,在G级别以上。在生成一次以后,过一分钟再收集一次,另外如果是RAC,那么两个节点都需要收集。对hang做dump请参考“对数据库HANG做DUMP一章”。数据误删除此问题,没有应急办法,只能按如下步骤处理:1、对于10g及以上版本,看是否可以通过闪回进行恢复。2、查看测试环境数据库,看其中是否有需要的数据。3、使用备份进行恢复,此方法一般花费时间较长。快速shutdown数据库1.停止监听2.做一个检查点操作SQLaltersystemcheckpoint;3.杀掉所有LOCAL=NO的操作系统进程AIX、HP-UX、Linux、Solaris:$ps-ef|grep$ORACLE_SID|grepLOCAL=NO|grep-vgrep|awk'{print$2}'|xargs-ikill-9{}Windows:SQLselect'orakill'||(selectvaluefromv$parameterwherename='instance_name')||''||p.spidfromv$processp,v$bgprocessbpwherep.ADDR=bp.PADDR(+)andbp.PADDRisnullandp.SPIDisnotnull;在命令行执行:C:\orakilldb17642C:\orakilldb176444.停止数据库SQLshutdownimmediate清理分布式事务--9i需要设置_sum_debug_modeSQLaltersessionset_smu_debug_mode=4;altersessionsetnls_date_format='YYYY-MM-DDHH24:MI:SS';columnlocal_trna_idformata20columnglobal_tran_idformata25SELECTLOCAL_TRAN_ID,GLOBAL_TRAN_ID,FAIL_TIME,STATE,MIXEDFROMDBA_2PC_PENDING;LOCAL_TRAN_IDGLOBAL_TRAN_IDFAIL_TIMESTATEMIX------------------------------------------------------------------------------12.29.103137TAXIS.9572b613.12.29.10313730-aug-201110:09:11collectingnoSQLcommitforce'12.29.103137';Commitcomplete.SQLEXECUTEDBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('12.29.103137');PL/SQLproceduresuccessfullycompleted.SQLcommit;--清理每个分布式事务都需要commit;数据泵1.相关参数PARALLEL参数考虑可以设置成物理CPU(不是逻辑CPU)数的两倍数目,然后调整对于DataPumpExport,PARALLEL参数必须要小于等于dumpfiles数对于DataPumpImport,PARALLEL不要比dump文件数大很多,可以大一些。这个参数也指定了导入时创建索引的并行度。PARALLEL只允许在企业版使用。nohupexpdpsystem/managerschemas=kdjmDIRECTORY=DUMP_FILESPARALLEL=3dumpfile=expCASES_%U.dmplogfile=nnsiexp2008_12_28.log&通配符%U,它指示文件将按需要创建,格式将为expCASES_nn.dmp,其中nn从01开始,然后按需要向上增加相关监控--监控长事务setlinesize120columnopnameheading'Operation'formata25columntargetheading'Target'formata15columnpctheading'Percent'format999columnesheading'Elapsed|Seconds'format999999columntrheading'Time|Remaining|Seconds'format99999columnprogramformata30columnmachineformata16selectL.sidssid,substr(opname,1,25)opname,target,trunc((sofar/totalwork)*100)pct,to_char(60*sofar*8192/(24*60*(last_update_time-start_time))/1024/1024/60,'9999.0')Rate,round(elapsed_seconds/60,2)es,round(time_remaining/60,2)tr,program,machinefromv$session_longopsL,v$sessionswheretime_remaining0andl.sid=s.sidorderbystart_time;坏块恢复在遇到坏块的时,一般应按以下的流程来处理:1如果坏块的对象是索引,重建索引2使用备份来进行恢复3使用10231事件,或者DBMS_REPAIR.SKIP_CORRUPT_BLOCKS过程,让oracle跳过坏块,然后用exp导出表和使用CREATETABLEAS创建新表。4尝试使用SQL脚本将完好的数据复制到一个新表中,或者用EXP配合QUERY参数导出完好的数据。5手工修改坏块。有两种情况是不能使用事件10231和DBMS_REPAIR.SKIP_CORRUPT_BLOCKS来跳过坏块的:1硬件问题造成OS层不能读取数据。2表中的非数据块,或者说是元数据块。比如段头,ExtentMap块。这种坏块是不能跳过的。3在表中存在有其他异常的块,从单个块来看都没有损坏,checksum值也是正确的,但是有的块在段内却是有问题的。比如在段的高水位下存在未格式化的块,查询这样的表时,会报ORA-8103错误;如果块的objectid与段在数据字典里的dataobjectid不相符,则会报ORA-1401错误。Oracle数据文件的坏块,可分为物理坏块和逻辑坏块。物理坏块(也称为介质坏块),指的是块格式本身是坏的,块内的数据没有任何意义。而逻辑坏块,指的是块内的数据在逻辑上存在问题。比如说索引块的索引值没有按从小到大排列。物理坏块一般是由于内存问题、OS问题、IO子系统问题和硬件问题,逻辑坏块是由于ORACLEBUG等原因引起。对数据库中的坏块进行验证。RMANbackupvalidatedatabase;恢复一个数据文件上的多个坏块RMANblockrecoverdatafile14block56,107,276,517;检验后我们查V$DATABASE_BLOCK_CORRUPTIONSQLselect*fromv$database_block_corruption;FILE#BLOCK#BLOCKSCORRUPTION_CHANGE#CORRUPTIO---------------------------------------------------------1427610CHECKSUM1451710CHECKSUM1410710CHECKSUM145610CHECKSUM
本文标题:数据库项目组日常运维及应急故障处理手册
链接地址:https://www.777doc.com/doc-775943 .html