表示方法:
選択五$プロセスから*;
ストアドプロシージャ名がロックされているかどうかを調べるためによると:
選択する名前は(上= 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)。 終了した場合、 終わり;