杀Oracle进程

本文介绍如何使用Oracle数据库的V$SESSION和V$LOCK视图来查找锁定资源的用户及被锁定的进程。通过SQL查询展示如何获取正在等待锁资源的用户信息,并进一步找到导致锁冲突的用户进程。

alter system kill session '查出的sid,查出的serial#';

通過數據字典V$SESSION與V$LOCK來瞭解正在等待鎖資源的用戶
select a.username,a.sid,a.serial#,b.id1 from v$session a ,v$lock b
         Where a.lockwait = b.kaddr;

瞭解鎖住其他用戶的用戶進程,方法如下:
select a.username,a.sid,a.serial#,b.id1 from v$session a,v$lock b
         Where b.id1 in
                 (select distinct e.id1 from v$session d,v$lock e where d.lockwait = e.kaddr)
                 And a.sid = b.sid and b.request =0;

Oracle中,有多种方式进行进程查询和进程。 ### 进程查询 - 可通过`ps -ef`命令结合`grep`来查询特定进程,如查询`reco`进程: ```bash ps -ef | grep reco ``` 示例输出如下: ```plaintext oracle 15972 1 0 14:20 ? 00:00:00 ora_reco_p19c oracle 38691 26771 0 15:15 pts/3 00:00:00 grep --color=auto reco ``` 这能帮助找到特定进程进程ID(PID),便于后续操作[^1]。 - 还可使用SQL语句在数据库内部查询进程信息。例如,通过以下SQL语句查看造成死锁的用户和进程: ```sql select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id; ``` 该语句能找出导致死锁的用户和相关进程信息。还有另一个版本的查询语句: ```sql select ipad(' ',decode(l.xidusn,0,3,0)) || l.oracle_username User_name, o.owner, o.object_name, o.object_type, s.sid, s.serial#, s.inst_id from gv$locked_object l, dba_objects o, gv$session s where l.object_id = o.boject_id and l.session_id = s.sid order by o.object_id, xidusn desc; ``` 此语句能查询到更详细的死锁进程信息,包括用户名、对象名、对象类型、会话ID等[^2][^3]。 ### 进程 - 对于操作系统层面的进程,可使用`kill -9`命令强制进程。例如,要死`reco`进程: ```bash kill -9 15972 ``` 之后再次使用`ps -ef | grep reco`命令查看,会发现该进程会被重启,这表明某些Oracle进程具有自动重启机制,即使被强制死也会重新启动,且数据库实例通常不会因此发生故障。 - 在数据库层面,若要死死锁的进程,可使用`alter system kill session`语句。语法如下: ```sql alter system kill session 'sid , serial#'; ``` 这里的`sid`和`serial#`可通过上述查询死锁进程的SQL语句获取,使用该语句能在数据库内部死造成死锁的进程[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值