【Teradata數據保護機制】鎖


鎖(Lock):當系統中有用戶並發操作時,用於保護數據一致性的機制。可以保證不同用戶訪問到的是正確的信息。

1.TD四種類型的鎖

(1)EXCLUSIVE
排它鎖,級別最高。持有此鎖時,其它任何新申請鎖均需等待。一般是DDL操作,如create、drop、alter數據庫/表/視圖等。
(2)WRITE
寫鎖,級別第二。持有此鎖時,新申請的READ、WRITE、EXCLUSIVE鎖需等待,僅ACCESS鎖無需等待。一般是DML操作中的insert、update和delete。
(3)READ
讀鎖,級別第三。持有此鎖時,新申請的WRITE、EXCLUSIVE鎖需等待,ACCESS、READ鎖無需等待。一般是DML操作中的select。
(4)ACCESS
訪問鎖,級別最低。持有此鎖時,僅新申請的EXCLUSIVE鎖需等待。

 2.TD鎖的作用域

Teradata鎖作用域的基本原則是,在保證數據完整性的前提下,盡可能小范圍地上鎖。此外,Teradata在處理SQL語句時,會自動指定鎖的類型以及鎖的作用域。下表中N/A表示Not Available,即不存在這種情況;FTS表示FULL TABLE SCAN,即全表掃描。

(1)Row Hash

記錄級,只鎖定具備相同Row Hash值的記錄。在SQL語句中提供了主索引或者唯一次索引時使用,因為可以根據索引值可計算出 ROW HASH 值。

(2)Table/View

表級,鎖定全表或全視圖所有數據。

(3)Partition

分區級,鎖定指定分區所有數據。數據庫版本15.10引入。

(4)Database

數據庫級,鎖定數據庫所有表和視圖。

 3.改變鎖的類型

可以通過下面命令降低或者提高鎖等級,所有等級的鎖均可以提高,但降低鎖等級只可以把Read降為Access,其它等級不能降低。

LOCKING ROW FOR ACCESS SELECT * FROM Table_A;      //由Read鎖降為Access鎖
LOCKING TABLE Table_B FOR EXCLUSIVE UPDATE Table_B SET A = 2007;      //由Write鎖升為Exclusive鎖
LOCKING TABLE Table_C FOR WRITE NOWAIT UPDATE Table_C SET A = 2008;   //NOWAIT選項表示如果無法獲取鎖,則語句將被中止,並報7423錯誤。

總之:針對 update ,insert ,delete等SQL語句一定要及進commit。針對表的查詢盡量用視圖屏蔽其鎖機制。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM