oracle表がロックされている完璧な解決方法
解決策:
ora-00031:session marked for kill処理oracleでは殺せないロックのいくつかのORACLEのプロセスが殺された後、状態は「killed」に置かれましたが、ロックされた資源は長い間解放されないので、仕方なくデータベースを再起動します。今はこのような問題を解決する方法を提供します。つまりORACLEでは殺しきれないのです。OS 1級でまた殺します。
次のステートメントでは、どのオブジェクトがロックされているかを確認します。
上記のコマンドでプロセスを殺した後、プロセス状態は「キラー」として扱われますが、ロックされたリソースは長い間リリースされていません。その後、OS 1レベルで該当プロセス(スレッド)を殺して、まず次のステートメント取得プロセス(スレッド)番号を実行します。
sid:殺すプロセスが属するインスタンス名を表します。
thread:殺すスレッド番号、つまり第3ステップで調べたspidです。
例:c:>orakill orcl 12345
締め括りをつける
どのオブジェクトがロックされていますか?
ora-00031:session marked for kill処理oracleでは殺せないロックのいくつかのORACLEのプロセスが殺された後、状態は「killed」に置かれましたが、ロックされた資源は長い間解放されないので、仕方なくデータベースを再起動します。今はこのような問題を解決する方法を提供します。つまりORACLEでは殺しきれないのです。OS 1級でまた殺します。
次のステートメントでは、どのオブジェクトがロックされているかを確認します。
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
次の文はプロセスを殺すために使います。
alter system kill session '24,111'; ( 24,111 sid,serial#
【注】以上の2ステップは、Oracleの管理コンソールで実行できます。上記のコマンドでプロセスを殺した後、プロセス状態は「キラー」として扱われますが、ロックされたリソースは長い間リリースされていません。その後、OS 1レベルで該当プロセス(スレッド)を殺して、まず次のステートメント取得プロセス(スレッド)番号を実行します。
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=24 (24 sid)
OS上でこのプロセス(スレッド)を殺す:unix上で、root IDでコマンドを実行する:
kill -9 12345( 3 spid)
-windows(unixも適用されます)でorakillでスレッドを殺します。orakillはoracleが提供する実行可能命令です。文法は:
orakill sid thread
その中:sid:殺すプロセスが属するインスタンス名を表します。
thread:殺すスレッド番号、つまり第3ステップで調べたspidです。
例:c:>orakill orcl 12345
締め括りをつける
どのオブジェクトがロックされていますか?
select object_name, machine, s.sid, s.serial#
from v$locked_object l, dba_objects o, v$session s
where l.object_id = o.object_id
and l.session_id = s.sid;
次の文はプロセスを殺すために使います。
alter system kill session '24,111'; --( 24,111 sid,serial#)
プロセス(スレッド)番号を取得します。
select spid, osuser, s.PROGRAM
from v$session s, v$process p
where s.PADDR = p.ADDR
and s.SID = '425';
プロセスを殺す
kill - 9 26099 -- spid
以上は小编が皆さんに绍介したoracle表のロックされた完璧な解决方法です。皆さんに助けてほしいです。もし何か疑问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。