Oracleのロックを解除するために手順を保存し、テーブルや停止の実行のロックを解除

 

表示方法:

選択五$プロセスから*;

 

ストアドプロシージャ名がロックされているかどうかを調べるためによると:

選択する名前は(上= dba_ddl_locks * FROM ' SP_1 ' );

選択 dba_ddl_locks * FROMところ、上のような名前(' %SP_1%');

 

選択sess.sid、
    sess.serial#、 
    lo.oracle_username、 
    lo.os_user_name、 
    ao.object_name、 
    lo.locked_mode 
    Vから$ LO LOCKED_OBJECT、 
    DBA_OBJECTSに、 
    V $セッションSESの 
ここao.object_id = lo.object_idとlo.session_id = sess.sid。

 

選択   秒。*
五$ LOCKED_OBJECT Lから、DBA_OBJECTS五$セッションS、五$プロセスp、O
 どこl.object_id = o.object_id
   そしてl.session_id = s.sid
   そしてs.paddr = p.addr
   OBJECT_NAME AND = UPPER(「」テーブルまたはストアドプロシージャ名' )。

 

SIDを探します:

選択t.sid、V $セッションtからt.serial#
ここt.sid = 550

 

セッションのロック解除を強制終了します。

ALTER SYSTEMを殺すセッション' 550,10047 ' 即時;

--sid、t.serial#

 

プロセスを殺すために上記のコマンドを使用している場合、プロセスの状態は「殺された」に設定されていますが、ロックは、長い時間のためのリソースを解放されていない、とあなたは次のことを行う最初の、OSレベルで対応するプロセス(スレッド)を殺すことができます声明は、プロセス(スレッド)数を取得します:

選択五$セッションS、五$プロセスpどこからSPID、OSUSER、s.programを
s.paddr = p.addrとs.sid = 550 

(SID 550は、上記の場合)

 

スタンドアローン:
SELECT A.PID、B.SID、B.SERIAL番号、C.SQL_TEXT、A.SPID
  V $プロセスA、V $ SESSION B、V $ SQLAREA C FROM
 WHERE A.ADDR = B.PADDR
   AND B.SQL_ADDRESS = C.ADDRESS

RAC:

SELECT A.PID、B.SID、B.SERIAL番号、C.SQL_TEXT、A.SPID
  GV $プロセスA、GV $ SESSION B、GV $ SQLAREA C FROM
 WHERE A.ADDR = B.PADDR
   AND B.SQL_ADDRESS = C.ADDRESS

 

そして、Linuxでkillコマンドを実行します。

殺す - 9のpidを

 

セッションを強制終了します。

選択し   、a.USERNAME、a.MACHINE、SQL_TEXTを' ALTER SYSTEMのkillセッション''' || || a.SID ' ' || || a.SERIAL#'@ ' || || a.INST_ID 「」」即時; " ステータス
GV $セッションから、内側には参加 a.sql_id =にGV $ SQL Bをb.sql_id
WHEREステータス = ' ACTIVE '

 

定期的なタスクは、特定のサーバ上の実行文の複数の時間を殺します:

手続きks_kill_sp_timeoutを作成または交換
     / * ******************************************* **********************
      ストアドプロシージャ名:
      コンテンツのストアドプロシージャ:ストアドプロシージャを監視することは正常です
      著者名: 
      書き込み時間:2017年4月17日
      入力パラメータ:

      出力パラメータ:
    ************************************************** **************** * /
なので
    v_sql VARCHAR2(2000 );
    v_count数;
ベギン

選択したカウント(個別の' ALTER SYSTEMのkillセッション''' || || a.SID ' ' || a.SERIAL#|| '@ ' || || a.INST_ID '' ' ;即時に' v_countへ)
GV $セッションから、内側には参加 a.sql_id =にGV $ SQL Bをb.sql_id
WHERE a.status = ' ACTIVE ' 
とa.MACHINE = ' DB ' 
とCEIL((SYSDATE - a.SQL_EXEC_START)* 24 * 60)> = 60 

もし v_count> 0  その後、
  選択の異なる' ALTER SYSTEMキルセッションを''' || || a.SID ' ' || || a.SERIAL#'@ ' || || a.INST_ID 「」」即時;   v_sqlへ
  GV $セッションから、内側には参加 a.sql_id =にGV $ SQL Bをb.sql_id
  WHERE a.status = ' ACTIVE ' 
  とa.MACHINE = ' DB ' 
  とCEIL((SYSDATE - a.SQL_EXEC_START)* 24 * 60)> = 60 
  
  DBMS_OUTPUT.PUT_LINE(v_sql)。  
  即時v_sqlを実行します。
そうしないと
  DBMS_OUTPUT.PUT_LINE(v_count)。
終了した場合


終わり;

 

出典:https://www.cnblogs.com/linn/p/4208893.html

おすすめ

転載: www.cnblogs.com/morgan363/p/12153547.html