2016-09-16 113 views
0

oracleで(SQLデベロッパーを使用して)マテリアライズド・ビューを作成しようとしています。マテリアライズド・ビューを作成するときにデッドロックが発生する

私は小さなテーブルでそれをテストし、すべてがうまくいった。

今私は非常に大きなテーブルの上にそれをやっている、と精緻化のいくつかの時間後、私は次のエラーを取得: 「ORA-04020を:ロックしようとしたときに、デッドロックが検出され、」

することを回避する方法はありますそれ?または、テーブルが大きすぎるのであまりできませんか?

+0

クエリはクエリ実行ログのいくつかの統計情報に役立ちます – aviad

+0

申し訳ありませんが、私は経験が豊富ではありません...クエリ実行ログとは何ですか?どこで見つけることができますか? – Maik

+0

http://www.toadworld.com/platforms/oracle/w/wiki/376.tracing-sql-statement-executionまた、実行計画を使用してください。https://docs.oracle.com/database/121/TGSQL/tgsql_genplan htm#TGSQL95114 – aviad

答えて

1

データベース内のその他のものには、クエリを構築するために必要なオブジェクトがロックされています。

どのオブジェクトを試してみるか。

SELECT vo.object_id, obj.object_name, vo.oracle_username, vo.os_user_name, vo.session_id 
    FROM v$locked_object vo 
     INNER JOIN all_objects obj 
     ON vo.object_id = obj.object_id 

マテリアライズドビューが使用しようとしているオブジェクトを探して、どのユーザーがオブジェクトをロックしているかを確認する必要があります。

ユーザーに移動して、何をしているのかをコミットまたはロールバックするように依頼します。

+0

ヒントありがとうございます。これは、oracleがMVを作成しようとするすべての時間に対して、誰もソース表で作業できないということですか?それは大きな問題かもしれません... – Maik

+0

これは、テーブルに何が行われているかによって異なります。 – BriteSponge

+0

まあ私は誰かが私のテーブル上の選択を行う場合、それをロックしないと仮定しますが、彼はテーブルのいくつかの行を更新します。 MVの作成に数時間かかるので、大きな問題があります。その時、誰かがしばらくテーブルをロックすることになります。何か私にできることはありますか? – Maik

関連する問題