有些进程被杀掉之后一直没有被回收
session需要释放它所使用的资源,包括锁,回滚段 等资源;如果session已经运行了很长时间,kill session 可能是一个非常消耗时间的过程
察看session目前使用的回滚段块的数目信息 SELECT USED_UBLK FROM V$TRANSACTIOn a ,v$session b where a.addr=b.taddr;
你可以看看要回滚的数量 1.判断是否在回滚 select * from V$TRANSACTIOn where bitand(flag,power(2,7))>0 flag字段值可以标识事务类型 select to_char( 7811, '0000000X' ), to_char( 7683, '0000000X') from dual;
TO_CHAR(7 TO_CHAR(7 --------- --------- 00001E83 00001E03 ^ ^ 0 indicates "normal user transaction" 8 indicates "rollback,most likely - means no more changes and you cannot commit"
2.回滚量:UBABLK字段 3.查看回滚时间 col td format a40 col es format 999,999 col totalwork format 999,999 col units format a10 SELECT decode(target_desc,NULL,decode(target,NULL,opname, concat(opname, concat (' - ',target))),decode(target,NULL,concat(opname, concat (' : ',target_desc)),concat(opname, concat (' : ',concat(target_desc,concat (' - ',target)))))) td,sofar,totalwork,units, start_time,TO_CHAR(elapsed_seconds,'99999990.00'), decode(sofar, 0, 0, round(elapsed_seconds*(totalwork-sofar)/sofar)) 剩下的时间
FROM v$session_longops
WHERE sid = &v_sid
AND serial# =&v_serial#
and sofar< totalWork D SOFAR TOTALWORK UNITS START_TIME TO_CHAR(ELAPSED_SECONDS,'99999 剩下的时间 ------------------------------------ ----- --------- -------- ----------- ------------------------------ ---------- Table Scan - SINO.ACC_POENTRYD 16099 16099 Blocks 2005-4-15 1 8.00 0查看剩下的时间 4.你使用了alter session kill一个死进程,可能当时只是把session标识了killed,而v$process还存在,你可以用下面方法解决 UNIX平台 SQL> SELECT spid FROM v$process WHERE NOT EXISTS ( SELECT 1 FROM v$session WHERE paddr = addr);
% kill WINDOWS: select p.spid "OS Thread", b.name "Name-User", s.osuser, s.program from v$process p, v$session s, v$bgprocess b where p.addr = s.paddr and p.addr = b.paddr UNION ALL select p.spid "OS Thread", s.username "Name-User", s.osuser, s.program from v$process p, v$session s where p.addr = s.paddr and s.username is not null; 使用orakill如 SQL> SELECT spid, osuser, s.program,sid FROM v$process p, v$session s WHERE p.addr=s.paddr; SPID OSUSER PROGRAM SID ------------------------ -------------------- --------------- ---------- 6484 lifeng.fang sqlplus.exe 11 SQL> host orakill charset 6484;
Kill of thread id 6484 in instance charset successfully signalled. 5.你可以在sqlnet.ora加dcd
|
相关推荐
2. 获取对应的进程ID通过`SELECT PADDR FROM V$SESSION WHERE STATUS = 'KILLED';` 3. 使用SQL语句`SELECT * FROM V$PROCESS WHERE PID = <进程ID>;`来查找对应的进程信息。 结论 找出对应的进程是数据库管理中...
- 终止进程后,再次检查`v$session`视图中是否有状态为“KILLED”的Session。 - 如果没有返回任何结果,则表示已成功清理了被Killed的Session。 #### 四、总结 本文详细介绍了如何处理Oracle数据库中已Killed的...
= 0) a, (SELECT p.addr FROM v$process p WHERE pid <> 1 MINUS SELECT s.paddr FROM v$session s WHERE s.status = 'KILLED') b WHERE a.addr = b.addr; ``` 2. **获取操作系统进程ID(spid)**:使用session的...
本文将详细介绍`V$SESSION`中的各个列代表的意思及其作用,并通过实例演示如何利用这些信息来诊断和优化数据库性能。 #### `V$SESSION`视图简介 `V$SESSION`视图是Oracle提供的一个动态性能视图,它包含了所有活跃...
V$SESSION 视图是 Oracle 提供的核心性能监视视图之一,它记录了所有与数据库实例建立连接的会话(session)信息,包括用户会话和后台进程,如 DBWR(数据库写进程)、LGWR(日志写进程)和归档进程等。通过 V$...
SELECT pro.spid FROM v$session ses, v$process pro WHERE ses.sid = 129 AND ses.paddr = pro.addr; ``` - 在Linux环境下,通过SPID找到对应的PID,并使用`kill -9 PID`强制杀死进程。 ```bash ps -ef | ...
如果某个进程的状态已经被标记为“killed”,但是它所占用的资源却没有得到及时释放,那么就需要进一步采取措施来清除这些残留的进程。这里涉及到了操作系统层面的操作。 1. **查询进程信息**: 需要先查询出该...
AND b.status = 'KILLED'; SELECT b.spid, a.osuser, b.program FROM v$session a, v$process b WHERE a.paddr = b.addr AND a.sid = 1149; -- 1149 是上面查询到的 sid ``` 在执行杀死进程的操作时,务必注意以下...
FROM v$process a, v$session b WHERE a.addr = b.paddr AND b.status = 'KILLED'; ``` 此查询用于检查状态为“KILLED”的会话信息,包括系统进程ID (SPID)、会话ID (SID) 和序列号等。 #### 二、触发器开关 ...
此时,可以通过查询`v$process`和`v$session`视图来获取会话的系统进程ID(SPID),然后由具有相应权限的系统管理员在操作系统层面终止该进程: ```sql SELECT a.spid, b.sid, b.serial#, b.username FROM v$...