dml lock oracle_oracle dml lock - CSDN
精华内容
参与话题
  • Oracle锁1:DML

    千次阅读 2015-01-08 10:32:56
    DML锁,也叫做数据锁(data lock),用于保证在多用户操作数据时数据的完整。DML锁防止相互冲突的DML和DDL操作同时发生。 DML锁有行锁(Row Locks,TX)和表锁(Table Locks,TM),不同的DML操作会自动请求对应的...
    DML锁,也叫做数据锁(data lock),用于保证在多用户操作数据时数据的完整。DML锁防止相互冲突的DML和DDL操作同时发生。

    DML锁有行锁(Row Locks,TX)和表锁(Table Locks,TM),不同的DML操作会自动请求对应的锁。

    行锁(Row Locks,TX)

    行锁也叫TX锁,用于锁表的一行数据。当一个事务对一行数据做INSERT、UPDATE、DELETE、MERGE或SELECT ... FOR UPDATE操作时,数据将为行添加行锁,直到事务执行了commit或roll back操作后,行锁才释放。
    行锁防止两个事务修改同一行数据,当一个事务修改一行数据时,数据库总是为修改的行加一个排它锁以至于其它事务无法修改该行,只有当事务执行了commit或者roll back操作后,数据库才会释放对应的锁。行锁是小粒度的锁,为应用提供了最大限度的并行修改数据的能力。
    当一个事务获取了一个行锁,那么这个事务也需要获取这行数据所在表的表锁,表锁阻止有冲突的DDL操作,即数据库会自动的为更新的行添加一个排它锁,并为行所在的表添加一个子排它锁。

    行锁和并发

    下面通过一个例子来理解行锁和并发的关系。
    首先创建下面的表格,并初始化数据:
    create table employees(employee_id number(10),salary number(10));
    insert into employees(employee_id,salary) values(100,512);
    insert into employees(employee_id,salary) values(101,600);
    ......
    步骤一:三个Session同时查询ID为100和101的雇员,查询结果一致
    Session 1:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600
    
    Session 2:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600
    
    Session 3:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600
    步骤二:Session 1执行更新操作,更新id为100的雇员,在这个更新中,写者将请求一个行锁,阻止其它写者更新这行数据,如果其它写者更新该行数据将被阻塞,直到Session 1提交或者回滚数据
    Session 1:
    update employees set salary = 612 where employee_id = 100
    步骤三:再次执行步骤一的操作
    Session 1:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				612
    101				600
    
    Session 2:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600
    
    Session 3:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600
    Session 1的结果是它更新后的数据,而其他两个session任然是旧数据。
    步骤四:Session 2更新101雇员的薪水,并且不提交数据,这样Session 2获取了对雇员101的行锁
    UPDATE hr.employees SET salary = salary + 100 WHERE employee_id = 101;
    步骤五:再次执行步骤1的查询
    Session 1:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				612
    101				600
    
    Session 2:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				700
    
    Session 3:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600

    行锁的存储

    Oracle将锁信息存储在data block中。数据库用一个队列机制处理行锁请求,如果一个事务请求一个未锁定的行,那么事务将放一个锁到data block,被事务修改的每一行都指向存储在block header中的事务ID的一个拷贝。
    当一个事务结束时,事务ID保留在block header中,如果另一个事务想修改一行数据,那么它用这个事务ID判定这个锁是否是激活的。如果锁是激活的,那么当锁被释放时,该事务的session将被通知,否则,事务获取这个锁。

    表锁(Table Locks,TM)

    表锁,也叫TM锁,当对表执行以下操作时将被请求:INSERT、UPDATE、DELETE、MERGE、SELECT ... FOR UPDATE和LOCK TABLE。请求表锁的DML操作将阻止其它冲突的DDL操作。
    表锁有以下的模式:

    Row Share(RS)

    该锁也叫subshare table lock(SS),表示事务持有表上的锁已锁定表中的行,并打算对其进行更新。Row share锁是最小限制的表锁,为表的行数据的高并发修改提供了支持。

    Row Exclusive Table Lock(RX)

    该所也叫subexclusive table lock(SX),通常表示持有锁的事务更新了表的行或者执行了SELECT ... FOR UPDATE。SX锁允许其它事务查询、插入、更新、删除或者在同一个表上锁定多行数据,因此,SX锁允许多个事务在同一个表上同时获取SX和RS锁。

    Share Table Lock(S)

    一个事务持有了表的S锁,任然允许其他事务查询该表格(除了用SELECT ... FOR UPDATE),但只有持有了S锁的事务被允许更新表格。由于多个事务可以同时持有S锁,获取S锁并不能保证事务能够修改表格。

    Share Row Exclusive Table Lock(SRX)

    该锁也叫share-subexclusive table lock(SSX),比S锁限制更强。在一个表上一个时间点只能有一个事务能获取SSX锁。SSX锁允许其它事务查询表(除了用SELECT ... FOR UPDATE),但是不能更新表。

    Exclusive Table Lock(X)

    这个锁限制最强,禁止其它事务执行任何类型的DML操作或对表防止任何锁。
    展开全文
  • oracle table-lock的5种模式

    千次阅读 2014-09-10 17:48:40
    Oracle中的锁定可以分为几类: 1、DML lock(data lock), 2、DDL lock(dictionary lock) 3、internal lock/latch。 DML lock又可以分为row lock和table lock。row lock在select.. for update/insert/update...
    Oracle中的锁定可以分为几类:
    1、DML lock(data lock),
    2、DDL lock(dictionary lock)
    3、internal lock/latch。

    DML lock又可以分为row lock和table lock。row lock在select.. for update/insert/update/delete时隐式自动产生,而table lock除了隐式产生,也可以调用lock table <table_name> in </table_name> name来显示锁定。

    如果不希望别的session lock/insert/update/delete表中任意一行,只允许查询,可以用lock table table_name in exclusive mode。(X)这个锁定模式级别最高,并发度最小。

    如果允许别的session查询或用select for update锁定记录,不允许insert/update/delete,可以用
    lock table table_name in share row exclusive mode。(SRX)

    如果允许别的session查询或select for update以及lock table table_name in share mode,只是不允许insert/update/delete,可以用
    lock table table_name in share mode。(share mode和share row exclusive mode的区别在于一个是非抢占式的而另一个是抢占式的。进入share row exclusive mode后其他session不能阻止你insert/update/delete,而进入share mode后其他session也同样可以进入share mode,进而阻止你对表的修改。(S)

    还有两种锁定模式,row share(RS)和row exclusive(RX)。他们允许的并发操作更多,一般直接用DML语句自动获得,而不用lock语句。
    详细参考concepts文档中的"Type Of Locks":
    http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96524/c21cnsis.htm#2937


    -------------------------------------
    怎么unlock table 解锁

    方法一、kill session:

    SQL> select object_id,session_id from v$locked_object;  //注意session_id 就是上锁的 session标志
    SQL> select username,sid,SERIAL#  from v$session where sid=。。;      //这里的SID = session_id
    SQL> alter system kill session 'id,serial#';     //杀死该session

    方法二、rollback/commit 终止事务处理


    转载地址:http://www.blogjava.net/xzclog/archive/2010/04/02/317319.html

    展开全文
  • Oracle数据库中的锁

    千次阅读 2019-04-08 21:27:50
    数据库锁 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。...

    数据库锁

    数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

    在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可以被其他事务读取,但不能修改。

    6.1 锁分类

    根据保护对象的不同,Oracle数据库锁可分为:

    • DML lock(data locks,数据锁):用于保护数据的完整性。
    • DDL lock(dictionary locks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义)。
    • Internal locks 和latches(内部锁与闩):保护内部数据库结构。
    • Distributed locks(分布式锁):用于OPS(并行服务器)中。
    • PCM locks(并行高速缓存管理锁):用于OPS(并行服务器)中。

    在Oracle中最主要的锁是DML锁,DML锁的目的在于保证并发情况下的数据完整性。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。

    锁出现在数据共享的场合,用来保证数据的一致性。当多个会话同时修改一个表时,需要对数据进行相应的锁定。

    锁有“共享锁”、“排它锁”,“共享排它锁”等多种类型,而且每种类型又有“行级锁” (一次锁住一条记录),“页级锁” (一次锁住一页,即数据库中存储记录的最小可分配单元),“表级锁” (锁住整个表)

    6.2 共享锁(S锁)

    可通过lock table in share mode命令添加该S锁。在该锁定模式下,不允许任何用户更新表。但是允许其他用户发出select …from for update命令对表添加RS锁。

    6.3 排他锁(X锁)

    可通过lock table in exclusive mode命令添加X锁。在该锁定模式下,其他用户不能对表进行任何的DML和DDL操作,该表上只能进行查询。

    6.4 行级共享锁(RS锁)

    通常是通过select … from for update语句添加的,同时该方法也是我们用来手工锁定某些记录的主要方法。比如,当我们在查询某些记录的过程中,不希望其他用户对查询的记录进行更新操作,则可以发出这样的语句。当数据使用完毕以后,直接发出rollback命令将锁定解除。当表上添加了RS锁定以后,不允许其他事务对相同的表添加排他锁,但是允许其他的事务通过DML语句或lock命令锁定相同表里的其他数据行。

    6.5 行级排他锁(RX锁)

    当进行DML操作时会自动在被更新的表上添加RX锁,或者也可以通过执行lock命令显式的在表上添加RX锁。在该锁定模式下,允许其他的事务通过DML语句修改相同表里的其他数据行,或通过lock命令对相同表添加RX锁定,但是不允许其他事务对相同的表添加排他锁(X锁)。

    6.6 共享行级排他锁(SRX锁)

    通过lock table in share row exclusive mode命令添加SRX锁。该锁定模式比行级排他锁和共享锁的级别都要高,这时不能对相同的表进行DML操作,也不能添加共享锁。

    上述几种锁模式中,RS锁是限制最少的锁,X锁是限制最多的锁。它们的兼容关系如下:

    lock

    基本上所有的锁都可以由Oracle内部自动创建和释放,但是其中的DDL和DML锁是可以通过命令进行管理的,命令语法:

    LOCK table_name IN 
        [row share][row exclusive][share][share row exclusive][exclusive] MODE 
    [NOWAIT];

    下图列出产生锁定模式的SQL语句:

    lock

    当程序对所做的修改进行提交(Commit)或回滚(Rollback)后,锁住的资源便会得到释放,从而允许其他用户进行操作。如果两个事务,分别锁定一部分数据,而都在等待对方释放锁才能完成事务操作,这种情况下就会发生死锁

    展开全文
  • oracle的TM锁、TX锁知识完全普及

    万次阅读 2009-12-08 19:09:00
    锁概念基础 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。...


    锁概念基础

    数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

    加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

    在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两 种基本的锁类型来对数据库的事务进行并发控制。


    Oracle数据库的锁类型

    根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML锁(data locks,数据锁),用于保护数据的完整性;DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(internal locks and latches),保护数据库的内部结构。

    DML锁的目的在于保证并发情况下的数据完整性,。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。

    当Oracle 执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。 这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X 等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。

    在数据行上只有X锁(排他锁)。在 Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行 DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。

    当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失败等。

    悲观封锁和乐观封锁

    一、悲观封锁
    锁在用户修改之前就发挥作用:
    Select ..for update(nowait)
    Select * from tab1 for update
    用户发出这条命令之后,oracle将会对返回集中的数据建立行级封锁,以防止其他用户的修改。
    如果此时其他用户对上面返回结果集的数据进行dml或ddl操作都会返回一个错误信息或发生阻塞。
    1:对返回结果集进行update或delete操作会发生阻塞。
    2:对该表进行ddl操作将会报:Ora-00054:resource busy and acquire with nowait specified.

    原因分析
    此时Oracle已经对返回的结果集上加了排它的行级锁,所有其他对这些数据进行的修改或删除操作都必须等待这个锁的释放,产生的外在现象就是其他的操作将发生阻塞,这个这个操作commit或rollback.
    同样这个查询的事务将会对该表加表级锁,不允许对该表的任何ddl操作,否则将会报出ora-00054错误::resource busy and acquire with nowait specified.

    二、乐观封锁
    乐观的认为数据在select出来到update进取并提交的这段时间数据不会被更改。这里面有一种潜在的危险就是由于被选出的结果集并没有被锁定,是存在一种可能被其他用户更改的可能。因此Oracle仍然建议是用悲观封锁,因为这样会更安全。

    阻塞

    定义:
    当一个会话保持另一个会话正在请求的资源上的锁定时,就会发生阻塞。被阻塞的会话将一直挂起,直到持有锁的会话放弃锁定的资源为止。4个常见的dml语句会产生阻塞
    INSERT
    UPDATE
    DELETE
    SELECT…FOR UPDATE


    INSERT

    Insert发生阻塞的唯一情况就是用户拥有一个建有主键约束的表。当2个的会话同时试图向表中插入相同的数据时,其中的一个会话将被阻塞,直到另外一个会话提交或会滚。一个会话提交时,另一个会话将收到主键重复的错误。回滚时,被阻塞的会话将继续执行。

    UPDATE 和DELETE当执行Update和delete操作的数据行已经被另外的会话锁定时,将会发生阻塞,直到另一个会话提交或会滚。

    Select …for update

    当一个用户发出select..for update的错作准备对返回的结果集进行修改时,如果结果集已经被另一个会话锁定,就是发生阻塞。需要等另一个会话结束之后才可继续执行。可以通过发出 select… for update nowait的语句来避免发生阻塞,如果资源已经被另一个会话锁定,则会返回以下错误:Ora-00054:resource busy and acquire with nowait specified.


    死锁-deadlock

    定义:当两个用户希望持有对方的资源时就会发生死锁.
    即两个用户互相等待对方释放资源时,oracle认定为产生了死锁,在这种情况下,将以牺牲一个用户作为代价,另一个用户继续执行,牺牲的用户的事务将回滚.
    例子:
    1:用户1对A表进行Update,没有提交。
    2:用户2对B表进行Update,没有提交。
    此时双反不存在资源共享的问题。
    3:如果用户2此时对A表作update,则会发生阻塞,需要等到用户一的事物结束。
    4:如果此时用户1又对B表作update,则产生死锁。此时Oracle会选择其中一个用户进行会滚,使另一个用户继续执行操作。
    起因:
    Oracle的死锁问题实际上很少见,如果发生,基本上都是不正确的程序设计造成的,经过调整后,基本上都会避免死锁的发生。

    DML锁分类表


    表1 Oracle的TM锁类型
    锁模式 锁描述 解释 SQL操作
    0 none
    1 NULL Select
    2 SS(Row-S) 行级共享锁,其他对象只能查询这些数据行

    Select for update、Lock for update、Lock row share

    3 SX(Row-X) 行级排它锁,在提交前不允许做DML操作

    Insert、Update、Delete、Lock row share

    4 S(Share) 共享锁 Create index、Lock share
    5 SSX(S/Row-X) 共享行级排它锁 Lock share row exclusive
    6 X(Exclusive) 排它锁

    Alter table、Drop able、Drop index、Truncate table 、Lock exclusive

    1. 关于 V$lock 表和相关视图的说明

    Column

    Datatype

    Description

    ADDR

    RAW(4 | 8)

    Address of lock state object

    KADDR

    RAW(4 | 8)

    Address of lock

    SID

    NUMBER

    Identifier for session holding or acquiring the lock

    TYPE

    VARCHAR2(2)

    Type of user or system lock

    The locks on the user types are obtained by user applications. Any process that is blocking others is likely to be holding one of these locks. The user type locks are:

    TM - DML enqueue   

    TX - Transaction enqueue

    UL - User supplied

    -- 我们主要关注TXTM 两种类型的锁

    --UL 锁用户自己定义的,一般很少会定义,基本不用关注

    -- 其它均为系统锁,会很快自动释放,不用关注

    ID1

    NUMBER

    Lock identifier #1 (depends on type)

    ID2

    NUMBER

    Lock identifier #2 (depends on type)

    --- lock type TM 时,id1DML-locked objectobject_id

    --- lock type TX 时,id1usn+slot ,而id2seq

    -- lock type 为其它时,不用关注

    LMODE

    NUMBER

    Lock mode in which the session holds the lock:

    • 0 - none
    • 1 - null (NULL)
    • 2 - row-S (SS)
    • 3 - row-X (SX)
    • 4 - share (S)
    • 5 - S/Row-X (SSX)
    • 6 - exclusive (X)

    --大于0时表示 当前会话以某种模式 占有 该锁,等于0时表示当前会话正在等待该锁资源,即表示该会话被阻塞。

    -- 往往在发生TX 锁时,伴随着TM 锁,比如一个sid=9 会话拥有一个TM 锁,一般会拥有一个或几个TX 锁,但他们的id1id2 是不同的,请注意

    REQUEST

    NUMBER

    Lock mode in which the process requests the lock:

    • 0 - none
    • 1 - null (NULL)
    • 2 - row-S (SS)
    • 3 - row-X (SX)
    • 4 - share (S)
    • 5 - S/Row-X (SSX)
    • 6 - exclusive (X)

    -- 大于0时,表示当前会话被阻塞,其它会话占有改锁的模式

    CTIME

    NUMBER

    Time since current mode was granted

    BLOCK

    NUMBER

    The lock is blocking another lock

    0, 'Not Blocking', /* Not blocking any other processes */
    1, 'Blocking', /* This lock blocks other processes */
    2, 'Global', /* This lock is global, so we can't tell */

    - - 该锁是否阻塞了另外一个锁


    2.其它相关视图说明


    视图名 描述 主要字段说明
    v$session 查询会话的信息和锁的信息。

    sid,serial#:表示会话信息。

    program:表示会话的应用程序信息。

    row_wait_obj#:表示等待的对象,和dba_objects中的object_id相对应。

    lockwait :该会话等待的锁的地址,与v$lock的kaddr对应.
    v$session_wait 查询等待的会话信息。

    sid:表示持有锁的会话信息。

    Seconds_in_wait:表示等待持续的时间信息

    Event:表示会话等待的事件,锁等于enqueue

    dba_locks 对v$lock的格式化视图。

    Session_id:和v$lock中的Sid对应。

    Lock_type:和v$lock中的type对应。

    Lock_ID1: 和v$lock中的ID1对应。

    Mode_held,mode_requested:和v$lock中

    的lmode,request相对应。

    v$locked_object 只包含DML的锁信息,包括回滚段和会话信息。

    Xidusn,xidslot,xidsqn:表示回滚段信息。和

    v$transaction相关联。

    Object_id:表示被锁对象标识。

    Session_id:表示持有锁的会话信息。

    Locked_mode:表示会话等待的锁模式的信

    息,和v$lock中的lmode一致。

    1.查询数据库中的锁

    select * from v$lock;
    select * from v$lock where block=1;

    2.查询被锁的对象

    select * from v$locked_object;

    3.查询阻塞

    查被阻塞的会话
    select * from v$lock where lmode=0 and type in ('TM','TX');

    查阻塞别的会话锁
    select * from v$lock where lmode>0 and type in ('TM','TX');

    4.查询数据库正在等待锁的进程

    select * from v$session where lockwait is not null;

    5.查询会话之间锁等待的关系

    select a.sid holdsid,b.sid waitsid,a.type ,a.id1,a.id2,a.ctime from v$lock a,v$lock b
    where a.id1=b.id1 and a.id2=b.id2 and a.block =
    1 and b.block = 0 ;

    6.查询锁等待事件
    select * from v$session_wait where event='enqueue';
    展开全文
  • oracle的TM锁、TX锁

    万次阅读 2011-12-21 23:09:55
    Oracle数据库的锁类型  oracle官方文档里面关于锁的定义:Locks are mechanisms that prevent destructive interaction between transactions accessing the same resource—either user objects such as tables...
  • Oracle DML和DDL锁的解决方法

    千次阅读 2016-02-25 16:12:51
    一、DML锁解决办法 假设锁在会话1上 session1: drop table test; create table test as select * from dba_objects; select * from test for update; 系统现在无法完成DML操作,这个时候要人工造成一个锁等待冲突...
  • Oracle Locks之DML

    千次阅读 2013-08-03 20:48:25
    Oracle通过锁来实现数据库的并发控制 Oracle Database automatically locks a resource on behalf of a transaction to prevent other transactions from doing something that requires exclusive access to the ...
  • Oracle锁表查询和解锁方法

    万次阅读 多人点赞 2016-12-09 15:12:40
    数据库操作语句的分类 DDL:数据库模式定义语言,关键字:...oracle表在什么情况下会被锁住DML锁又可以分为,行锁、表锁、死锁 行锁:当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中操作行的排它
  • Oracle数据操作和控制语言详解 (一)

    千次阅读 2004-07-31 16:37:00
    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL。其中用于定义数据的结构,比如 创建、修改或者删除数据库;DCL用于定义数据库用户的权限;在这篇文章中我将详细讲述这...
  • Oracle数据库中的锁机制

    万次阅读 2014-05-04 22:09:12
    数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。...
  • Oracle diary May5 2011

    千次阅读 2011-05-05 18:36:00
    Oracle will never escalate a lock. Never. But it does practice lock conversion, or lock promotion, Note The terms ʹlock conversionʹ and ʹlock promotionʹ are synonymous.   ...
  • ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share  3:Row-X 行独占(RX):用于行的修改,sub exclusive  4:Share 共享锁(S):阻止其他DML操作,share 5:S/Row-X ...
  • oracle什么时候需要commit

    万次阅读 多人点赞 2012-06-05 10:37:17
    今天在oracle的SQL plus 中执行了删除和查询操作,然后在PL/SQL中也执行查询操作,语句一样,结果却不一样,让我大感郁闷,后来才突然想到可能是两边数据不一致造成的,但是为什么不一致呢,就是没用commit, ...
  • 介绍了Oracle数据库锁的种类及研究

    千次阅读 2007-05-20 22:27:00
    本文通过对Oracle数据库锁机制的研究,首先介绍了Oracle数据库锁的种类,并描述了实际应用中遇到的与锁相关的异常情况,特别对经常遇到的由于等待锁而使事务被挂起的问题进行了定位及解决,并对死锁这一比较严重的...
  • ORA-00054 的解决方法 (2010-09-21 15:31:29) 转载▼   分类:OracleTroubleShooting 系统有一个不用的索引,想删除这个索引, SQL> drop index GPSTIME_GLOBAL_INDEX ... 
  • Oracle锁的学习

    千次阅读 2010-06-30 22:42:00
    Oracle数据库中的锁机制 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,...
  • oracle--v$lock type字段详解

    千次阅读 2009-09-02 09:49:00
    NameDescriptionADASM Disk AU LockAFAdvisor FrameworkAGAnalytic Workspace GenerationAKGES Deadlock TestAOMultiWriter Object AccessASService Opera
  • Oracle数据库锁的种类及研究

    千次阅读 2012-03-20 10:03:56
    数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。...
  • oracle查询锁表情况

    千次阅读 2018-08-09 13:38:16
    SELECT * FROM v$lock; SELECT * FROM v$sqlarea; SELECT * FROM v$session; SELECT * FROM v$process ; SELECT * FROM v$locked_object; SELECT * FROM all_objects; SELECT * FROM v$session_wait; --...
  • Oracle 行级排他锁(RX锁)

    千次阅读 2019-03-21 08:07:08
    当进行DML操作时会自动在被更新的表上添加RX锁,或者也可以通过执行lock命令显式的在表上添加RX锁。在该锁定模式下,允许其他的事务通过DML语句修改相同表里的其他数据行,或通过lock命令对相同表添加RX锁定,但是不...
1 2 3 4 5 ... 20
收藏数 14,276
精华内容 5,710
热门标签
关键字:

dml lock oracle