首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何杀掉正在执行的存储过程
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jayli426
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-23 16:19:48 楼主
    现在在PL/Sql developer中执行了一个存储过程

    现在想终止它,点击 pl/sql中的那个闪电按钮,却怎么也终止不掉

    我如何找到这个执行这个存储过程的会话,强行终止它呢?

    请大虾指较啊?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oracledbalgtu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 18:14:301楼 得分:0
    通过v$session,v$process,v$sql关联,可以获取sid,serial#,和spid,
    然后可以: alter system kill session 'sid,serial#' immediate;
    或者:
    orakill $oracle_sid spid



    引用楼主 jayli426 的帖子:
    现在在PL/Sql developer中执行了一个存储过程

    现在想终止它,点击 pl/sql中的那个闪电按钮,却怎么也终止不掉

    我如何找到这个执行这个存储过程的会话,强行终止它呢?

    请大虾指较啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dbcxbj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 20:51:302楼 得分:0
    很简单.强行关掉plsql developer.再重新打开就哦了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangydong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 09:54:233楼 得分:0
    呵呵,楼上的高
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jayli426
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 11:10:394楼 得分:0
    很简单.强行关掉plsql developer.再重新打开就哦了.

    这个好像只是关掉了pl/sql dev
    并没有kill掉那个存储过程对应地会话哦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gkl0818
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 22:15:585楼 得分:0
    二楼说的正确 通过v$session等一些视图找到相关的sid,kill掉就行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jayli426
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 10:56:096楼 得分:0
    二楼说的正确 通过v$session等一些视图找到相关的sid,kill掉就行
    能否给出几个样例的sql啊?大虾
    小弟 才疏学浅啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • catamite
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 14:42:597楼 得分:0
    1.SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='SID';
    2.在SQLPLUS的命令窗口执行:
    alter system kill session 'sid,SERIAL#';
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • realduke
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 15:41:028楼 得分:0
    工具TOAD中有个“DBA”-“Session Browser”,可以根据过滤条件查看所有运行的进程,可以在这里kill
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liuyi8903
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

    发表于:2008-08-25 19:15:459楼 得分:0
    一般来说自己会rollback,, 可以通过查询v$rollstat来看看当前的事务情况。
    4
    v$session关联 v$transaction和rollstat来观察一下roll情况。

    以及找到pid, 在避免kill不了,或者造成dead session.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jayli426
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-27 09:52:3410楼 得分:0
    "
    1.SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='SID';
    2.在SQLPLUS的命令窗口执行:
    alter system kill session 'sid,SERIAL#';
    "

    能否得到这样一个结果集

    存储过程名  sid          serial
    sp1        111          2222 


    单纯这个
    1.SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='SID';
    SQL语句,是拿不到这个 结果得把?

    大虾指较啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • seasir123
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-27 10:16:2311楼 得分:0
    学习了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jayli426
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-02 19:45:4812楼 得分:0
    ZT 一个答案
    不知是否可行

    1.select * from v$session where program='PLSQLDev.exe'
    确定SID
    2.select spid, osuser, s.program,s.sql_address,q.sql_text
    from v$process p, v$session s ,v$sql q
    where p.addr=s.paddr
    and s.sql_address=q.address
    and s.sid=&SID
    union all
    select spid, osuser, s.program,s.PREV_SQL_ADDR,q.sql_text
    from v$process p, v$session s ,v$sql q
    where p.addr=s.paddr
    and  s.PREV_SQL_ADDR=q.address
    and s.sid=&SID
    /
    确定这个SID 是你运行的PLSQL程序
    3.select spid, osuser, s.program from v$process p, v$session s where p.addr=s.paddr and  s.sid in(SID);
    4.如果是UNIX 就KILL -9 SPID
      OR WINDOWS 就ORAKILL ORACLE_SID  SPID

    使用ALTER SYSEM KILL SESSION 'SID,SER#'; 回收资源的速度很慢 所以本人基本不用.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved