oracle 锁问题的解决

转载 2013年12月02日 09:35:51
 

oracle 锁问题的解决

分类: Oracle Basic Knowledge 5414人阅读 评论(10) 收藏 举报

可以用Spotlight软件对数据库的运行状态进行监控。 

当出现session锁时,我们要及时进行处理. 

1. 查看哪些session锁: 
SQL语句:select 'alter system kill session '''||sid||','||serial#||''';' from v$session where sid in (select sid from v$lock where block = 1); 

SQL> select 'alter system kill session '''||sid||','||serial#||''';' from v$session where sid in (select sid from v$lock where block = 1); 
'ALTERSYSTEMKILLSESSION'''||SID||','||SERIAL#||''';' 
-------------------------------------------------------------------------------- 
alter system kill session '132,731'; 
alter system kill session '275,15205'; 
alter system kill session '308,206'; 
alter system kill session '407,3510'; 

2. 查看session锁. 
sql语句:select s.sid, q.sql_text from v$sqltext q, v$session s 
where q.address = s.sql_address 
and s.sid = &sid 
order by piece; 

SQL> select s.sid,q.sql_text from v$sqltext q, v$session s where q.address = s.sql_address and s.sid in (select sid from v$lock where block = 1) order by piece; 
        SID SQL_TEXT 
---------- ---------------------------------------------------------------- 
       77 UPDATE PROFILE_USER SET ID=1,COMPANY_ID=2,CUSTOMER_ID=3,NAMED   
       77 _INSURED_ID=4,LOGIN=5,ROLE_ID=6,PASSWORD=7,EMAIL=8,TIME_ZON 
       77 E=9 WHERE PROFILE_USER.ID=:34 
3 rows selected. 


3. kill锁的进程. 
SQL语句:alter system kill session '77,22198'; 

SQL> alter system kill session '391,48398'; 
System altered. 

4. 查看谁锁了谁。
select s1.username || [email='@']'@'[/email] || s1.machine
  || ' ( SID=' || s1.sid || ' )  is blocking '
  || s2.username || [email='@']'@'[/email] || s2.machine || ' ( SID=' || s2.sid || ' ) ' AS blocking_status
  from v$lock l1, v$session s1, v$lock l2, v$session s2
  where s1.sid=l1.sid and s2.sid=l2.sid
  and l1.BLOCK=1 and l2.request > 0
  and l1.id1 = l2.id1
  and l2.id2 = l2.id2 ;

注: 
> : 重定向输出,将文件的标准输出重新定向输出到文件,或将数据文件作为另一程序的标准输入内容。 
UNIX管道:将一文件的输出作为另一文件的输入. 

在执行SQL语句试:alter system kill session '391,48398'(sid为391); 应当注意对于sid在100以下的应当谨慎,可能该进程对应某个application,如对应某个事务,可以kill.

 

 

------------------------------------------------------csdn 网友的SQL-------------------------------

 

SELECT   sn.username, m.SID,sn.SERIAL#, m.TYPE,
         DECODE (m.lmode,
                 0'None',
                 1'Null',
                 2'Row Share',
                 3'Row Excl.',
                 4'Share',
                 5'S/Row Excl.',
                 6'Exclusive',
                 lmode, LTRIM (TO_CHAR (lmode, '990'))
                ) lmode,
         DECODE (m.request,
                 0'None',
                 1'Null',
                 2'Row Share',
                 3'Row Excl.',
                 4'Share',
                 5'S/Row Excl.',
                 6'Exclusive',
                 request, LTRIM (TO_CHAR (m.request, '990'))
                ) request,
         m.id1, m.id2
    FROM v$session sn, v$lock m
   WHERE (sn.SID = m.SID AND m.request != 0)         --存在锁请求,即被阻塞
      OR (    sn.SID = m.SID                         --不存在锁请求,但是锁定的对象被其他会话请求锁定
          AND m.request = 0
          AND lmode != 4
          AND (id1, id2) IN (
                        SELECT s.id1, s.id2
                          FROM v$lock s
                         WHERE request != 0 AND s.id1 = m.id1
                               AND s.id2 = m.id2)
         )
ORDER BY id1, id2, m.request;


alter system kill session 'sid,SERIAL#';

相关文章推荐

Oracle死锁问题分析解决

死锁发生的情况一般是资源存在环形依赖。Oracle上的死锁一般出现于“行级锁”的环形依赖情况下:有记录A、B,事务T1、T2,现在T1、T2并发执行update(或delete)A+B事务T1操作的顺...
  • kthq
  • kthq
  • 2013年01月05日 21:48
  • 11101

oracle数据库被锁问题解决

数据库被锁,一般知道是具体的哪个用户被锁,但我想知道的怎么查看哪个用户被锁; PL/SQL工具方式登录 1、以管理员身份运行登录,用select * from dba_users;语句查找,查看acc...
  • dyyshb
  • dyyshb
  • 2017年03月29日 09:42
  • 147

解决oracle存储过程死锁问题

最近在写存储过程的时候,因为要测试存储过程的运行情况,中途操作失误,导致存储过程死锁,写了半天的东西编译不了了,没办法只能重新创建一个存储过程,以前的那个删也删不掉,用也用不了,很难受,最后是重启了数...

关于oracle 锁机制锁问题的详细分析(处理锁定)以及死锁的解决方案

关于oracle 锁机制锁问题的详细分析(处理锁定),以及死锁的解决方案在任何多用户数据库应用中,最终必然会出现两个用户希望同时处理相同记录的情况.这种情况在逻辑上是不可能的,并且数据库必须确保其在物...

oracle 锁问题

  • 2012年07月07日 22:15
  • 4KB
  • 下载

ORACLE死锁问题

查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao...

安装oracle10g遇到问题及解决办法

  • 2015年04月10日 00:28
  • 333KB
  • 下载

ORACLE 死锁问题剖析

检查alert.log,发现有死锁发生: Thu Nov 18 09:32:59 2010 Global Enqueue Services Deadlock detected. More info...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle 锁问题的解决
举报原因:
原因补充:

(最多只允许输入30个字)