`

批量解决oracle锁等待的方法

阅读更多

此文章中批量解除oracle锁等待的方法为原创部分,其他概念性的内容来源于网络采集。本方法已在我的工程中多次使用,使用表现良好。

 

据我所知,oracle 10g之后的oracle版本不会因为使用者的操作原因,造成死锁。

 

大家通常会遇到这种现象,在自己web项目首页使用用户名,密码登陆系统时,始终停留在本页面,无法进入系统,或是在执行某些操作后,系统一直处在等待状态,不出结果,后台也无任何错误提醒。此时,很大的可能就是数据库锁等待,所要查询的包含用户名和密码的表或是用户正操作的表正在被占用造成的。

 

锁等待的现象:程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。

 

网上有很多人把这种现象称为死锁,我认为是不合理的。此时的oracle并未发生任何死锁现象,只是它一直在等待使用者前一个操作的提交。

 

产生锁等待的原因:当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。

 

锁等待定位方法

 

 

select sql_text from v$sql where hash_value in 
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object))
 

 

SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS 
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;

 

以上两种方法皆可以,不过查询出来的属性不同,可以根据个人需要选择。其中有一种方法速度较快,但我忘记是哪一种了,您若遇到数据库出现和锁等待相符的现象,可以用这两种方法查询试一下,若得到结果,则说明确实发生锁等待现象了。

 

单个解决锁等待的方法

 

alter system kill session 'sid, serial#'

 

其中的sid和serial可以通过上面锁等待定位方法的第二个方法得到,sid对应SESSION_ID,serial#对应SERIAL#。例如:

 

alter system kill session '130,2';

 

我通常会遇到上千个锁,实在没办法一个一个的kill掉了,所以我通常使用下述批量解锁方法。

 

批量解锁方法

注:此方法应在plsql中运行

 

declare cursor mycur is
select b.sid,b.serial#
  from v$locked_object a,v$session b
  where a.session_id = b.sid group by b.sid,b.serial#;

begin
  for cur in mycur
    loop  
     execute immediate ( 'alter system  kill session  '''||cur.sid || ','|| cur.SERIAL# ||''' ');
     end loop;
end;

 

若读者在使用中出现问题,可能是中英文字符转换造成的,请读者注意。

 

8
2
分享到:
评论

相关推荐

    如何解决Oracle杀死死锁进程

    Oracle 杀死死锁进程是数据库管理员经常遇到的问题,本文将介绍解决 Oracle 杀死死锁进程的方法。 在 Oracle 中,死锁是指两个或多个会话在等待对方释放资源,从而导致互相阻塞的情况。死锁可能会导致数据库性能...

    oracle 锁

    这篇博客文章将深入探讨Oracle锁的相关知识点。 首先,我们需要了解锁的种类。在Oracle中,主要有两种类型的锁:行级锁(Row-Level Locks)和表级锁(Table-Level Locks)。行级锁允许并发用户同时访问不同的数据行...

    Oracle常见等待事件说明

    Oracle数据库在运行过程中,会遇到各种等待事件,这些等待事件是数据库性能分析的重要线索,帮助DBA(数据库管理员)理解...通过阅读《Oracle常见等待事件说明.pdf》这份文档,可以获取更详细的信息和具体的解决方法。

    Oracle分区表和锁的应用

    二、Oracle锁机制 1. **锁类型**: - **行级锁(ROW LOCK)**:锁定特定行,防止并发操作导致的数据不一致。 - **表级锁(TABLE LOCK)**:锁定整个表,适用于全表扫描或批量操作。 - **行级意向锁(INTENTION ...

    30种oracle常见的等待事件说明.zip_oracle

    14. ** row cache locks**: 数据库对象的行缓存锁等待。优化表和索引的使用可以减少锁竞争。 15. **Lob Lock**: 处理LOB数据时的锁等待。考虑使用更大的块大小或优化LOB操作。 16. **DBWR Wait**: 数据写入后台写...

    ORACLE数据库的多笔查询实现.pdf

    多笔查询的方法可以解决Oracle数据库编程中检索、传输满足条件的记录结果集存在技术问题,提高系统性能和响应速度。 在实际应用中,需要根据具体情况选择合适的查询方法,选择合适的技术来解决问题,从而提高系统...

    51CTO下载-java-操作Oracle-批量入库的问题.docx

    在Java中操作Oracle数据库进行批量入库时,可能会遇到性能问题,这涉及到数据库优化、批处理策略以及数据类型的选择。...通过这些方法,可以有效地解决Java操作Oracle进行批量入库时遇到的性能问题。

    Oracle Locking Survival Guide

    在Oracle中,可以使用`v$lock`视图查询锁定信息,该脚本可能帮助用户了解哪些事务正在持有或等待哪种类型的锁。 6. 源码分析:对于开发人员来说,理解Oracle锁定的底层实现有助于优化代码并避免潜在的问题。这可能...

    BLOG_【故障处理】Oracle_lhr_队列等待之TX - allocate ITL entry案例.pdf

    6. **参考官方文档**:案例中提到了MOS (My Oracle Support) 的文档ID 1472175.1,这是一篇关于如何解决`enq: TX-allocate ITL entry`等待事件的文章,可以根据具体情况进行参考。 #### 五、总结 本案例通过具体的...

    SQL Server和Oracel中的锁和死锁

    在 SQL Server 中,锁模式包括共享锁 (SSHARE)、更新锁 (U)、独占锁 (X)、更新意向锁 (IU)、独占意向锁 (IX) 和批量更新锁 (BU) 等。共享锁用于读取操作,更新锁在准备修改数据时使用,而独占锁则确保在修改数据时...

    【故障处理】队列等待之TX 等待事件处理.docx

    总结,解决Oracle数据库中的队列等待问题需要深入理解等待事件的原理,结合实际情况进行性能分析和优化。这可能涉及调整系统参数、改进SQL语句、优化硬件配置等多个层面。对于特定的等待事件,应根据其特点采取相应...

    oracle性能优化教程下载

    **Oracle性能诊断**:通过工具如SQL Trace、AWR(Automatic Workload Repository)、ASH(Active Session History)等收集性能数据,然后使用 tkprof、sqlplus、expdp/impdp等工具进行分析,找出性能瓶颈,如锁等待...

    ORACLE_OCP10g学习笔记.pdf

    - **自动启动Oracle服务**:设置Oracle服务自动启动的方法。 - **卸载Oracle**: - **删除数据库**:删除Oracle数据库的步骤。 - **卸载软件**:彻底卸载Oracle软件的方法。 #### 三、Oracle 10.2.0.1至10.2.0.4...

    oracle 10g concepts

    - **13.3 Oracle锁数据原理:** 锁是一种控制并发访问的技术,可以防止多个用户同时修改同一数据。 - **13.4 Oracle闪回查询:** 闪回查询允许用户查看历史数据,即使数据已经被删除或修改。 #### 第14章:管理性 ...

    oracle安装

    - **锁机制**:合理设置锁级别,避免死锁和长等待。 - **事务管理**:缩短事务处理时间,减少锁定资源的时间。 通过上述步骤,不仅可以顺利完成Oracle9i的安装配置,还能有效提升系统的整体性能和稳定性。

    Toad-for-Oracle中文手册

    2. 监控工具:实时监控数据库状态,如会话、锁、等待事件等,帮助诊断性能瓶颈。 八、报表与脚本 1. 报表生成:自定义报表模板,一键生成各类数据库对象报告。 2. 脚本管理:组织和运行多条SQL或PL/SQL脚本,支持...

    Oracle 阻塞(blocking blocked)介绍和实例演示

    了解并解决Oracle阻塞问题对于数据库管理员(DBA)来说至关重要,因为长期的阻塞可能导致性能下降,甚至可能引起数据库的不稳定。 1. **阻塞的类型**: - **INSERT阻塞**:当两个或更多会话尝试插入具有相同主键或...

    Oracle 10g OCP(全)培训课程

    - **检测和解决锁冲突**:避免长时间等待。 - **管理死锁**:处理并发访问冲突。 ##### 16. 备份和恢复的概念 - **描述数据库备份、还原和恢复的基本概念**:了解备份和恢复的过程。 - **列出Oracle数据库中可能...

Global site tag (gtag.js) - Google Analytics