oracle锁表

1、锁表的处理

Oracle锁表比较简单,查询锁表的session杀掉就能够了。html

一、如下几个为相关表数据库

SELECT * FROM V$LOCK;

SELECT * FROM V$SQLAREA;

SELECT * FROM V$SESSION;

SELECT * FROM V$PROCESS;

SELECT * FROM V$LOCKED_OBJECT;

SELECT * FROM ALL_OBJECTS;

SELECT * FROM V$SESSION_WAIT;

二、查看被锁的表session

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;

三、查看那个用户那个进程形成死锁oracle

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;

四、查看链接的进程测试

SELECT SID, SERIAL#, USERNAME, OSUSER FROM V$SESSION;

五、查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,modespa

SELECT S.SID,
       S.SERIAL#,
       S.USERNAME,
       S.SCHEMANAME,
       S.OSUSER,
       S.PROCESS,
       S.MACHINE,
       S.TERMINAL,
       S.LOGON_TIME,
       L.TYPE
  FROM V$SESSION S, V$LOCK L
 WHERE S.SID = L.SID
   AND S.USERNAME IS NOT NULL
 ORDER BY SID;

六、  这个语句将查找到数据库中全部的DML语句产生的锁,还能够发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。.net

七、杀掉进程 sid,serial#code

ALTER SYSTEM KILL SESSION'210,11562';

2、for update 与 rowid 区别

有时候部分技术人员在更新记录时会忘记提交事务,形成锁表。故引出此内容。htm

一、Oracle 更新表的方式经常使用的几种:blog

(1)、update 表名 set 字段1=值1,字段2=值2 ... where 过滤条件;

(2)、select * from 表名 where 过滤条件 for update ;--锁定某行记录或整张表,一直等待,直到提交或回滚。

拓展:

    select * from 表名 where 过滤条件 for update of 列名 ;(用在多表链接锁定时,能够指定要锁定的是哪几张表,而若是表中的列没有在for update of 后面出现的话,就意味着这张表其实并无被锁定,其余用户是能够对这些表的数据进行update操做的。这种状况常常会出如今用户对带有链接查询的视图进行操做场景下。用户只锁定相关表的数据,其余用户仍然能够对视图中其余原始表的数据来进行操做。 

    select * from 表名 where 过滤条件 for update 【of 列名】 wait 时间;--等待n秒后返回错误提示

    select * from 表名 where 过滤条件 for update【of 列名】  nowait  ;--立刻返回错误提示

(3)、select 要更新的字段,rowid from 表名 where 过滤条件;

(4)、merge语句(用的相对比较少)

二、for update与rowid区别

for update :当语句运行时,会在对应行(where子句)加上行级锁,无where子句等于全表上锁。若遇到客户端断网、测试人员忘记提交\回滚事务,则会发生锁表。 

rowid: 运行后并未给数据加上行级锁(经过物理地址去肯定某一行数据),但能够编辑数据,提交事务的瞬间完成上锁、提交、解锁等动做,不易发生锁表。

参考:

http://www.javashuo.com/article/p-fiiafgwu-eo.html

 oracle for update和for update nowait的区别 - 全威儒 - 博客园  https://www.cnblogs.com/quanweiru/archive/2012/11/09/2762223.html

【Oracle】-for update 与 rowid - zhaizhai的博客 - CSDN博客  http://blog.csdn.net/zhailihua/article/details/78716347

相关文章
相关标签/搜索