【问题标题】:Cancel Oracle procedure from SQL Server procedure when cancelled取消时从 SQL Server 过程中取消 Oracle 过程
【发布时间】:2017-04-07 08:03:08
【问题描述】:

我正在 SQL Server 端执行一个存储过程。在此过程的某些部分,使用

调用远程 Oracle 过程
execute ('
begin 
    oraprocname(procparams); 
end;')
at remotedb.

今天,我需要停止执行这个过程,所以我在 SQL Server 端使用了取消查询。

问题是 SQL Server 无法停止该过程,直到远程过程停止(我需要从 remotedb 端终止它)。

有没有办法以某种方式“通知”Oracle 端需要从 SQL Server 端的存储过程中取消该过程?

【问题讨论】:

    标签: sql-server oracle stored-procedures linked-server cancellation


    【解决方案1】:

    您的问题是,一旦您向 Oracle 发送了命令,直到命令结束它才会返回。

    因此,除非execute () at remotedb 有特定的参数可以将调用包装在一个可以被调用者停止的子进程中(不太可能,但为什么不呢?),您必须创建自己的 Oracle 函数来杀死您的 long-运行会话。

    所以我的解决方案是创建另一个 Oracle 函数或过程来终止长时间运行的会话,然后从单独的进程中调用它。

    获取您的跑步训练:

    select
      sid
      , serial#
    from
      v$session
    where
          username='<your user>'
      and status = 'ACTIVE'
    

    然后使用上面的信息杀死它,使用EXECUTE IMMEDIATE ALTER SYSTEM:

    begin
      EXECUTE IMMEDIATE 'ALTER SYSTEM kill session ''<sid>,<serial#>'' ';
    end;
    /
    

    【讨论】:

    • 您好,感谢您的回复。问题是我无权访问像 v$session 这样的全局视图...我在 Oracle 站点上的用户只有几个程序的读取权限和执行权限:/
    • 那么您可能需要在远程数据库上为您创建这样一个过程,并授予您的用户执行权限。
    猜你喜欢
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2019-02-05
    相关资源
    最近更新 更多