oracle alter system kill,ALTER SYSTEM KILL SESSION详解
一个用户进程偶尔会挂起或占用过多资源而拒绝其它会话。如果DBA依然能够访问数据库,她通常可以发出以下查询:
select s.username, s.osuser,
s.sid, s.serial#, p.spidfrom
v$session s,v$process p
where s.paddr = p.addrand
s.username is not null;
select 'alter system kill session
',''''||trim(t2.sid)||','||trim(t2.serial#)||''';'
from v$locked_object t1,v$session t2 where t1.session_id=t2.sid
order by t2.logon_time;
这个查询将返回数据库用户名、操作系统用户名、会话 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,那么很可能会导致数据库崩溃。新手永远不要这样做。
Orakill的使用方法如下:Dos提示符下:>orakill sid
thread说明: sid
Oracle的Sid号threadOracle的线程id号
在Sql*plus工具里面可以查询到Oracle的线程号sql:>Select p.spid THREADID, s.osuser,
s.programFrom
v$process p, v$session sWhere p.addr = s.paddr
结果如下:
THREADIDOSUSERPROGRAM
--------- -----------------------
-----------------------------
169SYSTEMORACLE.EXE
215SYSTEMORACLE.EXE
280SYSTEMORACLE.EXE
267SYSTEMORACLE.EXE
287SYSTEMORACLE.EXE
288SYSTEMORACLE.EXE
271SYSTEMORACLE.EXE282SYSTEMORACLE.EXE239PROD_NTdjonesSVRMGRL.EXE
281SSMITH-PCssmithSQLPLUSW.EXE
12 rows selected.
需要注意的是,如果你Kill掉的是Oracle的核心后台线程(DBWR, LGWR, SMON or
PMON),将导致Oracle实例关闭。检查Oracle的核心后台线程的方法如下:sql:>Select
vb.name NOME, vp.programe PROCESSNAME, vp.spid THREADID, vs,sid
SID
From v$session vs, v$process vp, v$bgprocess vb
Where vb.addr <> ‘00’ and
vb.paddr = vp.addr and
vp.addr = vs.paddr
查询结果如下:
NOMEPROCESSNAMETHREADIDSID
----- ----------------------------------- --------- ------
PMONORACLE.EXE1691
DBW0ORACLE.EXE2152
LGWRORACLE.EXE2803
CKPTORACLE.EXE2674
SMONORACLE.EXE2875
RECOORACLE.EXE2886
SNP0ORACLE.EXE2717
SNP1ORACLE.EXE2828
8 rows selected.
window xp + oracle 9.2.0.1
================
orakill的用法
================SQL> SELECT spid, osuser,
s.program,sidFROM
v$process p, v$session sWHERE
p.addr=s.paddr;
SPIDOSUSERPROGRAMSID
------------------------ -------------------- ---------------
----------
6928SYSTEMORACLE.EXE1
5272SYSTEMORACLE.EXE2
7008SYSTEMORACLE.EXE3
6588SYSTEMORACLE.EXE4
6780SYSTEMORACLE.EXE5
6128SYSTEMORACLE.EXE6
6740SYSTEMORACLE.EXE7
6684SYSTEMORACLE.EXE8
7092SYSTEMORACLE.EXE9
6272SYSTEMORACLE.EXE10
4760lifeng.fangsqlplus.exe12
SPIDOSUSERPROGRAMSID
------------------------ -------------------- ---------------
----------
6484lifeng.fangsqlplus.exe11
4284
语法:orakill 实例名 spid(在win上是线程号)
SQL> host orakill charset 6484;
Kill of thread id 6484 in instance charset successfully
signalled.
spid是os进程ID
pid是Oracle process ID
根据盖国强的猜测
当在Oracle中kill session以后, Oracle只是简单的把相关session的paddr
指向同一个虚拟地址.此时v$process和v$session失去关联,进程就此中断.然后Oracle就等待PMON去清除这些Session.所
以通常等待一个被标记为Killed的Session退出需要花费很长的时间.如果此时被Kill的process,重新尝试执行任务,那么马上会收到进
程中断的提示,process退出,此时Oracle会立即启动PMON来清除该session.这被作为一次异常中断处理.
具体的实验例子读者可以参考
http://www.eygle.com/faq/Kill_Session.htm
当然如果该用户已经没有使用,例如在决定删除该用户的时候,PMON很可能不回自动的去清理这些session则需要手工触发PMON执行
首先确认PMON进程是whoSQL> select pid,spid
from v$process p,v$bgprocess b
where b.paddr=p.addr
and name='PMON';
PID SPID
---------- ------------
2 3608
SQL> oradebug wakeup 2已处理的语句
oracle alter system kill,ALTER SYSTEM KILL SESSION详解相关推荐
- php mysql修改命令_PHP编程:mysql alter table命令修改表结构实例详解
<PHP编程:mysql alter table命令修改表结构实例详解>要点: 本文介绍了PHP编程:mysql alter table命令修改表结构实例详解,希望对您有用.如果有疑问,可 ...
- (116)System Verilog类合成(类包含关系)详解
(116)System Verilog类合成(类包含关系)详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类合成(类包含关系)详解 ...
- Oracle Golden Gate 11.2.0.3安装详解
Oracle Golden Gate 11.2.0.3安装详解 环境 环境变量 安装OGG软件 开始OGG配置 配置源端数据库 源端OGG配置 配置目标端数据库 目标端OGG配置 开启同步 环境 ce ...
- oracle如何对数据库进行备份,对Oracle数据库进行备份的两种方法详解
首页 > 演讲稿 > 自我介绍演讲稿 > 对Oracle数据库进行备份的两种方法详解 对Oracle数据库进行备份的两种方法详解 时间:2019-05-05 来源:自我介绍演讲稿 ...
- Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解
Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解 关于expdp和impdp 使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户 ...
- JavaWeb 入门篇 (5) Cookie 和 Session 详解
Cookie 和 Session 详解 一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过 ...
- oracle中的exists 和 not exists 用法详解
from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...
- java 登录session_JavaWeb Session详解
记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + ## Session的由来 上一篇博文介绍了Cookie的相关知识,其中介绍了必须采用一种机制来唯一标识一个用户,同时记录该用户的状态. ...
- cookie 和 session 详解
cookie 和 session 详解 文章目录 cookie 和 session 详解 一.Cookie机制 1.Cookie引入 2.什么是Cookie 3.Cookie的不可跨域名性 4. Un ...
- cookie与session详解、url地址重写
cookie与session详解.url地址重写:https://www.cnblogs.com/l199616j/p/11195667.html
最新文章
- python三十七:xml模块
- hadoop data join
- Qt网络编程——使用OpenCV与TCP搭建图像处理服务器
- c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引
- Taro+react开发(21)--注意参数格式
- Matlab与C/C++混合编程调用OpenCV
- php使用接口实现工厂设计模式
- 策略模式/Strategy
- windows2003路由和远程访问 试图连接到数据存储时出错
- 2017省夏令营Day7
- 蓝桥杯2018年第九届C/C++省赛B组第七题-螺旋折线
- Linux 怎么shell脚本定时备份mysql数据库
- 启动 Tomcat 遇到 Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 问题,已解决
- 创意CSS写字本选择器
- 期货开户趋势的本质是惯性
- 工厂模式 五种写法总结
- 讯飞智能录音笔SR502:支持OCR识别功能的职场礼物
- python第十四课 面向对象(三)
- cos相似度算法 余弦距离计算
- Python程序来计算球体的体积和面积