簡體   English   中英

Oracle 11g具有幻像連接

[英]Oracle 11g has phantom connection

我在計算機上本地安裝了11g(Windows 7 64位)。

當我從oracle斷開所有客戶端的連接(即不運行sqlplus,不運行weblogic),然后使用sqlplus重新連接時,我運行以下腳本:

SQL> set linesize 120
SQL> SELECT            s.sid,
  2                    s.serial#,
  3                    s.username,
  4                    s.program
  5    from v$session s
  6    where username is not null;
       SID    SERIAL# USERNAME                       PROGRAM
---------- ---------- ------------------------------ ----------------------------------------------------------------
       134      11274 FOO                         ORACLE.EXE (J000) <-- I want to remove this connection
       139      19140 MYADMIN                        sqlplus.exe       <-- My connection
       155       8941 FOO                         ORACLE.EXE (J001) <-- I want to remove this connection
SQL>

因此,我嘗試以編程方式刪除以藍色標記的連接。

我正在使用以下內容:

SQL> ALTER SYSTEM DISCONNECT SESSION  134,11274  IMMEDIATE;
ALTER SYSTEM DISCONNECT SESSION  134,11274  IMMEDIATE
                                 *
ERROR at line 1:
ORA-00026: missing or invalid session ID

這不是正確的方法嗎? 我也嘗試過

ALTER SYSTEM DISCONNECT SESSION  '134,11274'  IMMEDIATE;

當我再次嘗試運行以上命令時,我將收到錯誤消息:

SQL> ALTER SYSTEM DISCONNECT SESSION  '134,11274'  IMMEDIATE;
ALTER SYSTEM DISCONNECT SESSION  '134,11274'  IMMEDIATE
*
ERROR at line 1:
ORA-00031: session marked for kill

因此,連接似乎並沒有真正消失。

我想要一個腳本來強制終止所有“ FOO”連接,以便我的構建能夠正常運行。 但是我的腳本不起作用。 你有什么想法? 我擺脫連接的唯一可靠方法是重新啟動。 停止和啟動服務有時是可行的,但並非總是如此,這確實很奇怪。

這是我最終希望能夠運行的PL / SQL腳本。

SET SERVEROUTPUT ON 
SET LINESIZE 120
DECLARE
   theKillCmd VARCHAR2(1000);

   PROCEDURE msg(msg VARCHAR2) AS 
   BEGIN
        DBMS_OUTPUT.PUT_LINE(msg);
   END;


BEGIN

msg(' . ');
msg(' . ');
msg('Killing extraneous sessions.');
msg(' . ');
msg(' . ');

for conn in (SELECT    s.sid,
         s.serial#,
         s.username,
         s.program
  FROM   v$session s
  WHERE s.USERNAME IS NOT NULL) 
loop

  msg( '.     ' || conn.sid || ' ' || conn.serial# || ' ' ||  conn.username || ' ' || conn.program );
  IF (conn.username = 'FOO') THEN
     -- Following asks client process to kill itself
     -- theKillCmd := 'ALTER SYSTEM KILL SESSION ''' ||  conn.sid || ',' || conn.serial# || ''' IMMEDIATE ';
     -- Following tells server to kill process 
     theKillCmd := 'ALTER SYSTEM DISCONNECT SESSION ' ||  conn.sid || ',' || conn.serial# || ' IMMEDIATE ';
     msg( '.           ' || 'Killing connection using command : ' || theKillCmd );
     EXECUTE IMMEDIATE theKillCmd ;
  ELSE
     msg('.           Ignoring .. ');
  END IF;

end loop;


END;
/

-- exit;

因此,如果有人有任何想法將不勝感激。

我想知道是否我可能以某種方式破壞了oracle的安裝-我還不想走上重新安裝的道路-寧願有一個腳本可以在運行ant oracle之前終止oracle的連接。

Jnnn(J000和J001)語法表明它是“作業隊列從屬進程”。 如果您將其殺死,則調度程序可能只會重新啟動它。

查看適當的DBMS_JOB或DBMS_SCHEDULER API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM