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#';杀掉不正常的锁。
分享到:
相关推荐
锁表可以通过以下几种方式实现: - **使用ALTER TABLE命令**:如`ALTER TABLE table_name LOCK TABLE IN EXCLUSIVE MODE;`,这将锁定整个表,阻止其他所有类型的锁。 - **使用BEGIN TRANSACTION和COMMIT/ROLLBACK...
Oracle表级锁主要包括以下几种模式: 1. **ROW SHARE (SS)** - **定义**:ROW SHARE锁允许并发访问被锁定的表,但禁止用户以排他方式(exclusive access)锁定整个表。ROW SHARE锁与SHARE UPDATE锁相同,主要是...
### Oracle锁的概念与分类 #### 一、锁的基本概念 在Oracle数据库中,锁是一种用于管理并发事务的重要机制。通过锁机制,Oracle能够确保多用户环境下的数据一致性和完整性。简单来说,锁是为了防止多个用户同时...
按照锁的作用范围不同,可以将其分为以下几种类型: - **共享锁(Share, S)**:这种类型的锁允许多个用户同时读取数据,但阻止其他用户修改数据。多个用户可以同时在一个表上放置共享锁。 - **排他锁(Exclusive, E)**...
Oracle中锁有以下几种模式: 1. 共享锁:共享锁是一个事务对特定数据库资源进行共享访问——另一事务也可对此资源进行访问或获得相同共享锁,但不能修改。 2. 排它锁:事务设置排它锁后,该事务单独获得此资源,另...
DDL锁主要包括以下几种: - **Row Cache Locks**(或称Dictionary Cache Locks):用于保护数据字典缓存中的对象,如表定义、索引定义等。 - **Library Cache Locks**(Breakable Parse Locks):用于保护共享池中...
表分区主要有以下几种方式: 1. 范围分区:根据指定列的值范围进行分区。例如,创建一个按年龄分区的人口信息表,可以将数据划分为儿童、少年、青年、中年和老年五个分区。这使得查询特定年龄段的数据时,数据库只...
Oracle中主要存在以下几种类型的锁: 1. **行级锁**:作用于特定的数据行上,是最细粒度的锁。 2. **表级锁**:作用于整个表,影响范围较广。 3. **模式对象锁**:作用于模式对象(如表、视图等)。 4. **数据块锁*...
表锁包括以下几种模式: 1. 无锁(none) 2. 空查询(NULL) 3. 行共享锁(SS):允许读取和修改 4. 行排他锁(SX):禁止DML操作 5. 共享锁(S):仅允许读取 6. 共享行排他锁(SSX) 7. 排他锁(X) 模式的数值越...
在Oracle中,锁主要分为以下几种类型: 1. **行级锁**:当事务执行更新操作时,它会自动获得该行上的排他锁(X锁)。 2. **表级锁**:用于锁定整个表,这种类型的锁通常由数据库管理系统自动管理。 3. **共享锁**...
Oracle中的锁主要分为以下几种类型: 1. 表级锁:包括表的读锁(SHARE)和写锁(EXCLUSIVE),用于控制对整个表的操作。 2. 行级锁:更细粒度的锁定,如行共享锁(SHARE ROW EXCLUSIVE)和行独占锁(EXCLUSIVE),...
锁主要有以下几种类型: 1. **共享锁(S锁)**:允许一个或多个事务读取一行数据,但不允许其他事务修改该行。 2. **独占锁(X锁)**:允许一个事务独占一行数据,即可以读取和修改。当一个事务持有X锁时,其他事务...
" "ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁 3:Row-X 行专用(RX):用于行的修改 4:Share 共享锁(S):阻止其他DML操作 5:S/Row-X 共享行专用(SRX):阻止其他事务...
Oracle中的锁主要有以下几种模式: - **0:None** —— 没有任何锁。 - **1:Null** —— 空锁,表示没有任何锁的状态。 - **2:Row-S (RS)** —— 行共享锁,允许其他用户读取锁定的数据行,但不能进行写操作。 - ...
锁表通常发生在以下几种情况: - 数据库事务长时间运行未完成。 - 错误的SQL语句或程序逻辑导致锁未能正常释放。 - 数据库资源争用导致死锁。 锁的存在可能导致的问题包括但不限于: - 性能下降:由于等待锁的释放...
Oracle支持多种类型的表锁,包括以下几种: 1. **共享锁(Share Locks)**:也称为读锁,允许一个或多个事务读取表中的数据,但不允许其他事务修改这些数据。 2. **排他锁(Exclusive Locks)**:也称为写锁,允许...
Oracle SQL基础知识点主要包括以下几个方面: 1. SQL语言概述:结构化查询语言(SQL)是一种用于管理和操作关系数据库的标准编程语言。Oracle SQL遵循SQL标准,但同时也提供了一些特定于Oracle的扩展。 2. 数据...
下面详细介绍几种常用的连接方法: ##### 1. 使用SQL*Plus连接数据库 - **不登录模式(nolog)** ```sql sqlplus /nolog ``` 此命令用于启动SQL*Plus客户端而不立即连接到数据库,这通常用于后续手动指定连接...
修改Oracle系统参数可以通过以下几种方式: - 动态参数(可以在运行时修改): ```sql ALTER SYSTEM SET parameter=value SCOPE=MEMORY; ``` - 静态参数(需要重启数据库才能生效): ```sql ALTER SYSTEM SET...
根据存储的数据类型不同,段可以分为几种类型:表段、索引段、簇段等。 **3. 区 (Extent)** 区是由一组连续的数据块组成的存储单元。当一个新段创建时,它会从表空间分配一个或多个区来存储数据。随着数据的增长,...