oracle19C之lock table

  官网地址:LOCK TABLE

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

LOCK TABLE

目的

使用LOCK TABLE 用指定的方式锁定一个或多个表、表分区或表子分区的语句。此锁手动覆盖自动锁定,允许或拒绝其他用户在操作期间访问表或视图。

一些形式的锁可以同时放在同一个表上。其他锁只允许一张桌子上的锁。

锁定的表一直被锁定,直到您提交事务或回滚它,或者是完全的,或者是在锁定表之前被保存在一个保存点上。

锁不会阻止其他用户查询表。查询从不把锁放在桌上.读者从不阻挡作家,作家从不阻挡读者。

另见:

  • 甲骨文数据库概念 关于锁模相互作用的完整描述

  • 承诺

  • 回滚

  • 保存点

先决条件

表或视图必须在您自己的架构中,或者您必须拥有LOCK ANY TABLE 系统特权,或您必须拥有任何对象特权(除了READ 表上或视图上的对象特权。

语法的

锁表 ::=

图片来自官网原文

oracle19C之lock table_第1张图片


插图的说明。

partition_extension_clause ::=

图片来自官网原文

oracle19C之lock table_第2张图片


插图部分的说明_延伸_条款。

语义学

图解

指定包含表或视图的架构.如果你忽略了schema ,然后甲骨文数据库假设表或视图在您自己的架构中。

TABLE | VIEW

指定要锁定的表或视图的名称。

如果你指定view 然后甲骨文数据库锁定视图的基表。

如果你指定partition_extension_clause ,然后甲骨文数据库首先获得了表上的隐式锁。表锁与您为分区或子分区指定的锁相同,有两个例外:

  • 如果你指定SHARE 锁定子分区,然后数据库获得一个隐式的ROW SHARE 把它锁在桌上。

  • 如果你指定EXCLUSIVE 锁定子分区,然后数据库获得一个隐式的ROW EXCLUSIVE 把它锁在桌上。

如果你指定PARTITION 和table 经过组合分区,然后数据库获得对分区的所有子分区的锁。

锁定表的限制

以下限制适用于锁定表:

  • 如果view 是层次结构的一部分,那么它必须是层次结构的根。

  • 您只能获取自动列表分区表中现有分区的锁。也就是说,当您指定下列语句时,分区键值必须对应于表中已经存在的分区;它不能对应于稍后可能根据需求创建的分区:

    LOCK TABLE ... PARTITION FOR (partition_key_value) ...

dblink

指定一个数据库链接到远程甲骨文数据库的表或视图的位置.只有使用甲骨文分布式功能,才能锁定远程数据库上的表和视图。所有的桌子都被LOCK TABLE 声明必须在同一数据库中。

如果你忽略了dblink ,然后甲骨文数据库假设表或视图在本地数据库上。

另见:

" 远程数据库中对象的引用 " 有关指定数据库连结的资料

锁模 条款

指明下列模式之一:

ROW SHARE

ROW SHARE 允许对上锁表的并发访问,但禁止用户为独家访问锁定整个表。ROW SHARE 代表着SHARE UPDATE ,这是为了与之前版本的甲骨文数据库兼容。

ROW EXCLUSIVE

ROW EXCLUSIVE 就像ROW SHARE ,但也禁止锁定SHARE 模式。ROW EXCLUSIVE 当更新、插入或删除时,会自动获得锁。

SHARE UPDATE

ROW SHARE. .

SHARE

SHARE允许并发查询,但禁止对锁定的表进行更新。

SHARE ROW EXCLUSIVE

SHARE ROW EXCLUSIVE 用于查看整个表,允许其他人查看表中的行,但禁止其他人将表锁在表中。SHARE 模式或更新行。

EXCLUSIVE

EXCLUSIVE允许在上锁的桌子上查询,但禁止在它上进行任何其他活动。

NOWAIT

指定NOWAIT 如果您希望数据库立即返回控件,如果指定的表、分区或表子分区已经被另一个用户锁定。在本例中,数据库返回一个消息,表明另一个用户已经锁定了表、分区或子分区。

WAIT

使用WAIT 以表明LOCK TABLE 语句应该等待指定的秒数来获得DML锁。对价值没有限制的integer .

如果你不指明NOWAIT 也不WAIT 然后,数据库无限期地等待,直到表可用,并锁定它,然后将控件返回给您。当数据库与DML语句同时执行DDL语句时,有时会导致超时或死锁。数据库检测这种超时和死锁,并返回错误。

另见:

甲骨文数据库管理员指南 有关锁定表的更多信息

例子

锁定表格:示例

以下声明锁定了employees 使用独家模式的表,但如果另一个用户已经锁定了表,则不必等待:

LOCK TABLE employees
   IN EXCLUSIVE MODE 
   NOWAIT; 

以下语句锁定远程employees 可通过数据库链接访问的表格remote :

LOCK TABLE employees@remote 
   IN SHARE MODE;

你可能感兴趣的:(oracle,数据库)