您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/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、应用主机到数据库主机的网络出现问题。立即联系网络维护人员查看。数据库hang住应急处理方式:重启数据库。常规处理方式:(1)分析alert日志,看是否能从alert日志中,可以很快找到引起问题的原因。(2)做3级别的hanganalyze,先做一次,然后隔一分钟以后再做一次。并分析hanganalyze生成的trace文件,看是否可以找到引起数据库hang住的会话的信息。(3)做systemstatedump此时生成systemstatedump的时间会比较长,尤其是在会话数量较多的情况下。且生成dump文件的大小较大,在G级别以上。在生成一次以后,过一分钟再收集一次,另外如果是RAC,那么两个节点都需要收集。对hang做dump请参考“对数据库HANG做DUMP一章”。数据误删除此问题,没有应急办法,只能按如下步骤处理:1、对于10g及以上版本,看是否可以通过闪回进行恢复。2、查看测试环境数据库,看其中是否有需要的数据。3、使用备份进行恢复,此方法一般花费时间较长。数据库自动任务维护10gselectjob_name,program_name,schedule_name,job_classfromdba_scheduler_jobswherejob_name='GATHER_STATS_JOB';11gselectclient_name,statusfromdba_autotask_client;CLIENT_NAMESTATUS---------------------------------------------autooptimizerstatscollectionENABLEDautospaceadvisorENABLEDsqltuningadvisorENABLED其中“autooptimizerstatscollection”便是我们要寻找的自动收集统计信息的任务名称禁止自动收集统计信息的任务execDBMS_AUTO_TASK_ADMIN.DISABLE(client_name='autooptimizerstatscollection',operation=NULL,window_name=NULL);启用自动收集统计信息的任务execDBMS_AUTO_TASK_ADMIN.ENABLE(client_name='autooptimizerstatscollection',operation=NULL,window_name=NULL);快速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开始,然后按需要向上增加EXPDP创建directorycreatedirectorydpdata1as'd:\test\dump';查看directoryselect*fromdba_directories;授权grantread,writeondirectorydpdata1toscott;导出数据1)按用户导expdpscott/tiger@orclschemas=scottdumpfile=expdp.dmpDIRECTORY=dpdata1;2)并行进程parallelexpdpscott/tiger@orcldirectory=dpdata1dumpfile=scott3.dmpparallel=40job_name=scott33)按表名导expdpscott/tiger@orclTABLES=emp,deptdumpfile=expdp.dmpDIRECTORY=dpdata1;4)按查询条件导expdpscott/tiger@orcldirectory=dpdata1dumpfile=expdp.dmpTables=empquery='WHEREdeptno=20';5)按表空间导expdpsystem/managerDIRECTORY=dpdata1DUMPFILE=tablespace.dmpTABLESPACES=temp,example;6)导整个数据库expdpsystem/managerDIRECTORY=dpdata1DUMPFILE=full.dmpFULL=y;还原数据1)导到指定用户下impdpscott/tigerDIRECTORY=dpdata1DUMPFILE=expdp.dmpSCHEMAS=scott;2)改变表的ownerimpdpsystem/managerDIRECTORY=dpdata1DUMPFILE=expdp.dmpTABLES=scott.deptREMAP_SCHEMA=scott:system;3)导入表空间impdpsystem/managerDIRECTORY=dpdata1DUMPFILE=tablespace.dmpTABLESPACES=example;4)导入数据库impdbsystem/managerDIRECTORY=dump_dirDUMPFILE=full.dmpFULL=y;5)追加数据impdpsystem/managerDIRECTORY=dpdata1DUMPFILE=expdp.dmpSCHEMAS=systemTABLE_EXISTS_ACTION相关监控--监控长事务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_C
本文标题:数据库日常运维及应急故障处理手册
链接地址:https://www.777doc.com/doc-4460325 .html