2017-07-19 7 views
0

私はシェルスクリプトで作業していますが、ステートメントが長時間実行されていると認識された場合は、OSでPIDを取得する必要があります。 (例:Oracle)。一番上を確認して一致するプロセスを終了し、後で実行中のセッションが存在する場合はスクリプトを使用してデータベースをチェックすることができます。プログラムの長時間実行されている特定のPIDを強制終了した後、シェルスクリプトはユーザーにメール情報を送信する必要があります。ここシェルスクリプトを使用してoracle dbの長時間実行されている複数のセッションを終了する

[[email protected] ]$ps au |grep oracle | awk 'print {$2}' |uniq 
10020 
15678 
17345 
18736 
18856 

私の質問は、私はtopコマンドに記載されている上記のプロセスのいずれかを参照してくださいいけないされているので、どのように私は、スクリプト内でこれらの非既存のプロセスを検証する必要がありますか?またはそのトリックを行うことができるより良い1つのライナーやコードスニペットがありますか?どんな提案も大変ありがとうございます。サーバーからのセッションを殺す

おかげ

+0

は、多分それはあなたを助けることができる、SQLNET.RECV_TIMEOUT' 'のためのマニュアルを参照してください:セッションのサーバーのPIDを取得するには、このクエリでv$processv$sessionビューを照会することができます。 https://docs.oracle.com/cd/E11882_01/network.112/e10835/sqlnet.htm#NETRF227 – Azize

答えて

0

は非常に危険であり、あいまいなデータ及びテーブルでさえ読めないの行につながる可能性があります。 v$sessionで同じことを確認して、長時間実行しているセッションを強制終了する方が良いです。ここで、セッションが非アクティブか、別のセッションが完了するのを待っているかどうかを確認できます。

セッションを終了するにはalter system kill session 'sid,serial#' immediate;を使用してください。ここで、sidとシリアル番号はv$sessionビューにあります。

SELECT s.sid, s.serial#, s.username, p.spid, s.machine, p.terminal 
FROM v$session s, v$process p 
WHERE s.paddr = p.addr; 
+0

こんにちはLohit、 あなたの提案をお寄せいただきありがとうございますが、上記のプロセスまたはSPIDを私たちは検証することができますか? oracleから殺害する前に、私たちが殺している主要なOracleプロセスであるかどうかを検証する必要があります.Oracleプロセスも例に過ぎません。他の多くの実行可能ファイルがあります。それに関する提案は非常に高く評価されています.. !!ありがとう。 – Pavan

+0

これを行うには、あなたがトップから取得したSPIDを取得し、それらのプロセスで何が実行されているかを確認できます。アイドルプロセスはCPUを消費するプロセスのトップに表示されません。 Oracleプロセスで何が実行されているかを確認するには、[this](http://www.acehints.com/2014/06/oracle-query-to-find-out-sql-text-using.html)を参照してください。 )リンク。 –

関連する問題