⑴ Oracle数据库无响应故障处理方式
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 mp;使用strace、truss等工具检查异常进程的系统调用;使用pstack、procstack等工具察看异常进程的call stack等。
6. 使用SQLPLUS连接上数据库后,进行hanganalyze、system state mp等操作;或检查等待事件、异常会话等正在执行的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 用sql语句查询 已打补丁列表。
sys@NGAC>select*fromv$version;
BANNER
--------------------------------------------------------------------------------
.2.0.3.0-64bitProction
PL/SQLRelease11.2.0.3.0-Proction
CORE11.2.0.3.0Proction
TNSforLinux:Version11.2.0.3.0-Proction
NLSRTLVersion11.2.0.3.0-Proction
或者
[oracle@svr-ww-ora02OPatch]$$ORACLE_HOME/OPatch/opatchlsinventory
.2.0.3.0
Copyright(c)2012,OracleCorporation.Allrightsreserved.
OracleHome:/u01/app/oracle/proct/11gr2/db_1
CentralInventory:/u01/app/oraInventory
from:/u01/app/oracle/proct/11gr2/db_1/oraInst.loc
OPatchversion:11.2.0.3.0
OUIversion:11.2.0.3.0
Logfilelocation:/u01/app/oracle/proct/11gr2/db_1/cfgtoollogs/opatch/opatch2014-01-03_16-46-01PM_1.log
LsinventoryOutputfilelocation:/u01/app/oracle/proct/11gr2/db_1/cfgtoollogs/opatch/lsinv/lsinventory2014-01-03_16-46-01PM.txt
--------------------------------------------------------------------------------
InstalledTop-levelProcts(1):
OracleDatabase11g11.2.0.3.0
.
Interimpatches(1):
Patch14275605:appliedonTueOct3013:12:42CST2012
UniquePatchID:15367368
Patchdescription:"DatabasePatchSetUpdate:11.2.0.3.4(14275605)"
Createdon3Oct2012,18:38:19hrsPST8PDT
Sub-patch13923374;"DatabasePatchSetUpdate:11.2.0.3.3(13923374)"
Sub-patch13696216;"DatabasePatchSetUpdate:11.2.0.3.2(13696216)"
Sub-patch13343438;"DatabasePatchSetUpdate:11.2.0.3.1(13343438)"
Bugsfixed:
14480676,13566938,13419660,10350832,13632717,14063281,12919564
13624984,13430938,13467683,13588248,13420224,14548763,13080778
12646784,13804294,12861463,12834027,13377816,13036331,12880299
14664355,13499128,14409183,12998795,12829021,13492735,12794305
13503598,10133521,12718090,13742433,12905058,12401111,13742434
13257247,12849688,13362079,12950644,13742435,13464002,12917230
13923374,12879027,14613900,12585543,12535346,14480675,12588744
11877623,14480674,13916709,12847466,13773133,14076523,13649031
13340388,13366202,13528551,13981051,12894807,13343438,12582664
12748240,12797765,13385346,12923168,13384182,13612575,13466801
13484963,12971775,11063191,13772618,13070939,12797420,13035804
13041324,12976376,11708510,13742437,13737746,14062795,13035360
12693626,13742438,13326736,13332439,14038787,14062796,12913474
13001379,14390252,13099577,13370330,13059165,14062797,14275605
9873405,13742436,9858539,14062794,13358781,12960925,13699124
12662040,9703627,12617123,13338048,12938841,12658411,12620823
12845115,12656535,14062793,12678920,12764337,13354082,13397104
14062792,13250244,12594032,9761357,12612118,13742464,13550185
13457582,13527323,12780983,12583611,13502183,12780098,13705338
13696216,13476583,11840910,13903046,13572659,13718279,13554409
13657605,13103913,14063280--------------------------------------------------------------------------------
OPatchsucceeded.
我不记得sql可以直接查询patch,因为补丁一般都是针对oracle数据库软件的。
⑶ 如何查看oracle数据库已经安装的补丁
1、在SqlPlus中,添加Select查询语句。
⑷ 中国平安数据库打补丁怎么打
上帝_无言
关注
Oracle数据库打补丁方法 原创
2022-04-29 17:54:42
1点赞
上帝_无言
码龄5年
关注
本篇仅针对DB 12.1.0.2.0 版本12C 的Opatch工具打补丁来讲解
Oracle 补丁过程
一,全库备份 oracle
用户:
abcdef
密码:
123
数据库:
ruru
全库导出命令
exp abcdef/123@ruru file=E:\bak.dmp full=y
二,关闭实例,关闭进程,关闭监听器。
1.开始菜单搜索,打开Sqlplus, 输入 /as sysdba 登录
2.执行 shutdown immediate 关闭数据库实例,
3.停止相关服务,打开任务管理器,服务列,找到oracle相关服务右键停止
4.停止相关进程,打开任务管理器,进程列,找到相关进程 结束进程。
三,备份Opatch, 解压补丁,打补丁。
1.opatch 文件夹备份,防止错误,可以恢复。
2.开始菜单搜索 命令提示符, 右键 以管理员身份运行,
进入到 %ORACL_HOME%\APP\proct\12.1.0\dbhome_1\OPatch
再进入相关补丁文件内 执行 …\opatch apply 命令执行打补丁过程
最后显示 Successed 即为打补丁成功。
四,启动相关进程,启动oracle, 更新sql.
1.启动之前关闭的服务器 服务列中相关服务,点击开始,
2.使用sqlplus连接数据库,启动实例
开始菜单搜索,打开Sqlplus, 输入 /as sysdba 登录
3.使用 startup 命令启动数据库实例。
4. 使用 PL/SQL 测试是否可以正常连接数据库,
如果连接失败 运行打开PDB, 如果正常连接 则不需要。
alter pluggable database all open;
5.更新注册信息 到数据表,
在sqlPlus中 执行该命令
@?/rdbms/admin/dpload.sql
最后结果出现如下图,即为打补丁成功。
文章知识点与官方知识档案匹配
MySQL入门技能树使用数据库 创建和删除数据库
29055 人正在系统学习中
打开CSDN,阅读体验更佳
Windows环境下给oracle打补丁详细教程_范微的博客
检测当前数据补丁安装情况。C:\WINDOWS\system32>opatch lsinventory Invoking OPatch 11.1.0.6.6 Oracle 中间补丁程序安装程序版本 11.1.0.6.6 版权所有 (c) 2009, Oracle Corporation。保留所有权利。 Oracle 主目录 : F:\app\mr_...
oracle滚动打补丁,使用Oracle Opatch打补丁_从一小姐的博客
1: MOS上下载对应的补丁(support.oracle.com); 2: 在打补丁前,有条件的情况下对数据库进行一次全备份; 检查数据库环境: 每个补丁的应用都有一定的环境,包含数据库版本,Opatch版本,我们通过命令opatch Isinventory来进行检查,操作如下:...
Oracle数据库如何打补丁
Oracle安装好后,还需要打上补丁,才能够稳定地运行的哦。
mysql漏洞如何打补丁_【补充】Mysql数据库测试及使用环境搭建教程
一、背景介绍Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称叫做MSF。Metasploit作为全球最受欢迎的工具,不仅仅是因为它的方便性和强大性,更重要的是它的框架。它允许使用者开发自己的漏洞脚本,从而进行测试。那么如何利用Metasploit(msf)进行Mysql弱口令爆破呢?如何搭建Sql靶机呢?接下来让我们一起学习!二、资...
继续访问
Oracle 11.2.0.4打补丁的方法_蚁库的博客
Oracle 11.2.0.4打补丁的方法 一、概述 本文主要介绍了Oracle 11.2.0.3 升级到11.2.0.4的补丁的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 二、打补丁 所需补丁及高版本opatch...
oracle数据库如何打补丁_DoveFeng的博客
为解决手工方式的缺陷,从9.2版开始,Oracle公司设计实现了个别补丁安装管理工具opatch.opatch使用一个称为inventory的系统数据结构(严格说是与oui共享inventory),集中管理所有已安装的个别补丁;个别补丁的安装和卸载都使用opatch命令完成,冲突检测...
Oracle补丁就该这么打
Oracle补丁就该这么打 原创 金震宇 IT那活儿 今天 [ 补丁集下载 ] oracle打补丁最常见原因为bug修复或安全迎检漏洞修复需要打到最新的补丁版本。下文的经验之谈是基于rac环境,19c版本的最新补丁集的过程分享。 可以参考《Assistant:Download Reference for Oracle Database/GI Update, Revision, PSU,SPU(CPU), Bundle Patches, Patchsets and Base Releases (Doc I
继续访问
最新发布 Oracle rac 19C(19.16)补丁升级(OPatch 34130714)操作过程
在升级完成后本次操作有个实例未能启动,手动通过集群命令进行拉起此告警实例。6.完成数据字典更新后关闭实例进行OJVM升级,再次进行数据字典升级。6.完成数据字典更新后关闭实例进行OJVM升级,再次进行数据字典升级。2.两个节点grid、oracle替换OPatch工具。2.两个节点grid、oracle替换OPatch工具。2.两个节点备份grid、oracle家目录。2.两个节点备份grid、oracle家目录。5.节点一所有实例,进行数据字典更新。5.节点一所有实例,进行数据字典更新。
继续访问
记录Oracle rac 19C(19.15)补丁升级(OPatch 33803476)操作过程
提示以下是本篇文章正文内容,下面案例可供参考。
继续访问
Windows环境下给oracle打补丁详细教程
Windows环境下给oracle打补丁详细教程
继续访问
oracle 打补丁
oracle 11G补丁安装
继续访问
小白入门(九):Oracle数据库打补丁操作过程
文章目录前言简要介绍:一.OPatch 更新:1、检查目前补丁包版本($ORACLE_HOME下):2、创建目录备份当前Opatch工具:3、传输压缩包并解压Opatch工具至$ORACLE_HOME下:二、应用PSU补丁:1、Oraclehome下创建目录解压PSU补丁:2、执行oracle 中间补丁安装程序:3、停止监听以及数据库:4、应用补丁:三、数据库应用补丁:1、升级数据库数据字典、编译无效对象 :2、查看 PSU 更新信息3、opatch 检查:1、升级前检查是否有冲突1.1测试兼容性, 如果之
继续访问
oracle 补丁,Oracle补丁介绍一
【前言】保证数据库的稳定与安全运行是DBA的价值所在,Oracle Database本身也是一个软件,随着系统的使用场景和使用深度的增加一些原本没被发现的漏洞或BUG就会逐渐被发现。所以成熟的IT企业,往往会定期对数据库进行安全检查和补丁的更新;【一】Oracle版本命名规则在进行Oracle更新补丁之前,先对Oracle的版本命名有个认识。从9i之后,oracle版本命名规则定义如下:A.B.C...
继续访问
热门推荐 mysql[漏洞打补丁]小版本升级5.7.25到5.7.28
mysql[漏洞]小版本升级 事件背景 近日,公司进行安全扫描,发现mysql存在漏洞,高危漏洞编号为(CVE-2019-3822),此外还有多个中危,低危漏洞,目前mysql版本为5.7.25 解决方案 对mysql进行小版本升级到5.7.28,生产环境无法联网,用rpm 包离线安装,选择就地升级。 Mysql的两种升级方式 就地升级(In-place Upgrade) 关闭旧版本mys...
继续访问
Oracle打补丁步骤
1、登录MOS,在patches&updates查找自己想要安装的补丁号或者bug code,下载补丁。同时查阅readme,这里面写的是怎么安装补丁以及安装补丁的事项。 2、将下载好的zip文件传入要打补丁的主机。解压到一个文件夹里(可以是自己临时创建的一个文件夹<PATCH_TOP_DIR>,但需要注意整个文件夹包括里面的文件的属主都修改为oracle) 3、关闭数据库...
继续访问
Oracle 11.2.0.4 RAC 手动打补丁
1 补丁介绍 GI补丁一般包括DB补丁,在打GI补丁过程中会自动打上DB补丁。也就是说GI版本>=DB版本 比如下载GI补丁包p26635745_112040_Linux-x86-64,解压其实里面包括22502505、26392168、26609929三个目录,而DB补丁包p26392168_112040_Linux-x86-64.zip解压后就是26392168目录 1. 1 下载补丁和...
继续访问
oracle滚动打补丁,ORACLE打补丁的方法和案例
打补丁使用opatch工具,具体操作方法以补丁包中的readme.txt为准1.查看某个补丁是否安装的方法(下面命令不行就升级opatch)$ORACLE_HOME/OPatch/opatchlsinventory2.下载补丁包查看当前opatch版本。Oracle 11.2.0.1.0自带的opatch版本是11.1.0.6.6。补丁包的README.html中有描述该补丁或PSU需要的最低版本...
继续访问
oracle滚动打补丁,Oracle打补丁过程补丁7272646
redhat enterprise linux 6.1安装oracle 11.1.0.6.0,会提示错误:OUI-18001:the operating systemRedHat enterprise linux 6.1安装Oracle 11.1.0.6.0会提示错误:OUI-18001:the operating system 'Linux