oracle锁表该如何解决
废话不多说上语句:
查询锁表语句:
selectobject_name,machine,s.sid,s.serial# fromv$locked_objectl,dba_objectso,v$sessions wherel.object_id=o.object_idandl.session_id=s.sid;
杀掉查到的进程:
altersystemkillsession'sid,serial#'; 例如: altersystemkillsession'20,182';
如果杀不掉可以加个immediate 立即杀掉试试;
altersystemkillsession'20,182'immediate;
如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
selectspid,osuser,s.program fromv$sessions,v$processp wheres.paddr=p.addrands.sid=20--24为上面的sid
windows:
orakillsidspid--sid数据库实例名spid线程id
linux:
KILL-9SPID--查到的线程id
杀了这个进程感觉舒服多了,如果是我们自己玩没什么,可要是在生产环境你就要小心了所以我们需要注意一下了
--(1)锁表查询的代码有以下的形式: selectcount(*)fromv$locked_object; select*fromv$locked_object; --(2)查看哪个表被锁 selectb.owner,b.object_name,a.session_id,a.locked_modefromv$locked_objecta,dba_objectsbwhereb.object_id=a.object_id; --(3)查看是哪个session引起的 selectb.username,b.sid,b.serial#,logon_timefromv$locked_objecta,v$sessionbwherea.session_id=b.sidorderbyb.logon_time; --(4)查看是哪个sql引起的 selectb.username,b.sid,b.serial#,c.*fromv$locked_objecta,v$sessionb,v$sqlcwherea.session_id=b.sid andb.SQL_ID=c.sql_idandc.sql_id='' orderbyb.logon_time;
至此这篇就结束了。
总结
到此这篇关于oracle锁表如何解决的文章就介绍到这了,更多相关oracle锁表内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!