- 浏览: 766942 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (386)
- Linux (36)
- Tomcat (6)
- windows (8)
- Apache (10)
- Java (25)
- jquery (7)
- Jquery 插件 (3)
- Oracle (5)
- Oracle SQL (68)
- Spring (15)
- 开发工具 (6)
- Struts (20)
- js (14)
- Project Code (2)
- Project Code Tomcat (1)
- libset (1)
- JSP (8)
- arithmetic (2)
- 浏览器 (1)
- extjs (3)
- 学习网站 (5)
- 生活情感 (0)
- 电话号码算法 (3)
- 快捷键 (1)
- 转载 (1)
- Dos命令 (2)
- services (1)
- Resources (1)
- 行业积累 (3)
- 项目积累 (3)
- Web (3)
- 文档 (1)
- JavaEE (2)
- JSF (3)
- http (3)
- JS窗口 (1)
- Html (4)
- Flex (1)
- 资讯 (2)
- 项目规范 (1)
- Struts s:property textarea中默认值用 (1)
- Quartz 2.0.2 (12)
- 1天有多少毫秒 (1)
- 专题 (1)
- intellij idea 10 CD-KEY (1)
- restlet (4)
- Mail (1)
- Excel (3)
- Menu (1)
- Big Data技术综述 (1)
- Quart 1 (1)
- nosql (1)
- linux远程 (1)
- jdk (5)
- wind7 (1)
- 虚拟人 (0)
- 虚拟机 (1)
- 终端 (1)
- Ubuntu (16)
- Myeclipse (2)
- Wmware (1)
- eclipse (2)
- css (2)
- csv (1)
- 开源 (1)
- plsql (2)
- cassandra (4)
- maven (1)
- hadoop (2)
- mysql (1)
- spring security (1)
- tools (1)
- jdbc (2)
- exception (2)
- 硬盘数据备份 (1)
- dwr (1)
- svn (1)
- PowerDesigner15使用时的十五个问题 (1)
- tomcat 项目发部路径 (1)
- js 暂停执行 (1)
- jquery jqgrid 格式化数据显示 (1)
- js 代码模板 (1)
- strutss2 直接跳转到jsp页面 (1)
- servlet (1)
- jdbc spring (1)
- js学习网站 (1)
- 自学考试 (2)
- hibernate (2)
- eos (1)
- c (4)
- 黑马 (2)
- 大数据 (2)
- 实战云大数据案例分享 (0)
- Spark (2)
- Flink (1)
最新评论
-
coosummer:
推荐使用http://buttoncssgenerator.c ...
jquery button 漂亮 -
thinktothings:
Array_06 写道你好,我是一名刚毕业学生,我以后就是做J ...
如何转型架构师 -
thinktothings:
软考,考有职业资格证,有系统的知识体系学习
如何转型架构师 -
Array_06:
你好,我是一名刚毕业学生,我以后就是做Java的架构师,那请问 ...
如何转型架构师 -
beykery:
你这也太复杂了。。。。jsf2不应该是这样的。。。。
JSF2.0的一个简单Demo
原文:
http://blog.csdn.net/hhb200766/article/details/6695876
1:首先,我们需要在Oracle中找到锁住的对象:
select xidusn, object_id, session_id, locked_mode from v$locked_object; |
2:得到session_id后,再根据session_id找到v$session对应的sid号和serial#:
select username,sid,serial# from v$session where sid=session_id; |
3:用oracle的slq kill掉相关的session sql语句:
alter system kill session 'sid,serial#'; |
4:如果不能kill掉,报ora-00031错:说明之前有kill过,这样找到这个进程spid slq语句:
select pro.spid from v$session ses, v$process pro where ses.sid=129 and ses.paddr=pro.addr; |
5:根据这个spid对应linux下的进程pid
linux命令:
ps -ef | grep 'ora' (找到所有ora开头的进程) kill -9 (pid) |
下面主要介绍如果这个进程是Killed状态的时候该怎么处理:
首先介绍三个视图:v$process是ORACLE处理的进程,v$session是ORACLE处理的会话,v$sqlarea是Oracle处理的SQL语句存放区就是共享池那东西。三个表联合查一下。
SELECT P.pid,S.sid,s.serial#,P.spid,S.username,S.osuser, P.serial#,P.terminal,P.program,P.background,S.status, A.sql_text FROM v$process P, v$session S,v$sqlarea A WHERE P.addr = s.paddr AND S.sql_address = a.address (+) order by P.spid; |
这里面查出来的就是Oracle实时正在处理的SQL语句过程等。当然还包含基本的(PMON)(DBW0)(LGWR)等后台进程。有时候大家在编译时,会发生怎么都编译不过去的现象,其实过程是好着的.这就是Oracle出现了死锁。死锁了肯定是锁最后一个会话,那就是你编译的那个.这时候大家有可以要重新SHUTDOWN IMMEDIATE才行解决问题.其实运行上面的语句再配合下面的就可以了。
在Oracle数据库中,可以通过kill session的方式来终止一个进程,alter system kill session 'sid,serial#' ;这里sid,serial#就是上面的v$session.sid,v$session.serial#这二值,多运行几次上面的SELECT语句就可以查出你被锁住的那个过程.其它不明的不能通杀了.这里关键就是要查出你要杀的v$session.sid,v$session.serial#二个值.然后做alter system kill session 'sid,serial#' ;做完以后.你的客户端一般就直接提示SESSION KILLED.但也有不提示没反映.再运行SELECT语句,发现v$session.status为KILLED.再等待还是一样.
从书上查知被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程.Oracle就等待PMON去清除这些Session.通常等待一个被标记为Killed的Session退出需要花费很长的时间.但我从来都没等及过.这不又白杀了.没关系,用必杀招,在LINUX下杀.你用SELECT查出来的时候还有一个v$process.spid列.在LIUNX的$下运行TOP.[/img]你知发现了原来这一列的值,就是TOP下的PID值.那这样好办了.直接在LIUNX的$下 KILL -9 v$process.spid 这个值是要你在SELECT下要记录下的.好了.这就必杀了.过程编译不过去,肯定是有会话地运行.
SELECT P.pid,S.sid,s.serial#,P.spid,S.username,S.osuser, P.serial#,P.terminal,P.program,P.background,S.status,A.sql_text FROM v$process P, v$session S,v$sqlarea A WHERE P.addr = s.paddr AND S.sql_address = a.address (+) order by P.spid;和LIUNX的下的TOP你们会发现很多东西的. 比如说接口程序是很占CPU的还有查到实时会话. |
ps和top都可以看系统中正在运行的进程
ps命令提供了当前运行进程的快照。
使用带有 -ef 选项的 ps ,返回系统中所有用户的所有进程的完整列表。如果您将此 ps 命令的结果传送到 grep 中,则该结果更易于查看。例如:
$ ps -ef | grep oracle |
这条命令会显示:
UID PID PPID C STIME TTY TIME CMD oracle 1633 1 0 13:58 ?00:00:00 ora_pmon_ora1 oracle 1635 1 0 13:58 ?00:00:00 ora_dbw0_ora1 oracle 1637 1 0 13:58 ?00:00:01 ora_lgwr_ora1 oracle 1639 1 0 13:58 ?00:00:02 ora_ckpt_ora1 |
下面是ps的选项
-A:列出所有的进程。
-l:显示长列表。
-m:显示内存信息。
-w:显示加宽可以显示较多的信息。
-e:显示所有进程。
a:显示终端上的所有进程,包括其它用户的进程。
-au:显示较详细的信息。
-aux:显示所有包含其它使用者的进程。
注:如果需要即时查看最活跃的进程,可以使用"top" 。
先查看哪些表被锁住了:
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;
1.查哪个过程被锁:
查V$DB_OBJECT_CACHE视图:
SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND CLOCKS!='0';
2. 查是哪一个SID,通过SID可知道是哪个SESSION:
查V$ACCESS视图:
SELECT * FROM V$ACCESS WHERE OWNER='过程的所属用户' AND NAME='刚才查到的过程名';
3. 查出SID和SERIAL#:
查V$SESSION视图:
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID';
查V$PROCESS视图:
SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR';
4. 杀进程:
(1)先杀ORACLE进程:
ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';
(2)再杀操作系统进程:
KILL -9 刚才查出的SPID或ORAKILL 刚才查出的SID 刚才查出的SPID。
Oracle的死锁
查询数据库死锁:
select t2.username||' '||t2.sid||'
'||t2.serial#||' '||t2.logon_time||'
'||t3.sql_text
from v$locked_object t1,v$session t2,v$sqltext t3
where t1.session_id=t2.sid
and t2.sql_address=t3.address
order by t2.logon_time;
查询出来的结果就是有死锁的session了,下面就是杀掉,拿到上面查询出来的SID和SERIAL#,填入到下面的语句中:
alter system kill session 'sid,serial#';
一般情况可以解决数据库存在的死锁了,或通过session id 查到对应的操作系统进程,在Unix中杀掉操作系统的进程。
SELECT a.username,c.spid AS os_process_id,c.pid
AS oracle_process_id FROM v$session a,v$process c
WHERE c.addr=a.paddr and a.sid= and a.serial#= ;
然后采用kill (unix) 或 orakill(windows )。
在Unix中:
ps -ef|grep os_process_id
kill -9 os_process_id
ps -ef|grep os_process_id
经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。
1)查找死锁的进程:
sqlplus "/as sysdba" (sys/change_on_install)
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;
2)kill掉这个死锁的进程:
alter system kill session ‘sid,serial#’; (其中sid=l.session_id)
3)如果还不能解决:
select pro.spid from v$session ses,
v$process pro where ses.sid=XX and
ses.paddr=pro.addr;
其中sid用死锁的sid替换:
exit
ps -ef|grep spid
其中spid是这个进程的进程号,kill掉这个Oracle进程。
-----------------------------------------------------------------------------------------------------------------------
select v_s.machine,v_s.program,v_s.username,v_s.sid,v_s.serial# ,
pro.spid,t_o.object_name,t_o.object_type
,' kill -9 '||pro.spid
from v$session v_s,v$locked_object v_l,v$process pro,all_objects t_o where
1=1
and v_s.sid=v_l.session_id
and v_s.paddr=pro.addr
and v_s.sid=v_l.session_id
and t_o.object_id=v_l.object_id
;
-----------------------------------------------------------------------------------------------------------------------
select v_s.username,v_s.sid,v_s.serial# ,pro.spid
from v$session v_s,v$locked_object v_l,v$process pro where
1=1
and v_s.sid=v_l.session_id
and v_s.paddr=pro.addr
and v_s.sid=v_l.session_id;
发表评论
-
Oracle数据导入导出imp/exp
2013-03-13 23:02 975linux 用用户 system/system将用户ccn ... -
linux oracle启动
2013-02-21 11:49 962交谈中请勿轻信汇款、中奖信息、陌生电话,勿使用外挂软件。 ... -
oracle 查看某个表空间下有多少表
2013-02-18 08:12 1739oracle 查看某个表空间下有多少表 selec ... -
六分钟学会创建Oracle表空间的步骤
2013-02-18 07:10 870六分钟学会创建Oracle表空间的步骤 原帖:ht ... -
查询结果拼成一条字符串
2013-01-09 16:30 923查询结果拼成一条字符串 select repla ... -
oracle sql 特殊字符处理
2012-12-20 15:48 934oracle sql 特殊字符处理 select ... -
oracle 得到表的字段和备注
2012-12-13 15:58 975--oracle 得到表的字段和备注 ... -
oracle blob
2012-11-30 20:03 959一.将oracle字符串 blob转换为字符串(存的也是字符串 ... -
java.sql.SQLException: ORA-00257: archiver error. Connect internal only, until f
2012-11-11 11:06 1839http://blog.csdn.net/panys/ ... -
linux,oracle启动,关闭
2012-08-31 15:26 996数据库连不上去了,客户端连上去报 ora- 12560:TNS ... -
oracle 以数据行传递参数
2012-07-31 09:53 1168begin for cur_ct_swapco ... -
oracle创建表空间
2012-07-30 14:01 986oracle创建表空间 windows s ... -
Connection refused: connect
2012-07-17 14:47 22064orcl.16.50.110 是安装数据库时设的全局数据库名 ... -
oracle sql 循环一天的数居
2012-06-29 10:35 932-- Created on 2012-6-29 by LIU ... -
oracle sql 分组求最大值后,要显示其它列
2012-06-12 15:42 1867select t_a.a,t_a.b,max(t_a.c ... -
sql 换行符
2012-06-01 09:25 1113换行:chr(13)||chr(10) ... -
想查询一个表的结果集,又想统计其中某列符某行重复的次数
2012-06-01 09:22 1016想查询一个表的结果集,又想统计其中某列符某行重复的次数 ... -
oracle获得当前时间的,精确到毫秒 可以指定精确豪秒的位数
2012-05-16 11:59 30855oracle获得当前时间的,精确到毫秒 可以指定精确豪秒的 ... -
查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件
2012-04-26 08:51 1382--查看表的数量 Select * From user ... -
oracle连接字符串配置路径
2012-04-23 14:58 908/u01/oracle/product/10.2.0/netw ...
相关推荐
在Java中实现Oracle变量的绑定方法 .doc 在Java中实现Oracle变量的绑定方法 .doc
认识oracle中的sqlnet.ora tnsnames.ora listener.ora三个文件
oracle上传GIS数据方法.doc oracle上传GIS数据方法.doc
oracle查询kill死锁方法
oracle11g的驱动包,包括classes12.jar,ojdbc5.jar,ojdbc6.jar;
ORACLE进程无法KILL处理方案.docx
使用了,ODP.NET 方式链接数据库,只要把Oracle.ManagedDataAccess.dll引入取代以前的Oracle.DataAccess.dll即可。 这种方式也是oracle公司提供的,稳定性要比之前那种更好,而且也是免安装客户端的,目前还没测试...
用OCL技术快速访问Oracle数据库的方法研究.pdf
oracle.ManagedDataAccess.dll(oracle.ManagedDataAccess.Client)全托管驱动。 此驱动对32位和64位oracle数据库具有很好的连接兼容性。 可采用无客户端远程连接oracle,或在本机使用连接。 使用此驱动可以完全替换...
Oracle 数据库 11g 中的分区.pdf Oracle 数据库 11g :真正应用测试与可管理性概述.pdf Oracle 数据库 11g:可管理性概述.pdf Oracle 数据库 11g:新特性概述.pdf Oracle 真正应用集群 11g .pdf Oracle性能...
oracle.jdbc.driver.OracleDriver
利用delphi 7通过Oracle.Data.Access组件开发oracle数据库表清理数据操作及运行工具含Oracle.Data.Access.Components.v6.80.0.47.FS.forD5-D2009组件及安装方法 里面有自我理解的oracle清理数据思路 运行平台:...
ORACLE批量更新四种方法.txt ORACLE批量更新四种方法.txtORACLE批量更新四种方法.txt ORACLE批量更新四种方法.txt
压缩包中包含:Oracle.ManagedDataAccess.EntityFramework.dll ,Oracle.ManagedDataAccess.dll和 Oracle.ManagedDataAccess.DTC.dll(64位和32位)
Oracle官方文档阅读方法.pdfOracle官方文档阅读方法.pdfOracle官方文档阅读方法.pdfOracle官方文档阅读方法.pdfOracle官方文档阅读方法.pdf
一种在JSP页面上分页显示Oracle中记录的方法.pdf
Oracle_10.2.0.3.zip
VS连接oracle数据库使用,两个版本:4.122.1.0和4.122.19.1,本人使用高版本正常,低版本速度太慢
oracle10G和11G的OCI.dll,主要用于navicat工具;oracle10G和11G的OCI.dll,主要用于navicat工具
C#连接Oracle的快速方法,使用Oracle.ManagedDataAccess的综合教程,全开源 1)直接输入Oracle数据库IP\用户名、密码等信息,就可以连接数据库 2)已经写好了一个操作类OracleHelper,可以非常方便的操作数据库返回...