Oracle数据库无响应故障处理方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle数据库无响应故障处理方式相关的知识,希望对你有一定的参考价值。

参考技术A

Oracle数据库无响应故障处理方式

  Oracle数据库无响应故障,简单地讲就是数据库实例不能响应客户端发起的请求,客户端提交一个SQL后,就一直处于等待数据库实例返回结果的状态。更严重的现象是客户端根本不能连接到数据库,发起一个连接请求后,一直处于等待状态。Oracle数据库无响应故障怎么处理呢?下面跟我一起来学习Oracle数据库无响应故障的处理方法吧!

  无响应的故障现象一般有以下几种:

  1.Oracle的进程在等待某个资源或事件

  这种现象一般可以从V$SESSION_WAT、V$LATCH、V$LATCHHOLDER等动态视图中检查进程正在等待的资源或事件,而被等待的资源或事件,一直都不能被获取,甚至是很长时间都不可获得。如果这个正在等待的进程持有了其他的资源,则会引起其他的进程等待,这样就很可能引起实例中大范围的会话发生等待。由于进程在等待资源或事件时,通常都处于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--OEM与常见故障处理

OEM简介
OEM是采用直观而且方便的图像化界面来控制和管理ORACLE数据库的工具集,它包含大量对DBA有用的工具。在oracle中,数据库管理和操作都可以使用OEM来完成,如创建用户和角色,权限分配,创建方案对象,进行存储管理等。

OEM架构
OEM不仅能够管理本地数据库实例,也可以管理网络和RAC环境下数据库实例。无论是管理本地还是网络上的数据库,OEM都通过HTTP/HTTPS访问数据库,它的架构如图下图:
技术分享图片

1)Management repository:存储要监控的数据库的管理数据及状态信息。
2)OMS管理服务:监控和管理安装了management agent的数据库,并将获得的管理信息存入management repository。
3)Oracle HTTP Server:内置的apache服务器。
4)OC4J/J2EE:符合J2EE标准的应用服务器。
5)Oracle web cache:用于快速访问web。
6)Management agent:安装在被管理的数据服务器上,用于监控数据库的运行状态,资源使用,信息变更等,将信息转送到OMS,OMS将这些信息存入repository。

3、OEM的两个版本
OEM有两个不同的版本,分别是:database control 和grid control。Database control通常用于监控和管理本地单个数据库或者RAC数据库。Grid control则用于管理大规模、复杂的系统环境,它可以管理包括主机、数据库、web服务器、监听器、服务等在内的整个基础设施。
对于database control,通常不用配置任何东西,当使用DBCA或者oracle universal installer创建完数据库后,database control就可以使用了。当然,如果是通过create database语句手工创建的数据库,那么需要通过EMCA(enterprise manager configuration assistant)来配置database control。Grid control则需要和数据库分开安装,安装过程和配置要复杂一些。

OEM的使用
1、OEM的安装和配置
当通过oracle universal install安装oracle数据库时,如果选择了创建数据库(或者直接通过DBCA创建数据库),会默认安装OEM database control。数据库创建完毕之后会显示OEM的相关信息,database control URL即为OEM的访问地址。

1)使用DBCA配置OEM
DBCA提供了图形化创建OEM的方式,首先启动DBCA。

技术分享图片


技术分享图片


技术分享图片


技术分享图片


这样,采用OEM database control管理这个数据库就配置完成了,这种方式十分简单,全部通过DBCA可视化完成。

2)使用EMCA手动配置
如果通过create database语句手动创建数据库,就需要通过EMCA来配置OEM。EMCA可以设置OEM相关的各个方面,如repository存储区的重建和删除,配置文件的创建和删除等。下面是EMCA常用命令。
emca -config dbcontrol db:配置OEM database control。
Emca -deconfig dbcontrol db:删除OEM database control配置文件。
Emca -repos drop:删除repository存储区。
Emca -repos create:创建新的repository存储区。
Emca -repos recreate:重建repository存储区。
下面使用emca重新配置OEM。执行emca-config dbcontrol db-repos recreate命令,该命令会配置OEM database control并重建repository存储区。

技术分享图片


技术分享图片


技术分享图片

注意:如果未配置过OEM,请使用emca -config dbcontrol db -repos create命令配置。

2、使用EMCTL控制OEM
使用OEM之前必须确保dbconsole进程已经启动,oracle提供了EMCTL工具来启动和关闭dbconsole进程并查看其状态。
1)查看OEM状态
执行emctl status dbconsole命令,可以得到OEM是否运行、OEM的访问地址和日志存放位置。执行结果如下:

技术分享图片


2)关闭OEM
执行emctl stop dbconsole命令。
技术分享图片


3)启动OEM
执行emctl start dbconsole
技术分享图片


3、使用OEM监控和管理数据库
OEM提供了非常强大的监控和管理功能,下面介绍几种常见操作。
1)使用OEM启动和关闭数据库
首先确定监听已经运行
技术分享图片


2)查看OEM的状态
技术分享图片


3)访问OEM的URL,单击“启动”按钮
技术分享图片


4)进入主界面,单击“启动”,进入下面的界面,填写好了之后单击右上角的“确定”。
技术分享图片


技术分享图片


技术分享图片


5)进入到主界面
技术分享图片


6)OEM监控数据库运行
OEM启动后,就可以使用OEM管理、监控和维护数据库了。首先访问OEM。并使用SYS或者SYSTEM账户登录。
OEM用户的角色分为两种:管理员权限和非管理员权限。管理员拥有很高的权限,如监控、修改设置、数据库审计、升级及备份恢复等。非管理员权限只能查看信息而不能修改任何设置。登录后可以看到OEM的主界面,划分了7个功能标签供用户选择,分别是主目录、性能、可用性、服务器、方案、数据移动、软件和支持。下面分别介绍其功能。

7)主目录
主目录部分呈现了数据库实例的整体状态,它通过图形的形式呈现,而更具体的指标和内容可以单击相应的内容获得。例如:要获得CPU具体情况,可以单击CPU图下面的带下划线的数据。其他情况类似,如下图所示:

技术分享图片


点击上图中的监听程序,弹出下面的界面

技术分享图片


技术分享图片


8)性能
性能部分主要提供了主机监控、用户连接监控及i/o性能,还有其他相关的连接选项用于辅助判断。
主机监控:监控是否存在cpu瓶颈。它呈现了cpu使用率的曲线图,清晰地呈现出不同时段cpu使用率的高低。如果发现某段时间内cpu使用率极高,并且已经出现了性能问题,如终端用户反映应用系统变慢,那么这时就需要分析用户会话,看那些sql正在消耗cpu资源。
平均活动会话监控:这是分析性能问题的关键部分,它呈现了实例中某个时间段内会话正在等待哪些事件,以及哪些会话正在等待那些事件,事件会用不同的颜色表示。
技术分享图片


技术分享图片


单击上图中的“重复的sql”连接,将显示实例中重复次数较多的sql,建议开发人员使用参数绑定修改这些sql,提高cpu利用率。
技术分享图片


9)可用性
可用性部分主要针对备份和恢复的设置和管理,下面将使用OEM进行备份。
技术分享图片


单击上图中的“备份设置”,进入备份设置页面
技术分享图片


技术分享图片


填写主机×××明,用户名oracle,密码:xxx,磁盘的备份位置采用默认即可,并行度为1,最后单击“测试磁盘备份”。如果成功则设置完毕,否则根据提示重新填写。

技术分享图片


技术分享图片


技术分享图片

然后单击上图中“备份集”标签,如下图所示:
技术分享图片

技术分享图片


填写备份片的大小,压缩算法,单击“确定”按钮完成设置。单击“策略”标签,可以对备份策略、保留策略及其他策略进行设置,此处采用默认设置。
技术分享图片


设置完毕之后单击“确定”

技术分享图片


备份设置完毕之后需要进行调度备份设置(单击下图中的“调度备份”)
技术分享图片

填写正确的×××明,单击“调度定制备份”按钮
技术分享图片


技术分享图片


技术分享图片


设置调度频率,选中“一次(立即)”,单击下一步。
技术分享图片


对前面的设置进行复查,确认无误后,单击“提交作业”
技术分享图片


技术分享图片


调度备份成功后,可以单击下图中的“管理当前备份”连接,对备份进行管理

10)服务器
服务器部分包括存储、数据库配置、调度、统计、资源、安全、查询优化及更改数据管理功能,如下图所示:
技术分享图片


下面介绍一个常用的管理功能:用户管理
创建用户首先要为用户创建表空间,如下图所示,该界面以列表的形式呈现了表空间的一些关键指标,如已分配的大小、已用空间、是否自动扩展、空闲的已分配空间,下面创建一个表空间MDR。

技术分享图片


技术分享图片


技术分享图片


技术分享图片


单击右下角的“确定”,表空间创建完毕,现在创建用户,首先进入用户管理界面,如下图所示:
技术分享图片


单击上图中的“创建”按钮,输入相关信息,如下图所示。
技术分享图片


然后点击“角色”,为用户分配角色,单击“编辑列表”
技术分享图片


技术分享图片


然后单击“确定”创建用户。

11)方案
方案部分主要包括对数据库对象、程序、物化视图、字变更管理、用户自定义类型,XML数据库、工作区管理器及文本管理器的管理,如下图所示:

使用最多的是“表”管理,下面为MDR用户新建一张表。
技术分享图片

单击上图中的“创建”。

技术分享图片

技术分享图片

技术分享图片


12)数据移动
数据移动部分包括移动行数据、移动数据文件、流管理及高级复制功能,
下面利用移动行数据的导出功能,导出MDR方案,单击上图中的“导出到导出文件”
技术分享图片


但是提示不能以sysdba的角色登录,所以我这里更换成为system用户登录操作。


技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

上图默认即可

技术分享图片

技术分享图片

确认无误后,提交作业。
技术分享图片

导出文件位置是data_pupm_dir目录所在的位置,可以通过select * from dba_directories查询。

13)软件和支持
软件和支持部分提供了丰富的软件管理内容,包括软件的配置管理、补丁管理,real application testing和部署过程管理器。
技术分享图片
配置管理:主机的配置,状态信息及资源使用率信息等。
补丁管理:可以查看当前的补丁建议,安装补丁的前提要求及应用补丁程序。
Real application testing:包括数据库重放和sql性能分析程序。
部署过程管理器:管理当前已经部署好的过程,包括编辑、查看、运行及监控部署好的过程。

以上是关于Oracle数据库无响应故障处理方式的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库故障处理方法

ORACLE数据库环境故障数据恢复方案

Oracle 10g 最大可分配内存数问题,请数据库高手给予解答,详细问题见下:

Oracle不能连接故障排除[TNS-12541: TNS: 无监听程序]

Oracle Scan Listener过大导致的数据库Hang

Oracle数据库监听非常慢,基本hang住故障处理