oracle-手動鎖表

 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  

相關文章
相關標籤/搜索