oracle 强制解锁

问题描述:
当执行:delete from table1 时,由于数据大速度很慢,想停止。这个时候如果强制执行:truncate table table1,
会出现错误提示:
[1]: (Error): ORA-00054: resource busy and acquire with NOWAIT specified

解决方法:
1,如果不着急的话,就等待,过一段时间,会自动解锁
2,kill the session :

----查找某用户下的所有锁
selecta.*,b.object_name
fromv$locked_objecta,all_objectsb,v$sessionc
wherea.OBJECT_ID=b.object_id
ANDa.SESSION_ID=c.SID
andc.USERNAME='abc'




例:
SQL>selectusername,status,sid,serial#fromv$sessionwhereusernameisnotnull;

USERNAMESTATUSSIDSERIAL#
--------------------------------------------------------
SYSACTIVE1138493

SQL>/

USERNAMESTATUSSIDSERIAL#
--------------------------------------------------------
TEMPINACTIVE938038
SYSACTIVE1138493

SQL>altersystemkillsession'9,38038';

系统已更改。

SQL>selectusername,status,sid,serial#fromv$sessionwhereusernameisnotnull;

USERNAMESTATUSSIDSERIAL#
--------------------------------------------------------
TEMPKILLED938038
SYSACTIVE1138493

SQL>

这个解决方案是从网上找的,但是当执行的时候,提示[1]: (Error): ORA-00054: resource busy and acquire with NOWAIT specified。 我是在SQL navigator 中执行的。。。。。。

3,如果使用的是toad :

用sys用户进入,到DBA-->sessionbrowser-->lock下面去看,直接点删除就行了

select a.*,b.object_name, C.SID, C.SERIAL#
from v$locked_object a ,all_objects b ,v$session c
where a.OBJECT_ID=b.object_id AND a.SESSION_ID=c.SID
and c.USERNAME='XINHUA'

alter system kill session '968,39634'; --其中968 和 39643 分别为C.SID 和 C.SERIAL# 的值

你可能感兴趣的:(oracle)