如何查看oracle故障 oracle故障排查

oracle数据库服务器报警灯亮可能是服务器硬盘出现故障 。
【如何查看oracle故障 oracle故障排查】解决办法:
1、重启设备 , 进入RAID管理界面 。
2、选中硬盘状态为Frn-Bad如何查看oracle故障的硬盘,然后选择makeunconfiguredgood , 点击回车,此时硬盘状态变为Foreign 。
3、清除已存在如何查看oracle故障的RAID信息 , 此时硬盘变为UG(UnconfigGood)状态 , 重新拔插该硬盘 , 保存退出RAID卡管理界面 。
4、重启设备 , 此时黄灯已消失,故障解决,也就是重新做RAID,安装操作系统即可 。
如何查看oracle数据库中哪些session异常阻塞了系统Oracle数据库运维过程中有时会遇到一种异常情况,由于错误的操作或代码BUG造成session异常地持有锁不释放,并大量阻塞系统对话 。这时候需要找出造成异常阻塞的session并清除 。oracle session通常具有三个特征:(1)一个session可能阻塞多个session;(2)一个session最多被一个session阻塞;(3)session阻塞关系不会形成环路 。(环路即死锁,oracle能自动解除)因此session的阻塞关系为一棵树,进而DB系统所有session的BLOCK阻塞关系是一个由若干session阻塞关系树构成的森林,而异常session一定会在故障爆发时成为根(root) 。因此,找寻异常锁表session的过程就是找出异常的root 。一般认为异常root有两个特征:(1)block树的规模过大,阻塞树规模即被root层层阻塞的session总数;(2)阻塞的平均等待时间过长 。查找异常session的方法一:OEM— performance— Blocking Sessions查找异常session的方法二:select r.root_sid, s.serial#,r.blocked_num, r.avg_wait_seconds,s.username,s.status,s.event,s.MACHINE,s.PROGRAM,s.sql_id,s.prev_sql_idfrom (select root_sid, avg(seconds_in_wait) as avg_wait_seconds,count(*) - 1 as blocked_numfrom (select CONNECT_BY_ROOT sid as root_sid, seconds_in_waitfrom v$sessionstart with blocking_session is nullconnect by prior sid = blocking_session)group by root_sidhaving count(*)1) r,v$session swhere r.root_sid = s.sidorder by r.blocked_num desc, r.avg_wait_seconds desc;该SQL语句即是根据v$session的字段blocking_session统计阻塞树根阻塞session的计数以及平均阻塞时间、并进行排序,排名最前的往往是异常session 。另外需要注意的是,持有锁时间最长、或等待时间最长的session都不一定是造成阻塞的根源session!
oracle启动时的错误日志在哪里?在“oracle安装路径\product\oracle版本\admin\实例名称\bdump”路径下 。
备注:根据文件修改的时间,找到启动日志“.trc”文件,即可看到错误信息 。
Oracle数据库无响应故障处理方式 Oracle数据库无响应故障处理方式
Oracle数据库无响应故障如何查看oracle故障,简单地讲就是数据库实例不能响应客户端发起的请求,客户端提交一个SQL后 , 就一直处于等待数据库实例返回结果的状态 。更严重的现象是客户端根本不能连接到数据库,发起一个连接请求后 , 一直处于等待状态 。Oracle数据库无响应故障怎么处理呢?下面跟我一起来学习Oracle数据库无响应故障的处理方法吧!
无响应的故障现象一般有以下几种:
1.Oracle的进程在等待某个资源或事件
这种现象一般可以从V$SESSION_WAT、V$LATCH、V$LATCHHOLDER等动态视图中检查进程正在等待的资源或事件 , 而被等待的资源或事件,一直都不能被获?。踔潦呛艹な奔涠疾豢苫竦?。如果这个正在等待的进程持有如何查看oracle故障了其如何查看oracle故障他的资源,则会引起其他的进程等待,这样就很可能引起实例中大范围的会话发生等待 。由于进程在等待资源或事件时 , 通常都处于SLEEP状态,消耗的CPU资源非常少(在等待latch时要稍微多消耗一些CPU资源),所以从OS来看,CPU的消耗并不高,甚至是非常低 。
这种因为等待而引起的个别进程Hang , 相对比较容易处理 。
2. OracleProcess Spins
所谓Spin , 就是指Oracle进程中的代码在执行某个过程时 , 陷入了循环 。在V$SESSION视图中,往往可以看到Hang住的会话,一直处于“ACTIVE”状态 。对于这样的会话,用“alter system kill session ‘sid,serial#’”命令也不能完全断开会话,会话只能被标记为“killed”,会话会继续消耗大量的CPU 。进程Spins由于是在做循环,CPU的消耗非常大,从OS上明显可以看到这样的进程,通常会消耗整个CPU的资源 。
而对于这样的Hang住的会话,处理起来相对比较复杂 , 并且为了从根本上解决问题,需要超过DBA日常维护所需要的技能 。
从故障范围来看,无响应故障可以分为以下几种情况:
1. 单个或部分会话(进程)Hang住
这种情况属于小范围的故障 , 业务影响相对较小,一般来说只会影响业务系统的个别模块 。在一个多应用系统的数据库上面,如果Hang住的会话比较多 , 则影响的可能是其中的一个应用系统 。这里有一个例外,如果Hang住的进程是系统后台进程,如pmon、smon等,则影响的范围就非常大了,最终甚至会影响整个数据库及所有应用系统 。还有值得注意的是,即使是少部分会话Hang住 , 也要及时处理,否则极有可能会扩散到整个系统 。
2. 单个数据库实例Hang住
这种情况造成的影响非常大 。在这个实例上的所有应用系统均受到严重影响,并且在找到根源并最终解决问题之前,数据库实例往往须要重启 。
3. OPS或RAC中的多个实例或所有实例都Hang住
在这种情况下,即使是OPS或RAC,都已经没办法提供高可用特性了 。使用这个数据库的所有应用系统将不能继续提供服务,这种情况往往须要重启 。
无响应故障成因分析
Oracle数据库无响应,一般主要由以下几种原因引起:
1. 数据库主机负载过高,严重超过主机承受能力
比如应用设计不当 , 数据库性能低下,活动会话数的大量增加,导致数据库主机的负载迅速增加,数据库不能正常操作 , 并最终Hang住;主机物理内存严重不足,引起大量的换页,特别是在SGA中的内存被大量换出到虚拟内存时,数据库实例往往就会Hang住 。
2. 日常维护不当、不正确的操作引起数据库Hang住
比如归档日志的存储空间满,导致数据库不能归档,引起数据库Hang住;在一个大并发的繁忙的系
统上,对DML操作比较多的大表进行move、增加外键约束等操作也可能使系统在短时间内负载大幅升高,并引起数据库系统Hang住;不正确的资源计划(Resource Plan)配置,使进程得不到足够的CPU等 。
3. Oracle数据库的Bug
几乎每个版本都存在着会导致数据库系统Hang住的Bug,这些Bug会在一些特定的条件下触发,特别是在RAC数据库中 , 引起数据库Hang住的Bug比较多 。
4. 其他方面的一些原因
比如在RAC数据库中,如果一个节点退出或加入到RAC的过程中 , 当进行Resource Reconfiguration时,会使系统冻结一段时间,也有可能使系统Hang住 。
以上所描述的几种常见的会导致Oracle数据库实例Hang住的原因中,大部分的情况是可以避免的,只要维护得当,一般不会出现这种故障 。对于Oracle数据库Bug所导致的数据库无响应故障 , 由于是在特定的情况下才会触发,所以如果能够尽量对数据库打上最新版本的补丁,并且熟悉当前版本中会导致系统Hang住的Bug以及触发条件,就能够最大限度地避免这种故障的发生,提高系统的可用性 。
那么 , 在数据库Hang住的情况下,如何去分析并发现导致问题的根源?一方面,由于系统Hang住会导致业务系统不可用,为了能够尽快地恢复业务,须快速地判断问题所在,然后Kill掉引起故障的会话和进程,或者数据库实例不得不重启以迅速恢复业务;但另一方面,如果只是重启数据库或Kill会话和进程来解决问题,在很多情况下是治标不治本的办法,在以后故障随时可能会出现 。如何在二者之间进行抉择呢?对于数据库Hang故障的处理,首先是尽可能地收集到系统Hang住时的状态数据,然后尽快地恢复业务 , 恢复业务后分析收集到的数据,找到数据库系统Hang住的真正原因 , 然后再进行相应的处理 。下一节将详细描述数据库系统Hang住后的处理流程 。
无响应故障处理流程
对于Oracle无响应故障的处理,我们可以按下图所示的流程进行 。
值得注意的是 , 上图并不是一个完整的Oracle数据库故障处理流程图,只是处理Oralce数据库无响应这一类特定的故障的流程 , 只列出了针对这一特定类型故障处理时的关键处理点 。不过既然是故障,所以这类故障的处理流程与其他故障的处理流程,有着非常相似的地方 。
下面是整个流程的详细说明:
1. 在出现数据库无响应故障后,首先确认系统的影响范围,如上节所描述的',是部分业务系统或模块还是所有的业务系统都受影响,是不是整个实例或多个实例都无响应 。同时应询问系统维护和开发人员,受影响的系统在出现故障前是否有过变动,包括主机硬件、操作系统、网络、数据库以及应用等 。有时一个细小的变动就可能导致出现数据库Hang住这样严重的故障 。曾经遇到一个库,应用只是修改了一个SELECT语句就导致了数据库Hang住 。
2. 为了避免由于网络、数据库监听或客户端因素影响分析 , 建议都登录到主机上进行操作 。
3. 如果主机不能登录(为了避免干扰流程主线,这里不讨论如网络问题这样也会导致不能连接的故障),尝试关闭出现问题的业务系统,甚至是所有的业务系统 。如果关闭了所有的业务系统之后 , 仍然不能连接,则只有考虑重新启动数据库主机 。在数据库主机重新启动后,使用操作系统工具或OSW等长期监控操作系统的资源使用,同时监控Oracle数据库的性能和等待等 。
4. 登录上主机后,先用top、topas等命令简单观察一下系统 。看看系统的CPU使用、物理内存和虚拟内存的使用、IO使用等情况 。
5. 使用SQLPLUS连接数据库,如果不能连接,则只能从操作系统上观察系统中是否有异常的现象,比如占用CPU过高的进程 。使用gdb、dbx等debugger工具对数据库进行system state dump;使用strace、truss等工具检查异常进程的系统调用;使用pstack、procstack等工具察看异常进程的call stack等 。
6. 使用SQLPLUS连接上数据库后 , 进行hanganalyze、system state dump等操作;或检查等待事件、异常会话等正在执行的SQL等待 。
7. 找到故障产生的原因,如果暂时找不到原因,尽量收集数据 。
8.确良如果应用急须恢复,可通过Kill会话、重启数据库实例等方式 , 先恢复应用 。
9. 根据最终诊断结果,对数据库升级打补?。蛘咝薷挠τ玫确绞酱痈旧辖饩鑫侍?。
怎样避免数据库出现无响应故障
作为Oracle数据库DBA , 除了处理故障之外,更重要的是如何预防故障的发生 。根据前面对数据库无响应故障的成因分析,在日常的维护工作中,须做到以下几点:
1. 进行正确的维护操作
很多的数据库无响应故障都是由于不正确的维护操作引起的 。应避免在业务高峰期做大的维护操作 , 比如像move、加主外键约束等会长时间锁表的操作 。如果的确需要 , 尽量使用正确的操作方法 。比如用ONLINE方式重建索引;建主键、唯一键约束时先建索引,然后在建约束时指定新建的索引,等等 。也就是保证系统的并发性、可伸缩性,避免系统串行操作的出现 。
2. 优化应用设计 , 优化数据库性能
为避免性能问题导致在业务高峰期数据库不能及时有效处理来自业务的请求,甚至于完全Hang住 。对于数据库中存在串行访问的部分进行优化,比如latch、enqueue,还包括不合理的sequence设计等 。特别是在RAC数据库中,严重串行访问等待往往更容易引起严重的性能问题 。优化应用设计,使数据库具有更好的可伸缩性和并行处理能力,能够有效地避免性能问题引起的数据库Hang住 。
3. 利用监控系统随时监控系统负载
遇到系统负载过高 , 内存不足,OS中虚拟内存换页很频繁等情况时,及时采取措施;监控Oracle数据库的核心进程,如pmon、smon等,看是否有异常,如过高的CPU消耗 。出现异常应立即处理;监控归档空间和日志切换;监控数据库中的等待事件,比如是否有大量的enqueue、log file switch (archiving needed)、resmgr:become active等待事件等 。
4. 为数据库打上补丁
很多的无响应故障是由于Oracle的Bug引起的,数据库DBA应关注当前版本中有哪些Bug会导致数据库Hang住,尽量为数据库打上解决这些Bug的补丁 。
;
关于如何查看oracle故障和oracle故障排查的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读