Oracle数据库表被锁问题处理

半仙 自动化运维

87270821887f020043a89a6c01d94bad.png

在操作Oracle数据库的时候,有时候会由于操作不当等引起数据库表被锁定,锁定后表不能修改,在前端直接反应就是业务无法正常操作,在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话,但是我们很难找到哪个会话被锁定了,想找到所以被锁的对象就更难了,此时我们经常不知所措,不知怎么给这些表解锁,由于手忙脚乱匆忙作出处理,小问题变成大问题。

其实出现此类问题此时不要慌,按照查找问题---解决问题的思路可以顺利解决,首先找出哪个会话被锁,然后将此会话Kill掉,不用担心数据损坏,未提交的业务将自动回退,具体方法如下:

--------------------------------查看被锁的表--------------------------

[[email protected]]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.4.0 Production on Tue Nov 6 10:26:09 2018

Copyright (c) 1982, 2013, Oracle. All rights reserved.

SQL> conn /as sysdba

Connected.

---------------查看那个用户那个进程照成死锁---------------

SQL> select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

SQL> select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

USERNAME SID SERIAL# LOGON_TIM

------------------------------ ---------- ---------- ---------

************ 59 4587 06-NOV-18

--------------------------------杀掉锁表的进程----------------------

SQL> alter system kill session '59,4587';

System altered.

----------------------------确认被锁定的表被释放---------------------------

SQL> select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

no rows selected

SQL>

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐