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

相關文章
相關標籤/搜索