【问题标题】:Not able to drop the procedure无法删除程序
【发布时间】:2014-03-28 22:11:07
【问题描述】:

我已经创建了一个函数和过程,函数在过程中被调用。根据函数的输出,在过程中我将数据插入到其他表中。现在该过程没有执行也没有被丢弃。如果我在 sql developer 或 cmd 中尝试它们中的任何一个,它正在运行并且没有来自 db 的响应。

DROP PROCEDURE proc_insert_data;

Sql 开发人员只是在那里无限时间地连续运行。 我签入了 user_objects 和 all_objects:对象 id 为空且无效。

【问题讨论】:

  • 在您的 SQL 数据库上,如果您运行 sp_who2,您会看到任何连接吗?以杀死 234 为例。

标签: sql oracle procedures


【解决方案1】:
    Execute as Sys admin user, Below query lists out all the blocking sessions

  SELECT
       s.blocking_session, 
       b.username blocking_username,
       b.osuser blocking_osuser,
     s.sid, 
   s.serial#, 
   s.seconds_in_wait,
   s.username
FROM
   v$session s,
   v$session b
WHERE
   s.blocking_session = b.sid
order by s.seconds_in_wait desc;


    select sid,SERIAL#,status,username from v$session where sid=**[blocking_session]**;


   alter system disconnect session 'sid,SERIAL#' IMMEDIATE;

【讨论】:

    【解决方案2】:

    也许您的程序被一些尚未完成的会话锁定。我猜在你的情况下,commit 操作没有在另一个会话中完成。

    您可以通过以下方式检查阻塞会话:

    SELECT
       s.blocking_session, 
       b.username blocking_username,
       b.osuser blocking_osuser,
       s.sid, 
       s.serial#, 
       s.seconds_in_wait,
       s.username
    FROM
       v$session s,
       v$session b
    WHERE
       s.blocking_session = b.sid
    order by s.seconds_in_wait desc;
    

    然后,在您识别会话后,您可以轻松地终止它或要求您的管理员执行此操作。

    【讨论】:

    • 谢谢..它帮助我理解了真正的问题..但是通过该查询,我无法获得任何数据..此外,我真的无法获得该查询所获取的内容..请您再详细一点
    • 因此,在视图v$session 中有一个列blocking_session 表示会话ID,它阻止您的“会话”正在丢弃该过程。如果它什么也没返回,也许你应该额外尝试的方法是重新启动数据库,当然如果可能的话。
    • restart db is not possible ...还有其他方法吗??
    • 试试these methods,也许他们会有所帮助
    • 他们中的一些给出了一些不是我的程序的对象 id 的 id..即使我得到了 id,如何阻止该会话??
    猜你喜欢
    • 2014-08-26
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2019-03-11
    • 2014-02-15
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多