dbms_utility.exec_ddl_statement不起作用

时间:2019-11-23 08:33:32

标签: oracle plsql dynamic-sql ddl

我想通过dblink终止会话,但是dbms_utility.exec_ddl_statement不起作用。

以下命令不会引发任何错误,但也不会终止会话。

exec dbms_utility.exec_ddl_statement@dblink('Alter system kill session ''274,12303,@1'' immediate'); 

2 个答案:

答案 0 :(得分:0)

您似乎想杀死驻留在远程数据库中的会话。如果是这样,

  • 在该(远程)数据库中创建一个过程
  • 它将终止会话
    • 一个选择是使用动态SQL来做到这一点(即execute immediate
  • 哪个?参数将作为过程的参数传递的那个
  • 通过数据库链接调用过程

答案 1 :(得分:0)

我假设sid = 274,node = 1上的serial = 12303的会话正在运行沉重的DML / DDL语句,并且说“不会杀死会话”意味着您将会话视为“活动”该命令运行后,在GV $ SESSION中。

这是预期的行为。尽管可能违反直觉,但KILL SESSION并没有真正“杀死”会话-它发送一个终止信号,该会话在当前工作完成后会尊重该信号。没过因此,对于假定的方案,这不是一个选择。

另外两个选项:

  • ALTER SYSTEM DISCONNECT SESSION '274,12303,@1' IMMEDIATE
  • 杀死操作系统进程。

ORACLE-BASE article

P.S。 dbms_utility.exec_ddl_statement@dblink(q'!Alter system kill session '274,12303,@1' immediate!'); alternative quoting mechanism。自10克起,不再有两次点击。