-- 查看表被锁
select b.owner,b.object_name,a.session_id,a.locked_mode
from v$locked_object a,dba_objects b
where b.object_id = a.object_id
--查看是哪个session引起的
select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time
通过 select * from table whereid=16701 for update 锁住一张表
通过以下语句可查询出被锁住的对象
SELECT OBJECT_ID,
SESSION_ID,
SERIAL#,
ORACLE_USERNAME,
OS_USER_NAME,
S.PROCESS
FROM V$LOCKED_OBJECT A, V$SESSION S
WHERE A.SESSION_ID = S.SID
解锁
alter system kill session 'sid,serial#';
select 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 s.sid=l.sid
and o.object_id=l.id1
and s.username is not null
alter system kill session '590,13367';
二、数据库死锁的现象
程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。
二、死锁的原理
当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提
交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,
此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。
三、死锁的定位方法
通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。
1)用dba用户执行以下语句
select username,lockwait,status,machine,program from v$session where sid in
(select session_id from v$locked_object)
如果有输出的结果,则说明有死锁,且能看到死锁的机器是哪一台。字段说明:
Username:死锁语句所用的数据库用户;
Lockwait:死锁的状态,如果有内容表示被死锁。
Status: 状态,active表示被死锁
Machine: 死锁语句所在的机器。
Program: 产生死锁的语句主要来自哪个应用程序。
2)用dba用户执行以下语句,可以查看到被死锁的语句。
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))
四、死锁的解决方法
一般情况下,只要将产生死锁的语句提交就可以了,但是在实际的执行过程中。用户可
能不知道产生死锁的语句是哪一句。可以将程序关闭并重新启动就可以了。
经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。
1)查找死锁的进程:
sqlplus "/as sysdba" (sys/change_on_install)
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;
2)kill掉这个死锁的进程:
alter system kill session ‘sid,serial#’; (其中sid=l.session_id)
3)如果还不能解决:
select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr;
其中sid用死锁的sid替换: exit
ps -ef|grep spid
其中spid是这个进程的进程号,kill掉这个Oracle进程
from:http://southking.javaeye.com/blog/550832
select A.SQL_TEXT, B.
相关推荐
oracle解锁语句,常用解锁语句,经过测试实用;oracle解锁语句,常用解锁语句,经过测试实用。
### Oracle解锁语句详解 #### 一、Oracle解锁语句概述 在Oracle数据库管理中,锁定与解锁是常见的操作之一,特别是在处理并发控制时尤为重要。当一个会话长时间占用资源导致其他会话无法正常工作时,可能需要进行...
查询ORACLE死锁以及解锁语句查询ORACLE死锁以及解锁语句
在Oracle数据库管理中,解锁资源和查询已执行的SQL语句是常见的操作需求,尤其是在处理数据库性能问题或恢复被锁定的用户时。根据给定的文件信息,我们可以深入探讨几个关键的知识点,包括如何解锁Oracle中的资源、...
oracle锁表和解锁语句示例。
内容包含: 1,oracle表锁查看 2,oracle数据解锁 3, 查看用户表空间使用情况 4,数据闪回,误删数据恢复语句
本文将详细介绍Oracle解锁方法的相关知识点,包括如何识别锁定的会话(session)、如何查看锁定的SQL语句以及如何解除锁定。 #### 二、识别锁定的会话 在Oracle数据库中,当一个会话被另一个会话锁定时,通常会遇到...
在IT领域,尤其是在数据库管理与优化中,存储过程的解锁是一项关键技能,尤其对于Oracle数据库而言。当存储过程被锁定时,可能会影响系统的性能和稳定性,因此掌握如何解锁存储过程至关重要。以下是对“oracle存储...
标题中的“Oracle数据库解锁工具”指的可能是一款能够简化这一过程的软件,它允许用户通过图形界面操作,而不是手动编写SQL语句。在描述中提到的开发环境是“xp下pb9.0.3 8836”,这表明该工具是在Windows XP操作...
在Oracle数据库管理中,解锁特定用户(如scott用户)并重置其密码是一个常见的操作。这通常由具有DBA权限的管理员执行。本文将详细介绍如何通过简单的三句SQL语句来实现这一过程。 ### 一、理解Oracle中的scott用户...
本篇文章将详细介绍如何在命令行环境下解锁Oracle数据库的用户,帮助DBA(数据库管理员)快速解决这类问题。 首先,Oracle用户锁定是常见的安全管理措施,防止未经授权的访问。例如,默认的`scott`用户在安装后通常...
在SQL命令行中,你可以执行以下ALTER USER语句来解锁用户: ```sql ALTER USER username ACCOUNT UNLOCK; ``` 将`username`替换为需要解锁的用户名称。例如,如果要解锁用户`scott`,命令将变为: ```sql ALTER ...
例如,如果需要解锁名为“scott”的用户,可以执行以下SQL语句: ```sql ALTER USER scott ACCOUNT UNLOCK; ``` 这条命令将会解锁“scott”用户,使其能够再次登录到数据库。 #### 3. 设置新密码 在某些情况下,...
Oracle 数据库管理系统是全球广泛使用的数据库系统之一,它提供了丰富的安全管理功能,包括用户账户的锁定和解锁机制。本文将深入探讨如何在 Oracle 中解锁和锁定用户,以及涉及到的相关安全性问题。 首先,当一个 ...
### Oracle解锁知识点详解 #### 一、Oracle锁定机制与解锁操作的重要性 在Oracle数据库系统中,锁定机制(Locking Mechanism)是确保数据一致性和事务处理完整性的重要手段。当多个用户试图同时修改相同的数据时,...
根据提供的文件信息,我们可以深入探讨Oracle数据库中的几个关键知识点:序列的创建、各种类型的约束以及用户的解锁操作。接下来,我们将详细地对这些知识点进行解析。 ### 一、Oracle中序列的创建 序列在Oracle...
本文将深入探讨Oracle中的锁机制,特别是如何锁表与解锁,以及相关的SQL查询语句,帮助数据库管理员和开发人员更好地理解和管理Oracle数据库的锁状态。 #### 锁的类型 在Oracle中,锁主要分为两种类型: 1. **TX...