2017-06-20 15 views
0

Oracle DBにデッドロックが発生しました。デッドロック(ORA-00060)は、同じ表から2つのエンティティを同時に削除するときに発生します。ロックが設定されているテーブルを調べるにはどうすればよいですか?Oracle - デッドロックが発生したテーブルを見つける

  1. 私はデッドロックのグラフが含まれているトレースファイルを取得し、その質問番号1は、次のとおりです:私は何とかロックは、リソースを使用して設定された上でテーブルを識別することができ、私はこれまでで何をしたか

    デッドロックグラフの名前?どうやって?リソース名の形式は次のとおりです。TM-000168D7-00000000-00000005-00000000

  2. このようなデッドロックの最も一般的な原因は、外部キーのインデックスが欠落しているように見えるため、インデックスが見つからず、 1つを見つける。しかし、スキーマはかなり複雑なので、私はそれを見落とすことができます。

ヒントやご提案はありますか?

+1

私はトン/彼のどこかで読んでいた - http://oracledbahub.com/2011/02/query-to-get-deadlocked-tableを-and-fired-query-dead-during-deadlock – PeaceIsPearl

+0

000168D7に関連する列は見つかりましたか?それは外来キーを持っていますか? –

答えて

0

デッドロックの理解に役立つオンラインリソースはたくさんあります。

"TM"はトランザクションまたはDMLエンキュー(ロック)なので、コミットする前に実行する必要があるよりも長く実行されるトランザクションがある可能性があります。ここで

はあなたの索引付けされていない外部キーを見つけるためのスクリプトです:

select cc.owner, cc.table_name, cc.column_name, cc.position 
from dba_cons_columns cc 
where 
cc.owner not in ('SYS','SYSTEM') 
and position is not null 
minus 
select i.index_owner, i.table_name, i.column_name, i.column_position 
from dba_ind_columns i 
where 
i.index_owner not in ('SYS','SYSTEM') 
関連する問題