`
tianshibaijia
  • 浏览: 1128192 次
文章分类
社区版块
存档分类
最新评论

oracle 锁问题的解决

 
阅读更多

可以用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
FROMv$session sn, v$lock m
WHERE(sn.SID=m.SIDANDm.request!=0)--存在锁请求,即被阻塞
OR( sn.SID=m.SID--不存在锁请求,但是锁定的对象被其他会话请求锁定
ANDm.request=0
ANDlmode!=4
AND(id1, id2)IN(
SELECTs.id1, s.id2
FROMv$lock s
WHERErequest!=0ANDs.id1=m.id1
ANDs.id2=m.id2)
)
ORDERBYid1, id2, m.request;


altersystemkillsession'sid,SERIAL#';

分享到:
评论

相关推荐

    oracle锁表解决

    ORACLE解除锁表,能够让被锁的表,强制解锁。

    Oracle锁表问题的简捷处理技巧

    在开发Oracle数据库时,我们常遇到频繁操作的Oracle数据表,会出现Oracle锁表。现在就针对这一问题,提下个人的解决Oracle锁表的技巧。

    锁表问题解决

    Oracle锁表常用sql语句: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess ...

    oracle锁表查询

    用oracle数据库的人都知道,某些表被锁住过后,一使用应用程序就报错。这个程序可以很好的解决这个问题。

    oracle常见的锁查询和处理

    检测并解决冲突 常见的锁查询和处理 当前系统中存在的锁争用: 引发争用的session信息: 引发争用的sql语句: 引发争用的数据对象 --查看被锁对象 --数据库中的表锁,查找某个表被哪个session锁定 --DML语句产生的...

    oracle由于对象被锁住无法编译处理

    oracle由于包、函数、过程被调用(锁住)无法编译处理

    oracle数据库锁表处理

    我上传的资源是处理oracle数据库锁表的,具体是解决锁表的方法。

    oracle锁表该如何解决

    查询锁表语句: select object_name,machine,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; 杀掉查到的进程: alter system ...

    Oracle日常维护故障定位故障排除

    17由于没有COMMIT,导致数据库表被锁住 18索引创建不合理,导致数据库查询特别慢 19 由于BUFFER参数设置不合理导致EXP失败 20由于EXP不向上兼容,语言不兼容,导致不同版本、不同字符集的数据库无法导入 21 由于创建...

    几个ORACLE问题解决办法

    Oracle用户被锁,PL/SQL工具里使用用动态sql,导出对象 SQL脚本,ORA-00059解决办法,oracle ORA-01502 错误,ORA-24550,ORA-02054,查看oracle表每条记录的创建时间,

    如何解决Oracle杀死死锁进程

    本文介绍了解决Oracle杀死死锁进程的方法。

    oracle执行update语句时卡住问题分析及解决办法

    这种只有update无法执行其他语句可以执行的其实是因为记录锁导致的,在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住。由于我的java程序...

    oracle用户解锁和密码过期文档

    oracle用户解锁和密码已过期问题解决

    oracle死锁故障分析和诊断解决

    oracle死锁故障分析和诊断解决,大家可以看看

    解决Oracle system或用户被锁定问题

    这篇文章是笔者在使用SQL/pl所遇到的一些问题,现在找到了解决办法,分享给大家。 希望你们遇到的时候可以用的到。 这篇文章算是保姆式教学了,每一步都写得很详细。一次性解决孩子忘记密码的重要问题。 文章中还有...

    oracle死锁原因解决办法

    在任何数据库中发生死锁都是不愉快的,即使是在一个特殊的情况下发生也是如此,它们会减小应用程序的接受程度(ACCEPTANCE),因此避免并正确解释死锁是非常重要的。

    关于Oracle数据库中的锁机制深入研究

    本文通过对Oracle数据库锁机制的研究,首先介绍了Oracle数据库锁的种类,并描述了实际应用中遇到的与锁相关的异常情况,特别对经常遇到的由于等待锁而使事务被挂起的问题进行了定位及解决,并对死锁这一比较严重的...

    Oracle用户被锁的原因及解决办法

    在登陆时被告知test用户被锁,怎么回事呢?下面小编给大家带来了Oracle用户被锁的原因及解决办法,一起看看吧

    kill system session(解决oracle死锁)

    kill system session(解决oracle死锁)

    oracle查询锁表与解锁情况提供解决方案

    如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待 以下的语句可以查询到谁锁了表: 代码如下: SELECT /*+ rule */ s.username, decode(l.type,’TM’,’TABLE LOCK’, ‘TX’,’ROW LOCK’, NULL) LOCK_...

Global site tag (gtag.js) - Google Analytics