当前位置:首页 > 开发 > 数据库 > 正文

Oracle 解锁语句

发表于: 2015-01-30   作者:chenyi84   来源:转载   浏览次数:
摘要: --   查看表被锁select b.owner,b.object_name,a.session_id,a.locked_modefrom v$locked_object a,dba_objects bwhere b.object_id = a.object_id--查看是哪个session引起的select b.username,b.sid,b.serial#,logon_t

--   查看表被锁
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 解锁语句

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
最近在工作中同事们经常遇到锁表、误删表和程序覆盖的情况,现总结下遇到这三种情况的解决方案: 1.
Oracle 10g scott 解锁 http://user.qzone.qq.com/329102171/blog/1230172209 新装完Oracle10g后,
oracle数据库的权限系统分为系统权限与对象权限。系统权限( database system privilege )可以让用户
oracle数据库的权限系统分为系统权限与对象权限。系统权限( database system privilege )可以让用户
Oracle创建EM的时候报错: 配置: Failed to unlock mgmt_view account 2013-4-29 22:47:03 oracle.s
一:用户之间表的访问: 例如:linuxidc用户想访问system用户中的users表,命令如下 : grant selec
创建表空间 CREATE TABLESPACE mydb DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\mydb ' SIZE
基于oracle数据库中自带的scott表emp 一、最基本用法 1、列出表中的所有字段及每个字段对应的值 inse
Oracle中的DDL语句 一、表格(table) 1.创建 创建语句创建 create table t_1( id int primary key, n
供应商评价管理系统中要对供应商的品质等级进行划分,规则如下: 根据供应商的综合得出其品质等级。
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号