设为首页 收藏本站
查看: 984|回复: 0

[经验分享] Oracle 关闭(shutdown immediate)时hang住

[复制链接]

尚未签到

发表于 2018-9-7 06:13:12 | 显示全部楼层 |阅读模式
  昨天晚上生产的两套10.2.0.4的数据库修改了参数,需要重启。在发出shutdown immediate命令后等了大概10分钟的时间,数据库还没有down下来。检查后台alert日志,发现从开始shutdown到最后只输出几条日志,其中最后一条日志是:SHUTDOWN: Active processes prevent shutdown operation。
DSC0000.png

  图为在虚拟机上还原场景时的截图。
  开一个新的会话连接显示已连接,但无法查视图,又提示未连接。再次执行shutdown immediate命令得到报错如下:
DSC0001.png

  立马百度了一下这个问题,随便点开一个去看,说是因为在sqlplus / as sysdba 连接的情况下又执行host命令导致的。如下图这种情况
DSC0002.png 马上想到我这边也是这种情况,赶紧把相应的会话从操作系统中kill掉。kill掉之后,数据库又正常关闭了(这是在虚拟机上的情况)。

  在实际的生产中却是,把会话kill掉之后又等了几分种,还是没有返应,于是只得强制shutdown abort了。好在业务都是提前停了,不过在执行这条命令是还是有些忐忑的,就怕数据库起不来。
  在看贴子的时候,作者提到了他在停库前做了切换日志,归档和checkpoint的操作来以防万一,我觉得这也是一个可取的地方,以后在停生产库时不应该业务停了就立马停数据库,也应该做这些操作来保护数据。
  俗话说祸不单行,真是没错,就在第一个数据库成功重启后,在shutdown第二套数据库也hang住了,但这次报错与上次还不一样!!!(我的小心脏啊。。)
  alert输出信息如下:
DSC0003.png

  从输出信息可以了解到有进行还没有执行完,但业务都已经停了,会是什么进行呢。由于还有其他事情,就没去管是什么进行,就直接kill掉了,但数据库还是停不下来啊。
  最后还是只得shutdown abort了,还是依然的忐忑。最后平安无事。
  这个问题最后也没有在虚拟机上模拟出来,始终不知道是什么。
  总结一下:
  1、自己给自己挖坑的滋味真是不好受啊。
  2、关闭数据库前做一些切换日志文件、归档和checkpoint的操作,来保证数据的安全性
  3、关闭数据库前一定做好检查,是否有未解决的事务、JOB、或其他进程,避免出现类似第二种的情况
  4、要有一颗强大的内心,相信自己:)
  事后在MOS上查到了一些相关信息:
  MOS文档

  Troubleshooting Shutdown Immediate/Normal Hanging Issues (文档>  列举四种shutdown Hang的情况。
  第一种情况的原因和给出的解决方案

  Shutdown Immediate Hangs / Active Processes Prevent Shutdown (文档>CAUSE
  This is not a bug.
  If the DB Control repository is running on the database target against which shutdown immediate was attempted then an incorrect order of events seems used.
  You should stop DB Control first to get rid of all connections between DB Control and the repository database and then shutdown the database with 'shutdown immediate'.
  Current database sessions may show:
  SQL> select SID, USERNAME, PROGRAM from v$session;
  SID   USERNAME               PROGRAM
  ----- ---------------------- ----------------------------------
  243 SYSTEM                 SQL Developer
  246 SYSMAN                 OMS
  247                        oracle@lgiora09 (q001)
  248                        oracle@lgiora09 (q000)
  251 DBSNMP                 emagent@lgiora09 (TNS V1-V3)
  252 SYSMAN                 OMS
  253 SYSMAN                 OMS
  254 DBSNMP                 emagent@lgiora09 (TNS V1-V3)
  255 SYSTEM                 java.exe
  256 SYSMAN                 OMS
  Clearly OMS and OEM are connected (Oracle Enterprise Manager Grid Control or DBConsole) via users SYSMAN and DBSNMP.
  These sessions should be de-activated (that is to log off any OEM, OMS, SYSMAN and DBSNMP) before the shutdown immediate is attempted.
  Oracle Enterprise Manager, Grid Control, Dbconsole and agents keep doing internal processing.
  This may include a few PLSQL notification procedures running on the database by database control like
  BEGIN EMD_NOTIFICATION.QUEUE_READY(:1, :2, :3); END;
  As per internal documentation of the shutdown immediate, if there are active calls then it would wait for all the active calls to finish.
SOLUTION
  To implement the solution:
  1. Given OEM connections are active (SYSMAN and DBSNMP), de-activate these sessions, i.e. by stopping the agent/DBConsole
  2. Then shutdown immediate as normal
  - OR -
  There may be processes still running and holding locks at the time a shutdown is issued.
  Sometimes these are failed jobs or transactions, which are effectively 'zombies', which are not able to receive a signal from Oracle.
  If this occurs, the only way to shutdown the database is by doing:
  sql>
  shutdown abort
  startup restrict
  shutdown normal
  The startup does any necessary recovery and cleanup, so that a valid cold backup can be taken afterward.
  If this issue occurs frequently, it would be a good practice to see if there are any active user processes running in v$session or v$process before shutting down the instance.
  If the problem persists, and no apparent user processes are active, you can set this event prior to issuing the shutdown command in order to see what is happening. This will dump a systemstate every 5 minutes while shutdown is hanging
  SQL>
  connect / as sysdba
  alter session set events '10400 trace name context forever, level 1';
  Then issue the shutdown command.

  3. You can kill the sessions preventing shutdown. Refer: Alert Log: Shutdown Waiting for Active Calls to Complete (Doc>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-564652-1-1.html 上篇帖子: Oracle操作用户和表空间的总结 下篇帖子: oracle 更新表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表