用OraKill结束失控的Oracle进程
一个用户进程偶尔会挂起或占用过多资源而拒绝其它会话。如果 DBA 依然能够访问数据库,她通常可以发出以下查询:
select s.username, s.osuser, s.sid, s.serial#, p.spid
from v$session s,v$process p
where s.paddr = p.addr
and s.username is not null;
这个查询将返回数据库用户名、操作系统用户名、会话 ID,序列号和系统进程 ID(SPID)。然后,DBA 用户就可以发出以下命令(前面的查询返回的使用 SID 和SERIAL# 信息):
ALTER SYSTEM KILL SESSION 'sid,serial#';
ALTER SYSTEM KILL SESSION '9,203';
使用这条语句有两个问题。第一,分配给这个进程的任何锁或资源在会话完全超时之前不会被释放。第二,查询和 kill 命令需要能够访问数据库。如果一个进行失去控制,那么数据库访问可能会出现问题。
在一个 UNIX 数据库中,下一步是 ps 命令输出的 UNIX 提示中定位进程(同样是查找 OSUSER 和 SPID 等 ID)然后使用 kill -9 spid 结束失控的后台进程。然而,在 Windows 中,只有一个进程 ORACLE.EXE,而且用户连接是在 Windows 线程中处理的,而不在进程中处理的。如果使用 Windows 任务管理器结束 Oracle 线程,就有可能影响所有用户和后台线程,并导致数据库崩溃。
出于这些原因,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
orakill ORCL 2760
"Kill of thread id 2760 in instance ORCL successfully signalled[sic]."
应该只有在不能访问数据库来执行ALTER SYSTEM KILL SESSION 的情况才使用orakill。如果意外结束了一个必要的后台进程,比如 PMON,那么很可能会导致数据库崩溃。新手永远不要这样做。
分享到:
相关推荐
解决 Oracle 杀死死锁进程 Oracle 杀死死锁进程是数据库管理员经常遇到的问题,本文将介绍解决 Oracle 杀死死锁进程的方法。 在 Oracle 中,死锁是指两个或多个会话在等待对方释放资源,从而导致互相阻塞的情况。...
在这个解决方案中,我们将使用 ORACLE 提供的视图和系统表来查找锁定的对象,并杀死对应的进程以释放锁定的资源。下面是详细的处理步骤: 1. 查看哪些对象被锁 首先,我们需要查看哪些对象被锁定。我们可以使用...
Orakill是一个专门为Oracle数据库设计的工具,用于在Windows操作系统环境下强制结束特定的用户进程或线程,而不必关闭整个Oracle实例。这个工具对于解决由于某个用户进程长时间占用资源而导致Oracle系统性能下降的...
Orakill 的使用方法如下:在 Dos 提示符下,输入“orakill sid thread”,其中 sid 是 Oracle 的 Sid 号,thread 是 Oracle 的线程 id 号。在 Sql*plus 工具里面可以查询到 Oracle 的线程号。 例如,可以使用以下 ...
- **在Windows环境中**,可以使用Oracle提供的`orakill`工具来终止进程: ```bash orakill <实例名> ``` 其中`<实例名>`是指Oracle数据库实例的名称,而`<SPID>`则是需要终止的进程ID。 #### 4. 总结 本文...
3. 使用`kill`命令(Unix)或`orakill`命令(Windows)结束进程。 4. 检查`v$session`视图确认Session是否已被移除。 对于批量结束所有Oracle用户的进程,Windows环境可以执行SQL查询生成批处理文件执行,而在Unix...
2. 操作系统级别 kill:在 Windows 平台中,可以使用 `orakill ORACLE_SID ospid` 命令;在 Linux/Unix 平台中,可以使用 `orakill ORACLE_SID ospid` 或 `kill -9 ospid` 命令。 其中,SID 和 SERIAL# 是锁定进程...
在Linux中,可以使用`kill -9 SPID`命令,而在Windows中,可以使用`orakill ORACLE_SID spid`。首先,你需要查询`gv$session`和`gv$process`视图获取对应进程的SPID,确保不会误杀,然后执行相应的操作系统命令。 ...
- **操作系统级别的KILL**:在某些情况下,如果数据库级别的KILL命令响应较慢,可以考虑在操作系统层面使用`orakill`(Windows)或`kill -9`(UNIX/Linux)直接终止进程。 - **调整Job Queue Processes**:为了...
9. **orakill.exe**:Oracle线程删除工具,用于终止特定的Oracle线程或进程。这对于处理挂起的数据库操作非常有用。 10. **orapwd.exe**:Oracle密码文件创建工具,用于创建包含密码信息的文件,这对于管理数据库的...
- 在Windows环境下,可以直接使用Oracle提供的`orakill`工具来杀死目标Session。 ```cmd orakill 目标SID 目标SPID ``` - 或者创建一个批处理文件`kill.bat`,自动执行上述操作。 ```batch @echo off set ...
要检查Oracle数据库中的锁状态,可以使用以下查询语句: ```sql SELECT /*+RULE*/ s.username, DECODE(l.type, 'TM', 'TABLELOCK', 'TX', 'ROWLOCK', NULL) LOCK_LEVEL, o.owner, o.object_name, o.object_type, ...
- Oracle提供了一个名为`orakill`的工具来帮助在Windows系统中杀死特定的线程。使用方法如下: ```bash orakill <sid> ``` - `<sid>`代表要杀死的进程所属的实例名。 - `<thread>`是要杀掉的线程号,即第三步...
在Oracle数据库管理系统中,"查询Oracle锁"是一项关键任务,用于诊断和解决并发操作中的阻塞问题。当多个事务尝试同时访问同一资源时,可能会发生锁冲突,导致某些事务等待其他事务完成。了解如何查询并分析这些锁...
如果需要,还可以在操作系统层面使用`KILL`命令(如`KILL -9 SPID`或`ORAKILL SID SPID`)终止进程。 然而,简单地杀死进程并不总是最佳解决方案,因为这可能导致未提交的数据丢失或者需要进行恢复操作。因此,理解...
- 需要使用Oracle的`SYS`用户登录数据库以访问`dba_jobs_running`, `v$process`, 和 `v$session`等视图。 - 当遇到某个会话持续处于活跃状态导致CPU使用率高的情况时,直接`KILL SESSION`可能无法解决问题。此时...
32位oracle11.2.0.1 BIN文件夹,数据库管理员版,包含sqlplus,imp,exp,impdp,expdp等完整工具。exe列表:adrci、agtctl、amdu、asmtool、asmtoolg、CreatDep、csscan、dbv、dg4odbc、dg4pwd、dgmgrl、diskmon、...
在Windows平台上,可以使用Oracle提供的工具`orakill`来杀死特定的线程(实际上是Oracle进程)。而在Linux/Unix系统中,可以直接使用`kill`命令来终止数据库进程对应的OS进程。 #### 四、总结 在Oracle数据库中,...
4. 在操作系统级别使用`kill`或`orakill`命令结束进程。 最后,记住定期监控数据库的锁定情况,并尽可能避免长时间的锁定,以确保数据库的高效运行。如果你在解决过程中遇到任何问题,欢迎提问,我们将尽力提供帮助...