zoukankan      html  css  js  c++  java
  • 【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。针对表的查询尽量用视图屏蔽其锁机制。

  • 相关阅读:
    Python中max()内置函数使用(list)
    linux命令总结mpstat命令
    linux命令总结vmstat命令
    linux命令总结free命令
    linux命令总结top命令
    linux命令总结之echo命令
    Nagios服务器端配置文件详解
    python之OS模块详解
    真正的inotify+rsync实时同步 彻底告别同步慢
    linux BASH shell下设置字体及背景颜色
  • 原文地址:https://www.cnblogs.com/badboy200800/p/12860322.html
Copyright © 2011-2022 走看看