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

[经验分享] Oracle锁表故障处理一例

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-11-25 09:53:08 | 显示全部楼层 |阅读模式
一次开发人员直接在数据库服务器上做delete table操作系统,由时在上班高峰运行,造成长时间执行无反应,进而把SQLPLUS客户端关闭掉,再次运行删除语句,造成数据库运行缓慢。   
询问操作过程知道了是由锁表造成,最终处理;本文只是模拟锁表处理过程,下次遇到相同问题可以快速处理。
1. 查看数据库的等待事件如果不清楚原因,可以通过先通过等待事件进行分析。
SQL> select sid,EVENT from v$session_wait where wait_class<>'Idle';
       SID EVENT   
---------- ----------------------------------------------------------------   
       158 SQL*Net message to client   
       159 enq: TX - row lock contention   
SQL>

2. 查看数据库是否有锁SQL> select * from v$lock where block=1;

3. 查询lock锁, 看谁锁谁说明:BLOCK为1的行,表示资源由它锁定。REQUEST表示需要这个锁。
SQL> SELECT sid, id1, id2, lmode, block,request, type   
FROM V$LOCK   
WHERE id1 IN (SELECT id1 FROM V$LOCK WHERE lmode = 0)   
ORDER BY id1, request;
       SID        ID1        ID2      LMODE      BLOCK    REQUEST TY   
---------- ---------- ---------- ---------- ---------- ---------- --   
       153     655397        308          6          1          0 TX   
       157     655397        308          0          0          6 TX

4. 查询锁表的SID,Serial#,用户、开始时间,然后就可以杀掉该进程了。SQL> select t1.sid,t1.serial#,t1.username,t1.logon_time from v$session t1,v$locked_object t2 where t1.sid = t2.session_id order by t1.logon_time ;
       SID    SERIAL# USERNAME                       LOGON_TIME   
---------- ---------- ------------------------------ -------------------   
       153         12 ABC                            2014-11-17 09:19:33   
       157        106 ABC                            2014-11-17 09:54:24

5. 可以进一步查询出SID,SPID等信息SQL> select s.username, s.osuser, s.sid, s.serial#, p.spid, s.program,s.STATUS  
from v$session s,v$process p  
where s.paddr = p.addr and s.username is not null;
USERNAME                       OSUSER                                SID    SERIAL# SPID         PROGRAM                                          STATUS   
------------------------------ ------------------------------ ---------- ---------- ------------ ------------------------------------------------ --------   
ABC                            oracle                                153         12 4290         sqlplus@oradb (TNS V1-V3)                        INACTIVE   
SYS                            oracle                                150         12 4417         sqlplus@oradb (TNS V1-V3)                        ACTIVE   
ABC                            oracle                                157        119 4830         sqlplus@oradb (TNS V1-V3)                        ACTIVE
要么在oracle进行杀掉,以及在操作系统下杀掉,对于status为killed的语句,应用通过操作系统kill命令才能最终最快杀掉。
alter system kill session  '153,12';   
alter system kill session  '157,119';
或操作系统中
kill -9 4290   
kill -9 4830

6.  查询被锁的表的SID及相关资源说明:出被锁的表及SQL,还是要结合上面的查询进行手工处理, 也可以通过SID找到SQL语句。
set pagesize 999;   
set linesize 200;   
col PROGRAM for a25;   
col TERMINAL for a10;
SQL> select s.status,s.sid,s.serial#,p.spid,  
       s.last_call_et as exec_seconds,t.sql_text as curr_sql  
from gv$session s,v$process p,v$instance i,v$lock k, v$sqltext t  
where s.paddr = p.addr  
and s.type != 'BACKGROUND'  
and s.lockwait = k.kaddr  
and s.sql_hash_value = t.hash_value  
and s.username is not null;  
STATUS          SID    SERIAL# SPID         EXEC_SECONDS CURR_SQL   
-------- ---------- ---------- ------------ ------------ ----------------------------------------------------------------   
ACTIVE          159         28 4072                 1285 update test_lock set name='aa4' where id = 1
SQL>


运维网声明 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.iyunv.com/thread-33706-1-1.html 上篇帖子: Oracle树结构 下篇帖子: Oracle编译用户无效对象 Oracle
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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