Oracle数据库表被锁问题处理

半仙 自动化运维

在操作Oracle数据库的时候,有时候会由于操作不当等引起数据库表被锁定,锁定后表不能修改,在前端直接反应就是业务无法正常操作,在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话,但是我们很难找到哪个会话被锁定了,想找到所以被锁的对象就更难了,此时我们经常不知所措,不知怎么给这些表解锁,由于手忙脚乱匆忙作出处理,小问题变成大问题。 其实出现此类问题此时不要慌,按照查找问题---解决问题的思路可以顺利解决,首先找出哪个会话被锁,然后将此会话Kill掉,不用担心数据损坏,未提交的业务将自动回退,具体方法如下:

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


[oracle@orcl]$ 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>