- 浏览: 402711 次
- 性别:
- 来自: 上海
最新评论
-
liuwenlong62555:
...
Linux防火墙的关闭和开启 -
baolong101010:
永久关闭:chkconfig --level 2345 ipt ...
Linux防火墙的关闭和开启 -
lijie1819:
3)查看防火墙状态chkconfig iptables --l ...
Linux防火墙的关闭和开启 -
Annah:
总结的很好,谢谢
Vector和ArrayList区别 -
celavi:
非常好的文章,谢谢分享!
ORACLE SQL TUNING
我们知道,在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为:
alter system kill session 'sid,serial#' ;
被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程.
我们发现当一个session被kill掉以后,该session的paddr被修改,如果有多个session被kill,那么多个session
的paddr都被更改为相同的进程地址:
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;SADDR SID SERIAL# PADDR USERNAME STATUS-------- ---------- ---------- -------- ------------------------------ --------542E0E6C 11 314 542B70E8 EYGLE INACTIVE542E5044 18 662 542B6D38 SYS ACTIVESQL> alter system kill session '11,314';System altered.SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;SADDR SID SERIAL# PADDR USERNAME STATUS-------- ---------- ---------- -------- ------------------------------ --------542E0E6C 11 314 542D6BD4 EYGLE KILLED542E5044 18 662 542B6D38 SYS ACTIVESQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;SADDR SID SERIAL# PADDR USERNAME STATUS-------- ---------- ---------- -------- ------------------------------ --------542E0E6C 11 314 542D6BD4 EYGLE KILLED542E2AA4 14 397 542B7498 EQSP INACTIVE542E5044 18 662 542B6D38 SYS ACTIVESQL> alter system kill session '14,397';System altered.SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;SADDR SID SERIAL# PADDR USERNAME STATUS-------- ---------- ---------- -------- ------------------------------ --------542E0E6C 11 314 542D6BD4 EYGLE KILLED542E2AA4 14 397 542D6BD4 EQSP KILLED542E5044 18 662 542B6D38 SYS ACTIVE |
在这种情况下,很多时候,资源是无法释放的,我们需要查询spid,在操作系统级来kill这些进程.
但是由于此时v$session.paddr已经改变,我们无法通过v$session和v$process关联来获得spid
那还可以怎么办呢?
我们来看一下下面的查询:
SQL> SELECT s.username,s.status, 2 x.ADDR,x.KSLLAPSC,x.KSLLAPSN,x.KSLLASPO,x.KSLLID1R,x.KSLLRTYP, 3 decode(bitand (x.ksuprflg,2),0,null,1) 4 FROM x$ksupr x,v$session s 5 WHERE s.paddr(+)=x.addr 6 and bitand(ksspaflg,1)!=0;USERNAME STATUS ADDR KSLLAPSC KSLLAPSN KSLLASPO KSLLID1R KS D------------------------------ -------- -------- ---------- ---------- ------------ ---------- -- - 542B44A8 0 0 0 ACTIVE 542B4858 1 14 24069 0 1 ACTIVE 542B4C08 26 16 15901 0 1 ACTIVE 542B4FB8 7 46 24083 0 1 ACTIVE 542B5368 12 15 24081 0 1 ACTIVE 542B5718 15 46 24083 0 1 ACTIVE 542B5AC8 79 4 15923 0 1 ACTIVE 542B5E78 50 16 24085 0 1 ACTIVE 542B6228 754 15 24081 0 1 ACTIVE 542B65D8 1 14 24069 0 1 ACTIVE 542B6988 2 30 14571 0 1USERNAME STATUS ADDR KSLLAPSC KSLLAPSN KSLLASPO KSLLID1R KS D------------------------------ -------- -------- ---------- ---------- ------------ ---------- -- -SYS ACTIVE 542B6D38 2 8 24071 0 542B70E8 1 15 24081 195 EV 542B7498 1 15 24081 195 EVSYS INACTIVE 542B7848 0 0 0SYS INACTIVE 542B7BF8 1 15 24081 195 EV16 rows selected.
|
我们注意,红字标出的部分就是被Kill掉的进程的进程地址.
简化一点,其实就是如下概念:
SQL> select p.addr from v$process p where pid <> 1 ADDR
|
Ok,现在我们获得了进程地址,就可以在v$process中找到spid,然后可以使用Kill或者orakill在系统级来杀掉这些进程.
实际上,我猜测:
当在Oracle中kill session以后, Oracle只是简单的把相关session的paddr 指向同一个虚拟地址.
此时v$process和v$session失去关联,进程就此中断.
然后Oracle就等待PMON去清除这些Session.所以通常等待一个被标记为Killed的Session退出需要花费很长的时间.
如果此时被Kill的process,重新尝试执行任务,那么马上会收到进程中断的提示,process退出,此时Oracle会立即启动PMON
来清除该session.这被作为一次异常中断处理.
发表评论
-
一次oracle无法open的解决
2009-01-16 13:59 3715这几天因为公司的复杂查询出现性能的问题(说实话本来就没设计好, ... -
Oracle10g 自动共享内存管理
2009-01-14 13:25 39285.6 自动共享内存管理 从Oracle 10g开始,Or ... -
如何改善Oracle的索引
2009-01-12 16:40 15771、速度因素 PARALLEL选项:当创建索引时,O ... -
Oracle latch竞争总结(一)
2009-01-07 11:38 2899在Oracle中,Latch的概念是非常重要的,v$l ... -
PX Deq: Execute Reply 案例说明
2009-01-03 09:55 30811 背景:Oracle 数据库在执行sql时,会自动的选择较 ... -
MySQL优化经验——第一讲
2008-12-28 19:41 1407今天突然想起自己 ... -
oracle中对workarea_size_policy和sort_area_size的总结
2008-12-19 12:06 8928在实际的工作中,想必很多人会对SORT_AREA_SIZE和s ... -
Oracle专用服务器与共享服务器的区别
2008-12-19 11:51 3388在建立Oracle数据库的时候,应该会在数据库建立助手向导上面 ... -
CBO学习笔记
2008-12-18 23:09 1457cost of b-tree access 这 ... -
Oracle高级SQL调优:CLUSTER_FACTOR案例研究
2008-12-18 22:27 1862大家在大型数据库生产系统的运维中可能会遇到这样一个问题,一条查 ... -
Oracle分析函数RANK()|ROW_NUMBER()|LAG()使用详解
2008-12-16 14:58 3118ROW_NUMBER()的使用方法: ROW_NUMB ... -
index和rowid的一点关系
2008-12-16 14:18 1511相信很多朋友在rowid和index之间都会有些疑问,今天在w ... -
关于MySQL的查询缓存收
2008-12-13 21:21 1207关于MySQL的查询缓存收 原理 QueryCache(下面简 ... -
oracle 被锁,解锁,阻塞语句
2008-12-12 18:35 2685//查询被锁的表 select A.s ... -
通过Oracle10g的FLASHBACK_TRANSACTION_QUERY指定事务的历史信息
2008-12-12 13:05 3187在数据库操作中,我们经常会遇到余下情况: 1.莫名其妙数据被D ... -
对于Oracle中DML使用UNDO的一些看法
2008-12-11 17:53 1252insert操作回滚段中只记录这些记录的ROWID updat ... -
oracle中x$ksppi和x$ksppcv详解
2008-12-09 17:22 3443SQL> desc x$ksppi 名称 ... -
ORA-600 [2103]错误及CF enqueue竞争
2008-12-09 17:21 1254昨天,客户的一套Oracle 10.2.0.3 RAC环境遇到 ... -
Oracle的redo 和undo的区别
2008-12-05 15:26 2624redo--> undo-->datafile i ... -
从 v$session 视图获取客户端 IP 地址
2008-11-18 19:42 2677缺省从 v$session 中不能直接获得客户端 IP ...
相关推荐
在Oracle数据库管理与维护过程中,“Oracle Kill Session”是一项非常重要的操作技巧。本文将从理论到实践多个层面深入探讨如何有效地执行“Oracle Kill Session”,帮助数据库管理员更好地理解和掌握这一技能。 ##...
### Oracle_Kill_Session_终极篇:深入解析与实践 #### 环境配置与背景 在探讨Oracle数据库中如何有效地管理会话(session)时,本文档聚焦于Oracle Database 10g Enterprise Edition Version 10.2.0.2.0的64位版本...
在Oracle数据库管理中,有时会遇到一些异常情况,比如某个Session长时间未响应或占用大量资源,这时可能需要管理员手动干预,通过`ALTER SYSTEM KILL SESSION 'SID,SERIAL#'`命令来强制终止这个Session。然而,在...
kill system session(解决oracle死锁)
在Oracle数据库管理中,处理死锁进程和释放状态为killed的session是一项关键技能,尤其对于维护数据库性能和稳定性至关重要。以下将详细阐述如何通过一系列步骤有效地关闭Oracle死锁进程,以及如何释放状态为killed...
在Oracle数据库管理中,有时需要快速地结束特定的Session,以应对各种情况,例如系统性能下降、长时间运行的事务或应用程序错误。本文将探讨如何高效地“杀掉”Oracle的Session,以及这种方法背后的原因和注意事项。...
Oracle 数据库解锁session方式
在Oracle数据库管理中,有时会遇到需要迅速终止某个或某些Session的情况。这通常发生在系统响应缓慢、需要紧急关闭特定进程时,或者是在执行`shutdown immediate`命令但发现由于某些Session的存在导致无法正常关闭...
Oracle疑难:session无法完全删除问题
### 清除Oracle中长时间持锁的Session #### 背景介绍 在Oracle数据库管理过程中,有时会遇到一些长时间占用资源的进程,这些进程可能会导致数据库性能下降甚至某些操作无法执行。通常情况下,如果一个session的状态...
在Oracle数据库管理过程中,有时需要重启Oracle服务或清除所有的会话(session),以解决某些特定问题或进行必要的维护工作。本文将详细介绍如何通过一系列命令来实现这一目标,并确保整个过程顺利无误。 #### 二、...
总结来说,安全快速地批量删除Oracle数据库外部会话涉及到对`ALTER SYSTEM KILL SESSION`、`ALTER SYSTEM DISCONNECT SESSION`命令的熟练运用,以及可能的与操作系统交互。在执行这些操作时,务必小心谨慎,避免对...
### Oracle Session与Lock解除 在Oracle数据库环境中,锁机制是一种重要的资源管理手段,它能够确保数据的一致性和并发性处理。锁(Lock)是数据库管理系统为了控制多个用户对同一数据资源的同时访问而采取的一种...
### Oracle Kill 进程详解 #### 一、概述 在Oracle数据库管理中,有时会遇到因为某些进程长时间运行导致系统响应变慢的情况。在这种情况下,管理员可能需要采取措施来终止这些进程,即“Kill”进程。本文将详细...
在 ORACLE 数据库中,当我们尝试 kill 一个进程时,可能会出现状态被置为 "KILLED" 但是锁定的资源长时间不释放的情况,这会导致错误提示 ORA-00030: User session ID does not exist 或 ORA-00031: session marked ...
Windows 环境中 Kill 掉 Oracle 线程 在 Windows 环境中,Kill 掉 Oracle 线程是非常重要的操作,因为 Oracle 线程占用了系统的大量资源,导致 Oracle 系统的效率变得很低。如果简单的关闭重启 Oracle 实例,势必...
`V$SESSION` 和 `V$SESSION_WAIT` 视图是 Oracle 数据库管理员日常工作中非常有用的工具。通过对这些视图的深入理解和合理利用,可以有效地监控和优化数据库的性能。无论是对于日常维护还是性能调优工作来说,掌握...
Oracle数据库在操作过程中,有时会遇到ORA-00031错误,这个错误提示是“会话标记为kill(session marked for kill)”。这通常发生在使用ALTER SYSTEM KILL SESSION命令企图终止某个会话时,但由于会话正在执行无法...
根据提供的文件信息,本文将详细解释“dbjob to create kill session”的相关知识点,包括Oracle数据库中的DBMS_JOB包、如何创建任务(job)以及如何利用这些任务来终止特定的会话(session)。 ### Oracle DBMS_...
在用Toad 使用sys as dba用户登录,kill oracle session时,发现有一些session 并杀不掉于是用命令行进行杀。 用于查找有所有session的语句: select sid,serial#,username,status from v$session where status...