oracle数据库查看锁表的sql语句整理

 更新时间:2023年10月25日 10:36:46   作者:万山寒  
Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,这篇文章主要给大家介绍了关于oracle数据库查看锁表的sql语句的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

关键表

  • V$LOCKED_OBJECT :记录锁信息的表
  • v$session :记录会话信息的表
  • v$sql:记录执行sql的表
  • dba_objects:用来管理对象(表、库等等对象)

查看锁表的SID

sql1

SELECT USERNAME,SID, LOCKWAIT, STATUS, MACHINE, PROGRAM
FROM v$session
WHERE sid IN (SELECT session_id FROM v$locked_object);

sql2

SELECT sess.SID, sess.SERIAL#, lo.ORACLE_USERNAME, lo.OS_USER_NAME, lo.LOCKED_MODE, ao.OBJECT_NAME
FROM V$LOCKED_OBJECT lo,
     v$session sess,
     dba_objects ao
WHERE lo.SESSION_ID = sess.SID
  AND ao.OBJECT_ID = lo.OBJECT_ID;
  • USERNAME:死锁语句所用的数据库用户;
  • SID: session_id
  • LOCKWAIT:死锁的状态,如果有内容表示被死锁。
  • STATUS:状态,active表示被死锁
  • MACHINE:死锁语句所在的机器。
  • PROGRAM:产生死锁的语句主要来自哪个应用程序。

查看锁表执行语句

用sid查询单个

SELECT sql_text
FROM v$sql
WHERE hash_value IN
      (SELECT sql_hash_value FROM v$session WHERE sid='XXXXXXXX');

查询所有加锁的sql

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));

查询未提交事务的SQL

造成死锁的sql事务都必定是未提交的

SELECT s.SID,
       s.USERNAME,
       s.OSUSER,
       s.PROGRAM,
       TO_CHAR(s.LOGON_TIME, 'yyyy-mm-dd hh24:mi:ss')                                             AS LOGON_TIME,
       TO_CHAR(t.START_DATE, 'yyyy-mm-dd hh24:mi:ss')                                             AS START_DATE,
       s.STATUS,
       (SELECT q.SQL_TEXT FROM v$sql q WHERE q.LAST_ACTIVE_TIME = t.START_DATE AND rownum <= 1) AS SQL_TEXT
FROM v$session s,
     v$transaction t
WHERE s.SADDR = t.SES_ADDR;

杀死锁

ALTER SYSTEM KILL SESSION 'sess.sid, sess.serial#';

附:数字越大锁级别越高, 影响的操作越多

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

总结 

到此这篇关于oracle数据库查看锁表的sql语句的文章就介绍到这了,更多相关oracle查看锁表sql内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle数据远程连接的四种设置方法和注意事项

    Oracle数据远程连接的四种设置方法和注意事项

    Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍
    2014-04-04
  • Oracle BULK COLLECT批量取数据解决方法

    Oracle BULK COLLECT批量取数据解决方法

    在oracle使用中为了提高取数据效率,本文将详细介绍Oracle BULK COLLECT批量取数据,需要了解跟多的朋友可以参考下
    2012-11-11
  • Oracle 23ai中重要新特性VECTOR数据类型的使用

    Oracle 23ai中重要新特性VECTOR数据类型的使用

    Oracle 23ai 中的 VECTOR 数据类型是 Oracle 数据库在 AI 领域的一个重要新特性,它允许用户以向量的形式存储数据,并在这些向量的基础上进行高效的搜索和分析,下面就来介绍一下如何使用
    2024-08-08
  • Oracle存储过程与函数的详细使用教程

    Oracle存储过程与函数的详细使用教程

    存储过程和函数在Oracle中被称为子程序,是指被命名的PL/SQL块,这种块可以带有参数,可以被多次调用,下面这篇文章主要给大家介绍了关于Oracle存储过程与函数的详细使用,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • oracle 12c因误删pdb数据文件导致整个数据库打不开的解决方法

    oracle 12c因误删pdb数据文件导致整个数据库打不开的解决方法

    这篇文章主要给大家介绍了关于oracle 12c因误删pdb数据文件导致整个数据库打不开问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧。
    2017-10-10
  • oracle如何修改Blob类型数据,批量更新数据做字符替换

    oracle如何修改Blob类型数据,批量更新数据做字符替换

    这篇文章主要介绍了oracle如何修改Blob类型数据,批量更新数据做字符替换问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Windows下编写批处理脚本来启动和重置Oracle数据库

    Windows下编写批处理脚本来启动和重置Oracle数据库

    这篇文章主要介绍了Windows下编写cmd脚本来对Oracle数据库执行启动和重置的方法,只需在bat文件中保存cmd shell之后就可以双击使用,简单粗暴,需要的朋友可以参考下
    2016-03-03
  • oracle中commit之后进行数据回滚的方法

    oracle中commit之后进行数据回滚的方法

    这篇文章主要介绍了oracle中commit之后如何进行数据回滚,本文给大家分享两种方法,每种方法都给大家介绍的比较详细,需要的朋友可以参考下
    2021-12-12
  • Oracle数据库中如何给表赋予权限

    Oracle数据库中如何给表赋予权限

    赋权是指将特定的权限授予用户或用户组,以便他们可以执行特定的操作,如查询、插入、更新和删除数据,创建和修改表结构,以及执行其他管理任务,这篇文章主要给大家介绍了关于Oracle数据库中如何给表赋予权限的相关资料,需要的朋友可以参考下
    2024-01-01
  • oracle与mysql的视频教程下载地址分享

    oracle与mysql的视频教程下载地址分享

    这是某培训机构的oracle跟mysql视频教程,现在分享给大家,想要学习mysql和oracle的同学不要错过哦
    2013-03-03

最新评论