Oracle 锁表查询大全
----------------------------------
--常用:锁表查询相关
----------------------------------
-- 同时可用如下命令来kill掉当前锁表的项:;
--alter system kill session 'sid, serial#';
--如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待
--如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN
--以下几个为相关表
SELECT * FROM v$lock;
SELECT * FROM v$sqlarea;
SELECT * FROM v$session;
SELECT * FROM v$process;
SELECT * FROM v$locked_object;
SELECT * FROM all_objects;
SELECT * FROM v$session_wait;
--以下的SQL语句列出当前数据库建立的会话情况:
--注意,上例中SID为1到7(USERNAME列为空)的会话,是Oracle的后台进程,不要对这些会话进行任何操作。
select sid, serial#, username, program, machine, status from v$session;
--查看数据库引起锁表的SQL语句:
SELECT A.USERNAME,
A.MACHINE,
A.PROGRAM,
A.SID,
A.SERIAL#,
A.STATUS,
C.PIECE,
C.SQL_TEXT
FROM V$SESSION A, V$SQLTEXT C
WHERE A.SID IN (SELECT DISTINCT T2.SID
FROM V$LOCKED_OBJECT T1, V$SESSION T2
WHERE T1.SESSION_ID = T2.SID)
AND A.SQL_ADDRESS = C.ADDRESS(+)
ORDER BY C.PIECE;
--查看数据库锁的情况必须要有DBA权限,可以使用一下SQL 语句:
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;
--查看被锁的表
SELECT P.SPID,
A.SERIAL#,
C.OBJECT_NAME,
B.SESSION_ID,
B.ORACLE_USERNAME,
B.OS_USER_NAME
FROM V$PROCESS P, V$SESSION A, V$LOCKED_OBJECT B, ALL_OBJECTS C
WHERE P.ADDR = A.PADDR
AND A.PROCESS = B.PROCESS
AND C.OBJECT_ID = B.OBJECT_ID;
------------------------------
--1.查出锁定object的session的信息以及被锁定的object名
------------------------------
SELECT l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
l.os_user_name,
s.machine,
s.terminal,
o.object_name,
s.logon_time
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;
------------------------------
--2.查出锁定表的session的sid, serial#,os_user_name, machine name, terminal和执行的语句
--比上面那段多出sql_text和action
------------------------------
SELECT l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
s.user#,
l.os_user_name,
s.machine,
s.terminal,
s.PROGRAM,
a.sql_text,
a.SQL_ID,
a.action
FROM v$sqlarea a, v$session s, v$locked_object l
WHERE l.session_id = s.sid
AND s.SQL_ADDRESS = a.address
ORDER BY sid, s.serial#;
------------------------------
--3.查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,mode
------------------------------
SELECT s.sid,
s.serial#,
s.username,
s.schemaname,
s.osuser,
s.process,
s.machine,
s.terminal,
s.logon_time,
l.type
FROM v$session s, v$lock l
WHERE s.sid = l.sid
AND s.username IS NOT NULL
ORDER BY sid;
/*
SELECT A.OWNER, --OBJECT所属用户
A.OBJECT_NAME, --OBJECT名称(表名)
B.XIDUSN,
B.XIDSLOT,
B.XIDSQN,
B.SESSION_ID, --锁表用户的session
B.ORACLE_USERNAME, --锁表用户的Oracle用户名
B.OS_USER_NAME, --锁表用户的操作系统登陆用户名
B.PROCESS,
B.LOCKED_MODE,
C.MACHINE, --锁表用户的计算机名称(例如:WORKGROUP\UserName)
C.STATUS, --锁表状态
C.SERVER,
C.SID,
C.SERIAL#,
C.PROGRAM --锁表用户所用的数据库管理工具(例如:ob9.exe)
FROM ALL_OBJECTS A, V$LOCKED_OBJECT B, SYS.GV_$SESSION C
WHERE A.OBJECT_ID = B.OBJECT_ID
AND B.PROCESS = C.PROCESS(+)
ORDER BY 1, 2;
SELECT A.USERNAME,
A.MACHINE,
A.PROGRAM,
A.SID,
A.SERIAL#,
A.STATUS,
C.PIECE,
C.SQL_TEXT
FROM V$SESSION A,
V$SQLTEXT C
WHERE A.SID IN (SELECT DISTINCT T2.SID
FROM V$LOCKED_OBJECT T1,
V$SESSION T2
WHERE T1.SESSION_ID = T2.SID)
AND A.SQL_ADDRESS = C.ADDRESS(+)
ORDER BY C.PIECE;
--
--最近遇到这样一个问题,操作一个表,发现被人锁定了,于是查询谁锁定的表,发现多人锁定,安全起见,不能全部kill,于是用一下语句判定,谁锁定,谁等待;
--
SELECT LPAD(' ', DECODE(L.XIDUSN, 0, 3, 0)) || L.ORACLE_USERNAME USER_NAME,
O.OWNER,
O.OBJECT_NAME,
O.OBJECT_TYPE,
S.SID,
S.SERIAL#
FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S
WHERE L.OBJECT_ID = O.OBJECT_ID
AND L.SESSION_ID = S.SID
ORDER BY O.OBJECT_ID, XIDUSN DESC;
*/
Oracle 锁表查询大全相关推荐
- oracle 锁表查询和解表操作
数据库操作语句的分类 DDL:数据库模式定义语言,关键字:create DML:数据操纵语言,关键字:Insert.delete.update DCL:数据库控制语言 ,关键字:grant.remov ...
- oracle锁表查询_专业解决 MySQL 查询速度慢与性能差
Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSe ...
- oracle 锁表查询及解决、表字段查询
在进行批量对DML操作时程序竟然中断了,不再往下执行.查询一下某张表被锁住了,因此不再往下执行了 如果怀疑表被锁了,或者事务未被正常关闭,在Oracle数据库中我们可以通过以下语句进行查询获取相关信息 ...
- Oracle 锁表查询
--以下几个为相关表 SELECT * FROM v$lock; SELECT * FROM v$sqlarea; SELECT * FROM v$session; SELECT * FROM v$p ...
- 解决Oracle锁表问题
文章目录 数据库操作语句的分类 oracle表在什么情况下会被锁住 Oracle锁表查询和解锁 通过第一步查出来的信息找到被锁的表之后执行如下语句解锁该表: 锁的模式 数据库操作语句的分类 DDL:数 ...
- oracle update 锁表还是锁行,for update造成的Oracle锁表与解锁
我遇到的情况: 当使用select语句查询表时,后面跟着for update , select * from table for update 当修改表中数据,但是没有commit就关掉PL/SQL, ...
- oracle数据库锁表查询,解锁,kill缩表进程
(1)锁表查询的代码形式如下: select count(*) from v$locked_object; select * from v$locked_object; (2)查看哪个表被锁 ---不 ...
- Oracle锁表 行级锁 表级锁 行级锁
2019独角兽企业重金招聘Python工程师标准>>> Oracle锁表 行级锁 表级锁 ---- 行被排他锁定 ----在某行的锁被释放之前,其他用户不能修改此行 ...
- oracle锁表导致update,delete,insert出现无反应的问题
java项目中遇到更新,删除等操作无反应的问题,但后台却不报错,也能正确打印sql语句.最终发现是oracle锁表导致的. 解决方法: 1.查询oracle数据库被锁的表 SELECT T1.ORAC ...
- oracle锁表怎么解决,Oracle锁表问题的简捷处理技巧
在开发Oracle数据库时,我们常遇到频繁操作的Oracle数据表,会出现Oracle锁表.现在就针对这一问题,提下个人的解决Oracle锁表的技巧. 首先问题分析: (1)锁的分析 ORACLE里锁 ...
最新文章
- 干货丨机器学习必知的15大框架
- Android文本框EditText显示为多行
- spring 的权限控制:security
- python如何爬取网站所有目录_[python] 爬取网站所有的URL
- java追加txt文件_java怎么追加写入txt文件
- Python 学习笔记 - 协程
- 智能优化算法:足球联赛竞争算法-附代码
- per_cpu机制的详解
- SQL Server 由于一个或多个对象访问此列,ALTER TABLE DROP COLUMN xxx 失败问题解决
- 多人协同在线编辑文档软件使用体验
- CF1526C2 Potions (Hard Version) (贪心 + 线段树)
- 程序员必备编辑器软件
- 互联网晚报 |12/2星期五 | 天猫向ofo及戴威索要5亿借款;优衣库创始人称在中国开3K家店还不够;国美电器回应已被破产清算...
- Webpack 常用知识点总结
- python工作任务流flow实时框架:prefect
- VSLAM 相关知识点总结
- 程序员面试:一年内年薪22万涨到60万,你来不来?网友:评论炸锅了!
- 汽车基础软件赛道正在经历一轮洗牌
- 武汉大学计算机专业博士导师,武汉大学计算机学院博士生导师简介:袁志勇
- 活动制作服务器,制作微信投票活动需要做哪些准备