『锁和进程』Oracle的死锁
来源:互联网 发布:神仙劫元神进阶数据 编辑:程序博客网 时间:2024/06/18 05:08
[Q]: 怎么查询Oracle的死锁?
[A]: Oracle会自动捕获死锁,不用去干预。但可能会出现锁长时间不能释放的问题。
可以用如下语句查下:
SELECT *
FROM V$lock
WHERE Sid IN (SELECT l.Sid
FROM V$lock l,
(SELECT Id1, Id2, Sid
FROM V$lock
WHERE BLOCK = 1) Blocker
WHERE l.Id1 = Blocker.Id1
AND l.Id2 = Blocker.Id2);
其中:block=1为的是锁始发者。
sid和session的sid关联。
关闭block=1的会话即可
/****************************************************************************/
[Q]: 怎么快速查找锁与锁等待?
[A]: 数据库的锁是比较耗费资源的,特别是发生锁等待的时候,我们必须找到发生等待的锁,
有可能的话,杀掉该进程。
下面这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句
其实产生了两个锁,一个是表锁,一个是行锁。
SELECT /*+ rule */
s.Username,
Decode(l.TYPE, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', NULL) Lock_Level,
o.Owner, o.Object_Name, o.Object_Type, s.Sid, s.Serial#, s.Terminal,
s.Machine, s.Program, s.Osuser
FROM V$session s, V$lock l, Dba_Objects o
WHERE l.Sid = s.Sid
AND l.Id1 = o.Object_Id(+)
AND s.Username IS NOT NULL
如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待
以下的语句可以查询到谁锁了表,而谁在等待。
SELECT /*+ rule */
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
以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。
如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN
- 『锁和进程』Oracle的死锁
- oracle 死锁、死进程查询和处理
- oracle 死锁和锁等待的区别
- oracle 死锁和锁等待的区别
- oracle死锁时,杀进程的方法
- oracle死锁时,杀进程的方法
- oracle杀死死锁进程
- 杀死Oracle死锁进程
- Oracle杀死死锁进程
- 杀死Oracle死锁进程
- Oracle杀死死锁进程
- oracle杀死死锁进程
- oracle结束死锁进程
- Oracle杀掉死锁进程
- 关闭Oracle死锁进程
- 杀死oracle死锁进程
- oracle 进程死锁
- Oracle:杀死死锁进程
- UBUNTU下配置PHP
- soaptools
- Scheme Procedure: dynamic-wind in_guard thunk out_guard
- 基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计
- 『管理调优』找出全表(索引)扫描SQL
- 『锁和进程』Oracle的死锁
- 『锁和进程』:根据系统进程号查对应的Session ID
- 『管理调优』使用数据连接出现ORA-02085
- 『文件管理』在数据库打开时对非系统表空间的数据文件改名
- 『管理调优』如何确定一个回滚段被哪个用户使用
- 『管理调优』如何有效的删除一个大表(extent数很多的表)
- 『事务管理』:查看一个事务完成的比例
- div 简介
- 对象的初始化、继承时,对象的初始化过程、关于构造方法、抽象类……