[20190211]rac下解锁应用出现的阻塞.txt --//别人问的问题,rac环境下应用程序出现阻塞,一般的脚本已经不适用.因为可能实例1上的连接阻塞实例2的连接. --//google找到如下链接:http://www.pythian.com/blog/oracle-rac-and-gv-views-a-second-look/ --//我自己修改如下,原链接写的还是有一些问题: $ cat viewlockrac1.sql /* Formatted on 2019/2/11 11:50:46 (QP5 v5.269.14213.34769) */ column WAITER_LOCK_TYPE format a20 column WAITER_MODE_REQ format a20 column kill_command format a60 column EQ_NAME format a30 column REQ_REASON format a50 /* Formatted on 2019/2/11 15:41:07 (QP5 v5.269.14213.34769) */ SELECT gvh.inst_id Locking_Inst ,gvh.sid Locking_Sid ,gvs.serial# Locking_Serial ,gvs.status Status ,gvs.module Module ,gvw.inst_id Waiting_Inst ,gvw.sid Waiter_Sid ,CURSOR ( SELECT a.eq_name, a.req_reason FROM V$ENQUEUE_STATISTICS a WHERE gvh.TYPE = a.eq_type ) Waiter_Lock_Type ,DECODE ( gvh.TYPE ,'MR', 'Media_recovery' ,'RT', 'Redo_thread' ,'UN', 'User_name' ,'TX', 'Transaction' ,'TM', 'Dml' ,'UL', 'PLSQL User_lock' ,'DX', 'Distrted_Transaxion' ,'CF', 'Control_file' ,'IS', 'Instance_state' ,'FS', 'File_set' ,'IR', 'Instance_recovery' ,'ST', 'Diskspace Transaction' ,'IV', 'Libcache_invalidation' ,'LS', 'LogStaartORswitch' ,'RW', 'Row_wait' ,'SQ', 'Sequence_no' ,'TE', 'Extend_table' ,'TT', 'Temp_table' ,'Nothing-' ) Waiter_Lock_Type ,DECODE ( gvw.request ,0, 'None' ,1, 'NoLock' ,2, 'Row-Share' ,3, 'Row-Exclusive' ,4, 'Share-Table' ,5, 'Share-Row-Exclusive' ,6, 'Exclusive' ,'Nothing-' ) Waiter_Mode_Req , 'alter system kill session ' || '''' || gvs.sid || ',' || gvs.serial# || ',@' || gvs.inst_id || ''' immediate ;' "Kill_Command" FROM gv$lock gvh, gv$lock gvw, gv$session gvs WHERE (gvh.id1, gvh.id2) IN (SELECT id1, id2 FROM gv$lock WHERE request = 0 INTERSECT SELECT id1, id2 FROM gv$lock WHERE lmode = 0) AND gvh.id1 = gvw.id1 AND gvh.id2 = gvw.id2 AND gvh.request = 0 AND gvw.lmode = 0 AND gvh.sid = gvs.sid AND gvh.inst_id = gvs.inst_id; --//测试看看: xxxx> @ viewlockrac1 LOCKING_INST LOCKING_SID LOCKING_SERIAL STATUS MODULE WAITING_INST WAITER_SID WAITER_LOCK_TYPE WAITER_LOCK_TYPE WAITER_MODE_REQ Kill_Command ------------ ----------- -------------- -------- ------------ ------------ ---------- -------------------- -------------------- -------------------- ------------------------------------------------------------ 1 1695 41793 INACTIVE SQL*Plus 2 1657 CURSOR STATEMENT : 8 Transaction Exclusive alter system kill session '1695,41793,@1' immediate ; CURSOR STATEMENT : 8 EQ_NAME REQ_REASON ----------- ------------------- Transaction contention Transaction row lock contention Transaction allocate ITL entry Transaction index contention xxxxx> alter system kill session '1695,41793,@1' immediate ; System altered. --//实际上一般出现这样的情况主要都是应用程序设计不合理的问题,我们生产系统也是一样.我自己生产系统实际应用的脚本如下: --//有1次半夜上班起来解锁,纯粹垃圾软件.没有办法写了自动解锁的代码: --//实际上执行这样的代码还是要小心再小心(纯粹没有办法),很无奈... --//1.假设你要做一个应用程序升级,dml也许要执行很长时间,如果这个时候出现阻塞,把这个dml kill是不对的. --//2.还有1种情况就是连续阻塞,就是用户发现应用挂起,他会直接kill,然后在打开新的应用程序,这样会出现连续阻塞的情况.这样要kill许多会话才行. --//以下脚本就不合适.必须手工介入解决问题. $ cat find_lock.sql SET PAGESIZE 0 SET ECHO OFF HEADING OFF FEED OFF PAGESIZE 0 VERIFY OFF WHENEVER SQLERROR EXIT FAILURE; SET SERVEROUTPUT ON; BEGIN FOR cursor_x IN (SELECT DISTINCT BLOCKER_INSTANCE_ID ,BLOCKER_SID ,BLOCKER_SESS_SERIAL# , 'alter system kill session ''' || BLOCKER_SID || ',' || BLOCKER_SESS_SERIAL# || ',@' || BLOCKER_INSTANCE_ID || ''' immediate' c80 FROM GV$SESSION_BLOCKERS) LOOP EXECUTE IMMEDIATE cursor_x.c80; DBMS_OUTPUT.put_line ( SYSDATE || ' BLOCKER_INSTANCE_ID BLOCKER_SID BLOCKER_SESS_SERIAL# = ' || cursor_x.BLOCKER_INSTANCE_ID || ' ' || cursor_x.BLOCKER_SID || ' ' || cursor_x.BLOCKER_SESS_SERIAL# ); END LOOP; END; / SET SERVEROUTPUT OFF; QUIT $ cat unlock.sh #! /bin/bash # PATH=$PATH:$HOME/bin export PATH unset USERNAME # add by install oracle # umask 022 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1 export ORACLE_SID=xxxx1 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' export NLS_TIMESTAMP_TZ_FORMAT="YYYY-MM-DD HH24:MI:SS.FF" export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORA_CRS_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORA_CRS_HOME/lib export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib export TEMP=/tmp export TMPDIR=/tmp sqlplus -S sys/XXXX as sysdba @/home/oracle/bin/find_lock.sql >> /home/oracle/bin/killsession.txt echo "OK!" --//建立crontab如下: # cat /etc/cron.d/ntp */5 * * * * oracle /home/oracle/bin/unlock.sh > /dev/null 2>&1 --//每5分钟调用1次.顺便看看放假执行几次: # grep "2019-02-0[456789]" killsession.txt |wc 33 297 2924 # grep "2019-02-10" killsession.txt |wc 10 90 890 # grep "2019-01-" killsession.txt |wc 220 1980 19502
[20190211]rac下解锁应用出现的阻塞.txt
来源:这里教程网
时间:2026-03-03 12:56:46
作者:
编辑推荐:
- 单独调整Word文档中表格列宽的方法03-03
- [20190211]rac下解锁应用出现的阻塞.txt03-03
- 在word文档中表格一次插入多行或多列的方法03-03
- 使页码从Word文档第二页开始的方法03-03
- 将Word文档中换行符替换成回车符的简单方法03-03
- DBA 的 7 点建议03-03
- 将Word文档中文本转换为表格的方法03-03
- Oracle中查看执行计划03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- oracle 正则表达式4个主要函数
oracle 正则表达式4个主要函数
26-03-03 - 数据泵:expdp/impdp
数据泵:expdp/impdp
26-03-03 - 用listagg函数分组实现列转行
用listagg函数分组实现列转行
26-03-03 - Debian网络身份认证详解(手把手教你配置Debian系统下的企业级WiFi与有线网络身份验证)
- Oracle Exadata 存储服务器原理探究
Oracle Exadata 存储服务器原理探究
26-03-03 - 我们都被骗了,所有的跨平台迁移都可以通过XTTS实现
我们都被骗了,所有的跨平台迁移都可以通过XTTS实现
26-03-03 - Oracle 客户端安装
Oracle 客户端安装
26-03-03 - MathType中如何更改公式颜色操作详解
MathType中如何更改公式颜色操作详解
26-03-03 - 谷歌:Oracle Java 胜诉将杀死软件开发,要求美最高法院必须作出裁决!
- 探寻大表删除字段慢的原因
探寻大表删除字段慢的原因
26-03-03
