ORACLE鎖的類型
在正常狀況下,ORACLE會自動鎖住須要加鎖的資源以保護數據, 這種鎖是隱含的,叫隱含鎖。然而,在一些條件下,這些自動的鎖在 實際應用時並不能知足須要,必須人工加一些鎖。這些人工加的鎖叫顯示鎖。
下面指明瞭會產生隱含鎖的SQL語句:
INSERT;
UPDATE;
DELETE;
DDL/DCL語句。
下面指明瞭會產生顯示鎖的SQL語句: sql
SELECT FOR UPDATE; LOCK TABLE IN XXX MODE。
在同時對錶進行以上操做的時候,就有可能會產生鎖 減小併發事務處理吧,處理完成以後儘快commit吧服務器
LOCK TABLE 使用:
說明 併發
此語句用於防止其它併發事務訪問或修改表。code
語法 事務
LOCK TABLE table-name
[ WITH HOLD ]
IN { SHARE | EXCLUSIVE } MODE資源
參數 it
table-name 表必須是基表,而不是視圖。由於臨時表數據是當前鏈接的本地數據,因此鎖定全局臨時表或局部臨時表都無效。table
WITH HOLD 子句 若是指定該子句,鎖一直保持到鏈接結束時。若是沒有指定該子句,則提交或回退當前事務時將釋放鎖。class
SHARE 模式 禁止其它事務修改表,但容許它們讀取表。在該模式下,只要沒有其它的事務鎖定所修改的行,就能夠間接地或顯式地使用 LOCK TABLE 更改表中的數據。權限
EXCLUSIVE 模式 禁止其它事務訪問表。任何其它事務都不能對錶執行查詢、任何更新或任何其它操做。若是用 LOCK TABLE t IN EXCLUSIVE MODE 排它性地鎖定表 t,則服務器的缺省行爲是不獲取 t 的行鎖定。將 SUBSUME_ROW_LOCKS 選項設置爲 OFF 能夠禁用此行爲。
用法
LOCK TABLE 語句容許直接控制表級併發,與當前的隔離級別無關。雖然事務的隔離級別一般控制當前事務執行請求時設置的鎖的種類,但 LOCK TABLE 語句容許更顯式地控制錶行的鎖定。
LOCK TABLE 以 SHARE 模式放置的鎖爲幻像和防幻像鎖,sa_locks 過程將它們顯示爲 PT 和 AT。
權限
若要以 SHARE 模式鎖定表,須要 SELECT 權限。
若要以 EXCLUSIVE 模式鎖定表,必須是表全部者或者有 DBA 權限。
反作用
須要訪問鎖定表的其它事務可能被延遲或阻塞。
示例
下面的語句禁止其它事務在當前事務期間修改 customer 表:
LOCK TABLE customer IN SHARE MODE