oracle过程被锁如何解决?急死人了数据库又不能随便的重启,就不知道怎么办了?

dreaminglove 2011-06-20 04:31:05
调试Oracle存储过程时发现刚才存储过程被锁了,只要一编译该存储过程或者修改过程都会出现停止响应,用以下的方法还是不得。

1:找过程到相关存储过程的sid

select sid from v$access where object = '存储过程名'

2.根据sid找到serial#

select SERIAL# from V$session where sid=70

---70是第一个SQL语句查出来的SID

根据sid和serial#杀掉存储过程的锁

alter system kill session '70,1';

出现:“标志会话结束命令”这种方法也是无法杀掉存储过程的锁,请问还有别的比较好的方法解决过程被锁的吗???先谢谢了!
...全文
808 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreaminglove 2011-06-22
  • 打赏
  • 举报
回复
不懂啊
fendou1314 2011-06-21
  • 打赏
  • 举报
回复
学习了~~~
[Quote=引用 6 楼 tangren 的回复:]
1、如果使用alter system kill session无法杀掉的进程。
可以在操作系统级强行杀掉进程或线程。

2、使用如下语句取得spid即为进程(unix,linux)或线程(windows)ID。
SELECT p.SPID, s.OSUSER, p.PROGRAM
FROM v$session s, v$process p
WHERE s.PADDR = p.AD……
[/Quote]
小笨熊 2011-06-21
  • 打赏
  • 举报
回复
学习。。。
yejihui9527 2011-06-21
  • 打赏
  • 举报
回复
3、强终杀掉线程或进程
UNIX、LINUX下使用(如:SPID为6666)
$ kill -9 6666
这个很强大的
孙成 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tangren 的回复:]

1、如果使用alter system kill session无法杀掉的进程。
可以在操作系统级强行杀掉进程或线程。

2、使用如下语句取得spid即为进程(unix,linux)或线程(windows)ID。
SELECT p.SPID, s.OSUSER, p.PROGRAM
FROM v$session s, v$process p
WHERE s.PADDR = p.A……
[/Quote]
+1
tangren 2011-06-20
  • 打赏
  • 举报
回复
1、如果使用alter system kill session无法杀掉的进程。
可以在操作系统级强行杀掉进程或线程。

2、使用如下语句取得spid即为进程(unix,linux)或线程(windows)ID。
SELECT p.SPID, s.OSUSER, p.PROGRAM
FROM v$session s, v$process p
WHERE s.PADDR = p.ADDR
AND s.SID =
(SELECT t.SID FROM v$access t WHERE t.OBJECT = upper('对象名'));

3、强终杀掉线程或进程
UNIX、LINUX下使用(如:SPID为6666)
$ kill -9 6666

WINDOWS下使用(如:SPID为6666,实例名<ORACLE_SID>为ORCL),则
C:\>orakill ORCL 6666

秋雨飘落 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 dreaminglove 的回复:]
调试Oracle存储过程时发现刚才存储过程被锁了,只要一编译该存储过程或者修改过程都会出现停止响应,用以下的方法还是不得。

1:找过程到相关存储过程的sid

select sid from v$access where object = '存储过程名'

2.根据sid找到serial#

select SERIAL# from V$session where sid=70
……
[/Quote]
这个是数据库级别的
还有一个就是操作系统级别的杀死进程
根据SID 找出SPID,在服务器中进行KILL,
或者就是由于我说的DDL锁造成的。
vanjayhsu 2011-06-20
  • 打赏
  • 举报
回复
2.根据sid找到serial#

select SERIAL# from V$session where sid=70

---70是第一个SQL语句查出来的SID

根据sid和serial#杀掉存储过程的锁

alter system kill session '70,1';

--杀掉所有的SID看看。。。

huangdh12 2011-06-20
  • 打赏
  • 举报
回复
加上 immediate呢?
秋雨飘落 2011-06-20
  • 打赏
  • 举报
回复
查询一下是否有DDL锁,你那个查询的是DML锁

select * from DBA_DDL_LOCKS --------这个是查询DDL锁,看看存储过程是否被锁住了。
psufnxk2008 2011-06-20
  • 打赏
  • 举报
回复
新手,看看。。。

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧