Oracle表被锁

前几天调试存储过程时,Oracle莫名报错,当存储过程执行到一段SQL时,怎么等也执行不过去,最后把这段sqlCOPY出来单独执行OK,当修改里面具体的一条记录时,提示表已被其他用户占用,原来如此,是Oracle的行锁啊!

下面是俩种方法查找锁:
1. 可以用Enterprise Manager Console控制台,用System或Sys用户登录,登录后点锁,正常的情况下是没有任务锁的,非正常情况下会有相应被锁的信息;

登录后:
点击 例程 — 锁,下面过滤器选择:用户类型锁,就可以看到当前数据库锁的信息;

2. 因为Oracle是装在Linux下,所有可以用sql/plus命令方式进去看锁信息,具体操作如下:

su - oracle;
sqlplus /nolog;
conn system/密码; 或者 connect/as sysdba;

使用下面的语法查出锁:
SELECT A.SID,A.SERIAL#,A.USERNAME,B.TYPE FROM V$SESSION A,V$LOCK B WHERE A.SID=B.SID;

解决办法:
1. 用Enterprise Manager Console控制台,选中后 右键 中断会话 — 立即 ,OK;

2. 用sql/plus命令杀掉进程,ALTER SYSTEM KILL SESSION 'SID,SERIAL#',OK。