发现谁锁定了对象,并kill掉

1,首先select * from dba_ddl_locks 可以看到都是那些会话锁定了你的对象
2,使用pl/sql developer:tools=>sessions 列出所有会话,仔细查看可疑会话即可

另:select * from v$lock也可以提供一定的信息。

v$session.paddr=v$process.addr
v$session.saddr=v$transaction.sess_addr
从v$process返回的spid列即是你要找的os process id.

Question:
windows下如何kill掉某个进程?
操作方法:单击“开始”/程序/附件/命令提示符,输入命令:ntsd -c q -p PID(把最后那个PID,改成你要终止的进程的PID)。在进程列表中你可以查到某个进程的PID,例如我们要关闭图1中的Explorer.exe进程,

输入:ntsd -c q -p 408即可。

Oracle 在Oracle Home/bin 目录下提供了一个 orakill.exe 命令,这个命令的参数与ALTER SYSTEM KILL SESSION 相同,但是不要求数据库连接。要定位一个特定的线程,需

要寻找一个能够显示属于一个进程的所有线程的程序。Windows 任务管理器只能显示线程数和进程。你需要从微软的资源工具包中寻找一个用于 Windows 2000 和 NT 的工具程序,

比如免费的QuickSlice,或者Qslice.exe(该工具是基于 Windows 的),或者PStat(Pstat.exe 是一个命令行工具)。简单地在 orakill 命令后输入线程 ID(以十进制表示)和 SID 即可:

orakill <sid> <spid>
orakill ORCL 2760

"Kill of thread id 2760 in instance ORCL successfully signalled[sic]."
这儿的<sid>是数据库实例名如:orcl,ora10g;
<spid> 可以用下面语句中返回的spid:

select spid, osuser, s.program from v$process p, v$session s where p.addr=s.paddr

应该只有在不能访问数据库来执行ALTER SYSTEM KILL SESSION 的情况才使用orakill。如果意外结束了一个必要的后台进程,比如 PMON,那么很可能会导致数据库崩溃。新手永远不要这样做。

posted @ 2007-10-22 09:33  dbblog  阅读(222)  评论(0编辑  收藏  举报