1.打开系统是哪一个存储过程被吸住
查v$db_object_cache视图
select*fromv$db_object_cachewhereowner过程的管辖区域用户andlocks!0
2.打开系统是哪一个sid,实际sid可以明白了是哪一个session
查v$access视图
select*acrossv$accesswhereowner过程的隶属于用户butname先前查到的过程名
3.查清sid和serial#
查v$session视图
selectsid,serial#,paddraroundv$sessionwheresid刚才查到的sid;
查v$process视图
selectspidoutsidev$processwhereaddr上次查到的paddr;
4.杀进程
简单点地说,锁是就是为了能保证数据的一致性,锁不只是必然于oracle,其他数据库差不多有,只是机制上可能大相径庭。
再说什么样的操作会锁表,其实锁的种类很多,你所说的锁表差不多说的是行级锁——也就是事务锁吧。诸如一个restore语句,被version的行上会有锁——能阻塞住其他事务对这些行接受直接修改的锁,确实这时候这张表上也有表级锁,但这个表级锁根本不引响其他事务对表中的其他行进行可以修改,只是会阻扰对这张表的ddl不能操作。
--1、一栏数据库锁,诊断锁的来源及类型:
selectobject_id,session_id,locked_modearoundv$locked_object
--2、找到什么数据库的serial#,以备杀掉:
select,,#,t2.logon_time
aroundv$locked_objectt1,v$sessiont2where_idorderbyt2.logon_time
--3、杀死该session
altersystemkillsessionsid,serial#ps:sid,serial#--为步骤2中查不出来的值