前两天同事又碰到oracle连接n慢的问题,由于这个现象时有时无,于是我检查了下是不是表或者其他对象有被锁住,或者是否有死锁。对象资源被锁是一个经常要碰到的急需解决的问题。
在Oracle里,当前的锁的信息存储在动态性能视图v$lock和v$locked_object中。先来看下它们定义:
Oracle官方文档及简单翻译 (oracle官方可下载资源网址在我的收藏里有列出):
V$LOCK
lists the locks currently held by the Oracle Database and outstanding requests for a lock or latch.
视图V$LOCK列出了当前被Oracle数据库持有的所有的锁以及未完成的锁和栓锁请求。
V$LOCKED_OBJECT
lists all locks acquired by every
transaction on the system. It shows which sessions are holding DML
locks (that is, TM-type enqueues) on what objects and in what mode.
视图V$LOCKED_OBJECT列出系统中每个事务获得的所有锁。它列出了那些以具体哪些模式对具体哪些对象持有TM锁的会话。
查找有关锁/死锁的更多我们需要的信息有时还需要通过表all_objects或者视图v$session,它们就不再一一讲解,请到oracle官方文档
查询。
查询有关锁的信息:
查询一:
select a.os_user_name,
a.oracle_username,
a.object_id,
c.object_name,
c.object_type
from v$locked_object a, dba_objects c
where a.object_id=c.object_id;
查询二:
select s.PROCESS,
s.SID,
s.SERIAL#,
b.object_name,
b.subobject_name,
a.LOCKED_MODE,
s.OSUSER,
s.LOGON_TIME,
s.MACHINE,
s.PROGRAM,
s.SQL_ADDRESS,
s.SQL_HASH_VALUE
from v$locked_object a, dba_objects b, v$session s
where a.OBJECT_ID = b.object_id
and a.SESSION_ID = s.SID
找到锁/死锁就好办了。找到相应需要解开的锁可以通过完成该事务或者杀死会话解锁。
杀锁进程可以用以下命令:
alter system kill session '
'查出的SID,查出的SERIAL#'。(这个必须要用查询二来获得相关Session信息)
杀oracle会话进程有时会失效,需要根据SPID到系统中杀相应的oracle进程。另外要注意的是, 我看到网上有外国的学者说, 当直接连接数据库时, 直接用OS命令 $kill process_num 或者 $kill -9 process_num杀系统进程来终止用户连接也不能完全解决问题, 因为一个用户进程可能产生一个以上的锁,杀oracle进程不能彻底解决锁的问题。
Reference:
http://www.lslnet.com/linux/edosc/42/linux-42294950.htm
分享到:
相关推荐
本文将深入探讨Oracle中的锁机制,特别是如何锁表与解锁,以及相关的SQL查询语句,帮助数据库管理员和开发人员更好地理解和管理Oracle数据库的锁状态。 #### 锁的类型 在Oracle中,锁主要分为两种类型: 1. **TX...
### Oracle 锁机制问题详解 #### 一、引言 在多用户数据库环境中,当多个用户尝试同时访问或修改同一份数据时,就需要通过锁机制来确保数据的一致性和完整性。Oracle 数据库提供了多种类型的锁来支持事务隔离级别,...
在Oracle中,锁主要分为两类:数据锁(DML锁)和字典锁。字典锁主要用于内部管理,特别是语法分析和DDL操作,用户无法直接控制。而数据锁则是我们关注的重点,它们涉及到实际的数据操作,包括对数据的读取和修改。 ...
Oracle数据库解锁工具是一种专门用于解决Oracle数据库账户锁定问题的应用程序,尤其在开发环境中十分有用。在Oracle数据库系统中,为了确保安全性,用户账户可能会因为多次尝试登录失败而被自动锁定。这种情况下,...
Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?
ORACLE数据库锁表问题浅析 Oracle数据库锁机制是企业级数据库管理系统中一个非常重要的机制。锁机制的主要目的是为了保证数据的一致性和正确性,在多用户同时访问数据库时,避免数据的不一致和错误。Oracle数据库锁...
在IT领域,尤其是在数据库管理与优化中,存储过程的解锁是一项关键技能,尤其对于Oracle数据库而言。当存储过程被锁定时,可能会影响系统的性能和稳定性,因此掌握如何解锁存储过程至关重要。以下是对“oracle存储...
本文将深入探讨Oracle数据库中的锁类型,尤其是DML锁,以及它们是如何在并发环境中维护数据完整性的。 #### 二、Oracle数据库锁类型概览 Oracle数据库的锁类型大致可以分为三类:DML锁、DDL锁和内部锁与闩锁。DML...
#### 二、Oracle中的锁机制 在深入讨论Oracle解锁和死锁之前,我们首先需要了解Oracle数据库中的锁机制。 1. **共享锁(S)**:允许多个用户读取行,但不允许修改。 2. **排他锁(X)**:允许单个用户修改行,其他用户...
Oracle 强制释放锁命令 在 Oracle 中,当出现 ORA-00054 错误时,通常是由于资源忙碌,无法获取资源而导致的。在这种情况下,可以使用强制释放锁的命令来释放锁资源,解决问题。 一、什么是 ORA-00054 错误? ORA...
Oracle的锁机制是数据库管理系统中一个关键的组成部分,它的主要目标是确保在多用户环境下,数据的读一致性、完整性和并行性。Oracle提供了多种类型的锁来满足这些需求。 首先,按照是否独占,锁分为排它锁(X锁)...
在Oracle中,锁是数据库管理系统用于控制共享资源并发访问的一种机制。它们的主要目标是防止数据的不一致性,并确保事务的隔离性。锁分为不同级别,包括行级锁和表级锁。行级锁锁定的是单个数据行,允许其他用户同时...
在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁(用来保证表的结构不被用户修改),TX锁称为事务锁或行级锁。当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统...
在Oracle中,锁分为三类:DML锁(用于保护数据完整性)、DDL锁(保护数据库对象结构)以及内部锁和Latch(保护数据库内部结构)。DML锁是本文的重点,它包括行级锁(row level lock)和表级锁(table level lock)。...
Oracle中的锁主要有两种类型:表级锁(Table Locks)和行级锁(Row Locks),分别由`TM`和`TX`标识。表级锁通常用于DML操作或DDL操作,而行级锁则是在执行更新、插入或删除等操作时自动产生的。 #### 检查锁定情况 ...
数据库死锁的概念, 所谓死锁,是指两个会话,每个会话都持有另外一个会话想要的资源,因争夺资源而造成...对于锁死的会话,我们可以直接删掉该会话,等事物回滚完成,也可以找出锁死进程的spid,从服务器中删掉该进程。