【Teradata数据保护机制】锁
机制 数据保护 Teradata
2023-09-14 09:00:03 时间
锁(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。针对表的查询尽量用视图屏蔽其锁机制。
相关文章
- 关于 Flink 状态与容错机制
- React源码学习入门(五)详解React中的Transaction事务机制
- 实现完美的Redis数据同步机制(redis数据同步机制)
- MySQL事物下的锁定机制(mysql事物锁)
- MySQL数据库实现加锁机制(mysql数据加锁)
- 清除机制Java Redis过期清除机制研究(redisjava过期)
- 处理Java实现Redis中键值对自动过期机制(redisjava过期)
- Oracle数据库日志回滚机制简介(oracle日志回滚)
- Linux下线程机制优化系统性能(linux线程机制)
- 利用Redis实现订阅发布机制(redis订阅发布)
- Linux中断处理的魅力之旅(linux 中断机制)
- Redis集群高效存储的机制实现(redis集群存储原理)
- 优雅地使用Redis过期机制(redis过期方法)
- 研究Redis缓存的双级机制(redis缓存的两种机制)