【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。针对表的查询尽量用视图屏蔽其锁机制。

 

posted @ 2020-05-09 21:52  李子恒  阅读(1179)  评论(0编辑  收藏  举报