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 共享行独占(SRX):阻止其他事务操作,share/sub exclusive
6:exclusive 独占(X):独立访问使用,exclusive
数字越大锁级别越高, 影响的操作越多。
1级锁有:Select,有时会在v$locked_object出现。
2级锁有:Select for update,Lock For Update,Lock Row Share
select for update当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select for update操作。
3级锁有:Insert, Update, Delete, Lock Row Exclusive
没有commit之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。
4级锁有:Create Index, Lock Share
locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示ora-00054错误。
00054, 00000, "resource busy and acquire with NOWAIT specified"
// *Cause: Resource interested is busy.
// *Action: Retry if necessary.
5级锁有:Lock Share Row Exclusive
具体来讲有主外键约束时update / delete ... ; 可能会产生4,5的锁。
6级锁有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive
以DBA角色, 查看当前数据库里锁的情况可以用如下SQL语句:
<CCID_NOBR>
<CCID_CODE>col owner for a12 col object_name for a16 select b.owner,b.object_name,l.session_id,l.locked_mode from v$locked_object l, dba_objects b where b.object_id=l.object_id / 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语句杀掉长期没有释放非正常的锁:
<CCID_NOBR>
<CCID_CODE>alter system kill session 'sid,serial#'; |
如果出现了锁的问题, 某个DML操作可能等待很久没有反应。
当你采用的是直接连接数据库的方式,也不要用OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连接,因为一个用户进程可能产生一个以上的锁, 杀OS进程并不能彻底清除锁的问题。
相关推荐
oracle 甲骨文 获得最高认证级别的ISO标准安全认证,性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。但价格不菲 大型企业 db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以上用DB2...
Oracle数据库是世界上最广泛使用的数据库系统之一,其性能优化的一个关键因素就是索引的使用。索引可以帮助快速查找和访问数据库中的数据,显著提高查询效率。本篇将详细讲解Oracle数据库中的索引及其重要性。 一、...
索引选择性越高,索引的效率也越高。使用CBO时,应该避免使用选择性差的索引。 - **强制使用索引**:在SQL语句中可以通过HINT来指定使用某个索引,例如:`SELECT /*+ INDEX(A IND_COL1) */ * FROM A WHERE COL1 = ...
- 聚簇因子表示索引条目与实际数据之间的距离,其值越低表明索引的效率越高。 - 动态采样技术可以使Oracle更精确地估算查询成本,从而选择更优的执行计划。 - **监控索引** - 维护索引的开销可以通过`V$OBJECT_...
### Oracle 12c RMAN备份与恢复技术详解 #### 一、RMAN(Recovery Manager)概述 在Oracle 12c版本中,RMAN是用于管理数据库备份和恢复的强大工具。它不仅可以帮助管理员执行数据库备份,还能进行灾难恢复操作,...
⑴反规 范化的必要性 是否规范化的程度越高越好呢?答案是否定的,应根据实际需要来决定,因为“分离”越深,产生的关系越多,结构越复杂。关系越多,连接操作越频繁,而连接操作是最费时间的,在数据库设计中特别对...
**选择性**(Selectivity)是指索引中不同键值的比率,越高意味着查询效率越高。当选择性较低时,全表扫描可能更快。 **成本**(Cost)是Oracle优化器评估查询执行计划的依据。索引可能导致更高的I/O成本,但减少...
访问的叶块越多,查询的成本就越高。 3. **访问的数据块次数**:基于`clustering_factor`。这个值表示索引记录与其对应数据行之间的紧密程度。低的聚簇因子意味着索引记录与其对应的数据行在物理上相邻存储的可能性...
3. 数据分布:考虑列的基数(不同值的数量),基数越高,索引效果越好。 4. 避免NULL:NULL值会影响索引的效率,考虑是否允许NULL或使用默认值。 四、索引维护 1. 维护索引统计信息:定期执行ANALYZE命令更新表的...
- 在J2EE环境中,JTA用于处理跨越多个资源(如数据库、消息队列)的事务。Oracle支持JTA,提供了分布式事务的处理能力。优点是强大的事务管理,缺点是增加了复杂性和潜在的性能影响。 六、使用Spring框架: - ...
- **数据量过大**:读取的数据量越大,IO负担越重。 #### 三、PL/SQL优化的核心思想 PL/SQL优化的核心思想在于尽可能地减少上述三种资源的消耗,特别是磁盘I/O。由于CPU和内存的速度远高于磁盘读写速度,因此减少...
选择性高的索引(即索引列中的不同值越多)通常更有效,因为它能减少搜索范围。但同时,创建和维护索引会消耗额外的存储空间,并可能影响数据插入、更新和删除的速度。因此,需要权衡性能提升与资源开销。 五、索引...
但并不是索引越多越好,过多的索引会导致更新操作变慢,因此需要合理规划索引数量。 ### 七、控制文件 1. **控制文件特点**:控制文件是Oracle数据库中非常重要的组成部分,它记录了数据库的物理结构相关信息,...
2. 选择性:索引的选择性越高,查询效率越高。 3. 优化器:Oracle的CBO(Cost-Based Optimizer)根据成本估算选择最佳执行计划。 4. Explain Plan:用于分析和理解SQL查询的执行计划。 五、存储过程与函数 1. 存储...
这个参数的值越大,数据缓冲区的命中率就越高,物理读取就会相应减少。数据库管理员需要根据实际的工作负载和硬件资源,合理地调整DB_BLOCK_BUFFERS参数,以获得最佳性能。 二、操作系统的优化 操作系统层面的优化...
1. 选择性好的索引:索引的选择性越高,查询速度越快。选择性是指索引列中不同值的比例,比例越大,索引效果越好。 2. 使用覆盖索引:覆盖索引可以使Oracle直接从索引中获取所需数据,避免了回表操作,提高了查询...
共享值越高,PDB能够获得的资源就越多。 - **使用限制**:除了共享值外,还可以为PDB设置使用限制,比如限制PDB可以获得的CPU百分比。 #### 六、示例:基于共享值的资源分配 假设我们有一个CDB,其中包含三个PDB:...
- **检查成本**:关注每个步骤的成本,成本越高通常意味着性能越低。 - **检查筛选条件**:注意WHERE子句中的条件是如何应用的。 - **检查索引使用情况**:确保重要的查询使用了适当的索引。 **4.3 如何干预执行...
sr 值比 fr 值高的越多,说明替换算法要查找可以替换的页面就越困难。 - `cy`:每秒页面替换代码扫描了 PFT 多少次。因为增加空闲列表达到 maxfree 值,不一定需要完全扫描 PFT 表,而所有 vmstat 输出都为整数,...
隔离级别越高,使用的锁越多,对并发性能的影响越大。 **6.2 按照锁的粒度分数据库锁有哪些?** - **行级锁**:锁定单个行。 - **表级锁**:锁定整个表。 - **页级锁**:锁定表的一部分。 **6.2.1 行级锁,表级锁...