如何检测被锁住的Oracle存储过程及处理办法汇总(转)

 

1.查看是哪一个存储过程被锁住
查V$DB_OBJECT_CACHE视图
select * from V$DB_OBJECT_CACHE where owner='过程的所属用户' AND LOCKS!='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.杀进程
4.1先杀oracle进程
alter system kill session '查出的sid,查出的serial#';
4.2再杀操作系统进程
如果是unix
kill -9 刚查出的spid
如果是windows
orakill 刚查出的sid 刚查出的spid

http://www.cnblogs.com/zwl715/p/3699124.html

原因: 存储过程执行过程中,关闭或者中断存储过程,重新编译是等待时间很长,无法删除

解决:

先查出被锁定存储过程的spid

SELECT spid

FROM V$DB_OBJECT_CACHE   OC,

       V$OBJECT_DEPENDENCY OD,

       DBA_KGLLOCK         W,

       V$SESSION           S,

       V$PROCESS           P

      

WHERE OD.TO_OWNER = OC.OWNER

   AND OD.TO_NAME = OC.NAME

   AND OD.TO_ADDRESS = W.KGLLKHDL

   AND W.KGLLKUSE = S.SADDR

   AND P.ADDR = S.PADDR

AND OC.NAME = 'SP_PS_DATAWWTPFLOWSUM_U'//存储过程名称

 

登陆被锁定存储过程所属Oracle的安装服务器, 开始->运行->CMD ,输入格式 orakill SID实例 SPID如:C:\>orakill orcl 540

http://www.cnblogs.com/zwl715/p/3699120.html

 

时间: 2024-09-20 00:03:52

如何检测被锁住的Oracle存储过程及处理办法汇总(转)的相关文章

ORACLE 查询被锁住的对象,并结束其会话的方法_oracle

使用Oracle时,发现有表被锁,又不知道是谁(或者哪个程序)锁的,怎么办 ? 两步走: 1.查找出被锁对象的会话ID和序列号 执行如下SQL: -- 查询出被锁对象,并提供 kill 脚本 SELECT S.SID, S.MACHINE, O.OBJECT_NAME, L.ORACLE_USERNAME, L.LOCKED_MODE, S.OSUSESR, 'ALTER SYSTEM KILL SESSION '''|| S.SID || ', '|| S.SERIAL#||''';' AS

oracle 记录被另一个用户锁住

  oracle数据中删除数据时提示"记录被另一个用户锁住" 解决方法   1 查看数据库锁,诊断锁的来源及类型   select object_id,session_id,locked_mode from v$locked_object;     或者用以下命令:    select b.owner,b.object_name,l.session_id,l.locked_mode    from v$locked_object l, dba_objects b    where b.

spring oracle 锁表-为什么insert操作会把整张表都锁住呢?

问题描述 为什么insert操作会把整张表都锁住呢? 项目中遇到一个很奇怪的问题: 问题描述:现在需要从项目外部导大量的数据到项目内,这个时候我起了一个spring事务往很多张表中去插入数据,这个时候其他用户访问系统去更新旧的数据的时候发现表被锁了.也就是说我在导入数据的时候,其他用户都不能对系统的表进行相应的更新操作.这是为什么???? 解决方案 查的时候不会锁住,只有曾删改才会 解决方案二: 当ORACLE执行insert等DML语句时,会首先自动在所要操作的表上申请一个TM锁,当TM锁获得

sqlserver:查询锁住sql以及解锁方法

查看被锁表语句 --查看被锁表: SELECT request_session_id spid, OBJECT_NAME( resource_associated_entity_id ) tableName FROM sys.dm_tran_locks WHERE resource_type = 'OBJECT' ORDER BY request_session_id ASC --spid 锁表进程 --tableName 被锁表名 --根据锁表进程查询相应进程互锁的SQL语句 DBCC INP

==站点在运行中,有个表被锁住了,怎么办?==

问题描述 网站在运行中发现有个做更新操作的表被锁住了(其他表没问题,只有那个表的查询页面访问不了)重启tomcat可以恢复,但有没有好的办法,不用重启,仅针对那个表做什么操作可以取消锁住状态的呢??我用的是SqlServer 解决方案 解决方案二:这得找到表被锁住的原因,否则治标不治本.表被锁住在数据库服务器上应该是有方法解锁的,Oracle就有,很少使用SQLServer数据库,数据库专业的问题,建议移到SQLServer版块中去问问吧.PS:移帖方法:标题上方第一个按钮"管理菜单"

用PHP执行Oracle存储过程示例

oracle|存储过程|示例|执行 <?//在oracle中执行存储过程示例//供大家参考$gConn=ocilogon("test","test"); /* OCIDefineByPos example thies@digicol.de (980219) *///discrate与nEcode是out parameter,其余均是 in parameter.//存储过程get_discrate存放于package ebiz_pg中.$stmt = OCIPa

synchorized和ReetrantLock锁住的分别是什么

问题描述 synchorized和ReetrantLock锁住的分别是什么 10C synchorized 是锁住了对象,对于同一个类内的其它带synchorized的方法都是一样的.只要有一个线程执行synchorized方法,其它带synchorized方法的线程就会被阻塞?而ReetrantLock锁住的是线程,非此线程一旦运行到带锁部分就会被挂起,对于其它的线程调用其它的lock块是不会影响的? 解决方案 ReentrantLock 拥有Synchronized相同的并发性和内存语义,此

如何应对锁住的数据记录:NOLOCK和READPAST

对于非银行等严格要求事务的行业,搜索记录中出现或者不出现某条记录,都是在可容忍范围内,所以碰到死锁,应该首先考虑,我们业务逻辑是否能容忍出现或者不出现某些记录,而不是寻求对双方都加锁条件下如何解锁的问题. NOLOCK 和 READPAST 都是处理查询.插入.删除等操作时候,如何应对锁住的数据记录.但是这时候一定要注意NOLOCK 和 READPAST的局限性,确认你的业务逻辑可以容忍这些记录的出现或者不出现: 简单来说: NOLOCK 可能把没有提交事务的数据也显示出来. READPAST

用PHP调用Oracle存储过程

oracle|存储过程 从开始学习PHP就来喜悦国际村,好几个月了,学到不少东西,自己写了个例子希望有点用处. PHP程序访问数据库,完全可以使用存储过程,有人认为使用存储过程便于维护不过仁者见仁,智者见智,在这个问题上,偶认为使用存储过程意味着必须要DBA和开发人员更紧密配合如果其中一方更变,则显然难以维护.但是使用存储过程至少有两个最明显的优点:速度和效率.使用存储过程的速度显然更快.在效率上,如果应用一次需要做一系列SQL操作,则需要往返于PHP与ORACLE,不如把该应用直接放到数据库方