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

一、关键表

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

二、相关查询

  1. 查看锁表的SID

-- 简单的查看一些锁表信息
select object_id, session_id, oracle_user_name,locked_mode from v$locked_object;

 

2.查看锁表的 SID、oracle 用户、机器等


SELECT s.SID, s.serial#,username,osuer,machine,progress USERNAME
FROM v$session s
WHERE sid IN (SELECT session_id FROM v$locked_object);
-- 或者
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:产生死锁的语句主要来自哪个应用程序。

级别描述
0 none
1 null 空
2 Row-S 行共享(RS):共享表锁
3 Row-X 行专用(RX):用于行的修改
4 Share 共享锁(S):阻止其他DML操作
5 S/Row-X 共享行专用(SRX):阻止其他事务操作
6 exclusive 专用(X):独立访问使用

 

3. 用sid查询单个锁表执行语句

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

4.  查询所有加锁的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));

 三、解锁语句

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

 

posted @ 2024-12-08 11:31  达摩院的BLOG  阅读(141)  评论(0编辑  收藏  举报