`

ORACLE里几种锁模式

阅读更多
相关文章:  
sqlserver锁机制研究
oracle-学习笔记-5
遇到一个多事务并发的问题

推荐圈子: JAVA 3T
更多相关推荐 ORACLE里锁有以下几种模式:
  
  0:none
  1:null 空
  2:Row-S 行共享(RS):共享表锁
  3:Row-X 行专用(RX):用于行的修改
  4:Share 共享锁(S):阻止其他DML操作
  5:S/Row-X 共享行专用(SRX):阻止其他事务操作
  6:exclusive 专用(X):独立访问使用
  
  数字越大锁级别越高, 影响的操作越多。
  一般的查询语句如select ... from ... ;是小于2的锁, 有时会在v$locked_object出现。
  
  select ... from ... for update; 是2的锁。
  
  当对话使用for update子串打开一个游标时,
  所有返回集中的数据行都将处于行级(Row-X)独占式锁定,
  其他对象只能查询这些数据行,不能进行update、delete或select...for update操作。
  
  insert / update / delete ... ; 是3的锁。
  
  没有commit之前插入同样的一条记录会没有反应,
  因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。
  
  创建索引的时候也会产生3,4级别的锁。
  
  locked_mode为2,3,4不影响DML(insert,delete,update,select)操作,
  但DDL(alter,drop等)操作会提示ora-00054错误。
  
  有主外键约束时 update / delete ... ; 可能会产生4,5的锁。
  
  DDL语句时是6的锁。
  
  以DBA角色, 查看当前数据库里锁的情况可以用如下SQL语句:

  select object_id,session_id,locked_mode from v$locked_object;

  select t2.username,t2.sid,t2.serial#,t2.logon_time
  from v$locked_object t1,v$session t2
  where t1.session_id=t2.sid order by t2.logon_time;

  如果有长期出现的一列,可能是没有释放的锁。
  
  我们可以用下面SQL语句杀掉长期没有释放非正常的锁:

  alter system kill session 'sid,serial#';

  如果出现了锁的问题, 某个DML操作可能等待很久没有反应。
  
  当你采用的是直接连接数据库的方式,
  也不要用OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连接,
  因为一个用户进程可能产生一个以上的锁, 杀OS进程并不能彻底清除锁的问题。
  
  记得在数据库级别用alter system kill session 'sid,serial#';杀掉不正常的锁。
分享到:
评论

相关推荐

    对oracle锁几种模式的理解

    为了更好地理解这两种锁模式之间的关系以及它们是如何相互作用的,下面我们通过几个具体的例子来进行演示。 ##### 实验1: ROW SHARE模式阻止EXCLUSIVE模式的尝试 - **步骤1**:在一个会话中,使用ROW SHARE模式...

    Oracle的锁表与解锁

    锁表可以通过以下几种方式实现: - **使用ALTER TABLE命令**:如`ALTER TABLE table_name LOCK TABLE IN EXCLUSIVE MODE;`,这将锁定整个表,阻止其他所有类型的锁。 - **使用BEGIN TRANSACTION和COMMIT/ROLLBACK...

    Oracle的锁内幕解惑

    Lock则用于允许多个进程共享资源,或者在不兼容的锁模式下强制独占访问。 - **管辖范围**:Latch仅适用于SGA中的数据结构;Lock则用于保护数据库对象,如表、数据块等。 - **获取模式**:Latch可以请求两种模式...

    oracle数据库锁表处理

    Oracle中主要存在以下几种类型的锁: 1. **行级锁**:作用于特定的数据行上,是最细粒度的锁。 2. **表级锁**:作用于整个表,影响范围较广。 3. **模式对象锁**:作用于模式对象(如表、视图等)。 4. **数据块锁*...

    oracle中锁和表分区

    表分区主要有以下几种方式: 1. 范围分区:根据指定列的值范围进行分区。例如,创建一个按年龄分区的人口信息表,可以将数据划分为儿童、少年、青年、中年和老年五个分区。这使得查询特定年龄段的数据时,数据库只...

    数据库锁学习文档

    Oracle提供了视图v$lock来查看锁的状态,包括会话ID、锁类型、对象ID、回滚段位置、锁模式和请求模式等信息,这有助于诊断和解决并发问题。 在实际操作中,我们可以通过示例来理解锁的工作原理。例如,在插入数据时...

    oracle锁表查询

    在Oracle中,锁主要分为以下几种类型: 1. **行级锁**:当事务执行更新操作时,它会自动获得该行上的排他锁(X锁)。 2. **表级锁**:用于锁定整个表,这种类型的锁通常由数据库管理系统自动管理。 3. **共享锁**...

    oracle lock

    在数据库管理系统(DBMS)中,锁是一种机制,用于管理多个用户同时访问共享资源(如数据库中的表或行)时可能产生的冲突。Oracle数据库中提供了多种类型的锁来确保数据的一致性和完整性,避免并发操作中的问题。 ####...

    关于oracle锁的分析-驴妈妈旅游网DBA

    1. 锁模式:Oracle支持多种锁模式,如S(共享)、X(独占)、IS(意向共享)、IX(意向独占)等,其中IS和IX是用于多级锁定协议。 2. 锁级别:分为事务级、会话级和系统级。事务级锁只在当前事务内有效,会话级锁在...

    日积月累-oracle笔记

    有几种方法可以实现数据的快速加载: 1. **直接路径插入**:使用`INSERT /*+APPEND*/`语句,可以将数据直接写入数据文件,绕过Oracle的标准缓冲区,提高加载速度。但是,这种方法不支持回滚,因此在事务性要求较高...

    oracle Session与lock 解除

    Oracle中的锁主要有以下几种模式: - **0:None** —— 没有任何锁。 - **1:Null** —— 空锁,表示没有任何锁的状态。 - **2:Row-S (RS)** —— 行共享锁,允许其他用户读取锁定的数据行,但不能进行写操作。 - ...

    ch05 oracle锁与表分区

    锁主要有以下几种类型: 1. **共享锁(S锁)**:允许一个或多个事务读取一行数据,但不允许其他事务修改该行。 2. **独占锁(X锁)**:允许一个事务独占一行数据,即可以读取和修改。当一个事务持有X锁时,其他事务...

    Oracle数据库学习指南

    Oracle2: 1. 《Oracle8 优化技术》摘录 (第一章 安装)...49. 怎样快速查出Oracle 数据库中的锁等待 50. 怎样在SQLPlus中使用 '&' 来实现自定义参数变量? 51. 怎样在查询记录时给记录加锁 52. 自动备份Oracle数据库

    oracle--lock.zip_oracle

    Oracle支持多种类型的表锁,包括以下几种: 1. **共享锁(Share Locks)**:也称为读锁,允许一个或多个事务读取表中的数据,但不允许其他事务修改这些数据。 2. **排他锁(Exclusive Locks)**:也称为写锁,允许...

    Oracle11g从入门到精通2

    10.7 几种备份与恢复方法的比较 第11章 控制文件及日志文件的管理 11.1 控制文件 11.1.1 控制文件概述 11.1.2 多路复用控制文件 11.1.3 控制文件的创建 11.1.4 控制文件的备份与恢复 11.1.5 控制文件...

Global site tag (gtag.js) - Google Analytics