`

找出和解决系统中的锁

阅读更多

V$LOCK视图中包含了关于锁的信息

V$LOCKED_OBJECT包含了关于锁的对象的信息

 

举个例子:首先在一个session使用了demo用户登陆,然后执行

update lunar set c1='first lock' where c2=999;

系统显示:

SQL> update lunar set c1='first lock' where c2=999;

 

已更新 1 行。

 

已用时间:  00: 00: 00.00

SQL>

这个session没有提交,然后在另一个session中,使用demo登陆,然后仍然执行:

update lunar set c1='first lock' where c2=999;

这时,这个session就会处于idel的状态,也就是他在等待表lunarc2=999这些行的独占锁;然后再开一个新的session,使用使用demo登陆,然后仍然执行:

update lunar set c1='first lock' where c2=999;

这时,这个session也会处于idel的状态,他也在等待表lunarc2=999这些行的独占锁,如图:

 

 

 

使用sysdba身份登陆,执行下面的脚本:

 

SQL> SELECT DECODE(request,0,'Holder: ','Waiter: ')|| sid sess, id1, id2, lmode,

  2  request, type

  3     FROM V$LOCK

  4   WHERE (id1, id2, type) IN (SELECT id1, id2, type FROM V$LOCK WHERE request>0)

  5     ORDER BY id1, request

  6  /

 

SESS                     ID1        ID2      LMODE    REQUEST TYPE

----------------- ---------- ---------- ---------- ---------- ----

Holder: 12            393247        473          6          0 TX

Waiter: 8             393247        473          0          6 TX

Waiter: 16            393247        473          0          6 TX

 

SQL>

 

HOLDER表示持有锁的进程,waiter表示等待锁的进程,所以我们需要找出来holder的进程,然后根据holdersid找到session的信息,确定是用户会话(而不是系统会话):

SQL> select sid,serial#,sql_hash_value,username,type,program,schemaname from v$session

  2  where sid = 12

  3  /

 

  SID  SERIAL# SQL_HASH_VALUE USERNAME   TYPE       PROGRAM            SCHEMANAME

----- -------- -------------- ---------- ---------- ------------------ ----------

   12       11              0 DEMO       USER       sqlplus.exe        DEMO

 

SQL>

注意,如果sql_hash_value的值不为0则表示该sql还在运行可以进一步使用 前面7.5节提及的《根据hash value找到sql语句》找到这个sql语句

 

我们可以确认这个锁是被一个模式名(可以近似理解为用户名)为demooracle用户,当然也可以确定该进程的类型为用户进程(而不是系统进程)。接下来,我们就可以杀掉这个sid了。

 

如果想看看该用户锁定的对象,可以使用v$locked_object

SQL> select OBJECT_ID,SESSION_ID,ORACLE_USERNAME,PROCESS,LOCKED_MODE

  2  from v$locked_object;

 

 OBJECT_ID SESSION_ID ORACLE_USERNAME                PROCESS      LOCKED_MODE

---------- ---------- ------------------------------ ------------ -----------

      7382          8 DEMO                           2516:1812              3

      7382         12 DEMO                           2440:2424              3

      7382         16 DEMO                           2524:2384              3

 

SQL>

 

 

然后使用 alter system kill session 来杀掉这个进程就可以了,例如:

SQL> alter system kill session '12,11';

 

System altered

 

SQL>

 

 

 

 

分享到:
评论

相关推荐

    sybase锁表检查与解决方法

    如果发现特定表被锁住,通常需要找出持有锁的进程并决定是否需要终止该进程。可以使用`sp_who2`系统存储过程获取当前连接和活动的详细信息: ```sql exec sp_who2 ``` 找到锁定你关注表的进程ID后,可以通过`kill`...

    常见DB2锁等待解决流程

    接下来,通过编写一个SQL查询脚本来监控并找出引发锁等待的SQL语句。脚本内容如下: ```sql SELECT AGENT_ID, SUBSTR(STMT_TEXT, 1, 100) AS statement, STMT_ELAPSED_TIME_MS FROM TABLE(SNAPSHOT_STATEMENT('...

    硬盘“逻辑锁”解决办法

    例如,通过分析硬盘的MBR、分区表和引导扇区等关键部分,找出导致“逻辑锁”的原因,并针对性地进行修复。 #### 注意事项 - 在尝试上述任何一种方法之前,请确保备份重要的数据,以防操作不当导致数据丢失。 - ...

    节流液力锁在采煤机调高系统中的应用研究

    在理论分析方面,研究基于流体力学,建立了采煤机摇臂下降油缸腔体和回路压力的平衡方程,以找出影响结果的关键因素。通过对某型号采煤机进行实验,获得了相关性曲线,实验结果与理论计算相吻合,证实了新型节流液力...

    文件解锁工具unlocker

    它的工作原理是通过扫描系统中当前运行的进程,找出与目标文件关联的所有锁,然后提供一个界面供用户选择如何处理这些锁。这种机制使得Unlocker成为了Windows 7用户解决文件锁定问题的首选工具。 在Windows 7环境下...

    2019深思S4全国写锁工具

    深思S4全国写锁工具是一款专为2019年设计的专业级计算机硬件调试工具,主要用于处理和解决系统中的写锁问题。在IT行业中,写锁是一种多线程编程中用于控制对共享资源访问的技术,它确保在任何时刻只有一个线程能够...

    MySQL锁类型以及子查询锁表问题、解锁1

    1. 使用`SHOW PROCESSLIST`找出锁定的进程ID,然后执行`KILL id;`来终止该进程。 2. 直接使用`UNLOCK TABLES;`命令解锁当前用户锁定的所有表。 锁表操作如`LOCK TABLES tbl_name READ/WRITE;`可以在备份或维护时...

    informix锁表处理

    在这里,它用于从`systables`系统表中找出被锁表的详细信息,如表名、表ID等。 6. **找到持有锁的会话**: 使用`onstat -u`找出持有锁的会话ID,然后通过`onstat -g sql sessid`查看该会话执行的SQL语句,了解导致...

    oracle常见的锁查询和处理

    例如,通过`v$session`视图,可以找出持有特定表锁的会话,通过`v$lock`可以查看当前的锁状态。 处理锁冲突: 解决锁冲突通常包括强制回滚事务、杀死会话进程或者调整应用程序逻辑以减少并发冲突。强制回滚可以通过...

    开锁服务管理系统》专门为开锁公司做的一款业务及库存管理的软件.zip

    服务记录数据库,保存每一次开锁服务的详情,以便进行数据分析,找出服务中的瓶颈和改进点;库存数据库,实时跟踪锁具、工具的库存情况,确保配件供应充足。 在系统分析与设计方面,开发这样一个系统需要对开锁公司...

    进程解锁程序对无法关闭的进程解锁

    总的来说,"进程解锁程序"是解决系统中顽固进程问题的有效工具,Unlocker作为其中的一员,凭借其易用性和高效性,赢得了广大用户的认可。在面对无法关闭的进程时,正确地使用Unlocker这类工具,可以有效避免因进程...

    深思写锁工具

    6. **性能监控**:为了优化系统性能,工具可能提供了锁的监控功能,可以追踪锁的获取和释放情况,帮助开发者找出可能存在的性能瓶颈。 7. **并发控制策略**:除了基本的锁机制,工具可能还支持其他的并发控制策略,...

    电信设备-基于指纹识别技术和移动通信技术的指纹密码锁控制管理系统和方法.zip

    特征提取则是从图像中找出关键的纹线结构,如纹线的起点、终点、分叉点等;最后,通过算法比较这些特征,与数据库中的模板进行比对,以确定用户的身份。这种技术因其难以伪造和较高的安全性,在安全认证领域广泛应用...

    DB2解决表死锁

    3. **分析原因**:查看回滚的事务,分析其操作和锁请求,找出导致死锁的原因。 4. **优化代码**:根据分析结果,调整应用程序代码,避免未来再次出现类似死锁。 5. **调整数据库配置**:如果频繁发生死锁,可能需要...

    高性能MySQL读书笔记 找出谁持有锁

    然而,当锁冲突频繁发生时,找出导致阻塞的SQL语句变得至关重要。本文基于《高性能MySQL》中的实践,探讨如何在MySQL中定位持有锁的进程。 首先,我们需要了解MySQL中的锁类型。在示例中,使用的是MyISAM存储引擎,...

    Oracle锁 图例

    通过查询上述视图,可以找出锁的持有者、等待者以及锁定的对象。在优化SQL语句、调整事务隔离级别或改变并发策略等方面进行调整,以减少锁冲突。 总结,Oracle锁机制是数据库并发控制的核心,理解并熟练掌握锁的...

    文件解锁小工具unlock

    Unlocker的工作原理在于,它首先会扫描指定文件或文件夹,找出与其关联的所有系统进程。接着,Unlocker将这些信息以清晰的界面展示给用户,用户可以选择结束一个或多个占用进程,以释放文件的锁定。这种直观的交互...

    et199 BEA15CB3底层写锁

    2. 锁分析:分析锁冲突,找出可能导致性能瓶颈或死锁的模式。 3. 锁解除:在必要时,手动解除特定的锁以解决死锁问题。 4. 性能调优:根据锁的行为调整数据库参数,以改善并发性能。 5. 数据恢复:在出现错误时,...

    大多数手机的解锁平台

    他们通过对原始设备制造商(OEM)的固件进行逆向工程,找出解锁的方法。这个过程可能涉及查找并修改特定的系统文件,或者利用安全漏洞来实现解锁。 解锁平台的工作原理通常包括以下步骤: 1. **设备识别**:解锁工具...

    unlocker系统解锁

    Unlocker的工作原理是通过扫描并找出占用目标文件的进程,然后提供给用户选择:结束进程、移动文件、重命名文件或者直接删除文件。这样,即使文件被系统或者其他应用程序占用,也能通过Unlocker有效地解锁并处理。 ...

Global site tag (gtag.js) - Google Analytics