oracleで(SQLデベロッパーを使用して)マテリアライズド・ビューを作成しようとしています。マテリアライズド・ビューを作成するときにデッドロックが発生する
私は小さなテーブルでそれをテストし、すべてがうまくいった。
今私は非常に大きなテーブルの上にそれをやっている、と精緻化のいくつかの時間後、私は次のエラーを取得: 「ORA-04020を:ロックしようとしたときに、デッドロックが検出され、」
することを回避する方法はありますそれ?または、テーブルが大きすぎるのであまりできませんか?
oracleで(SQLデベロッパーを使用して)マテリアライズド・ビューを作成しようとしています。マテリアライズド・ビューを作成するときにデッドロックが発生する
私は小さなテーブルでそれをテストし、すべてがうまくいった。
今私は非常に大きなテーブルの上にそれをやっている、と精緻化のいくつかの時間後、私は次のエラーを取得: 「ORA-04020を:ロックしようとしたときに、デッドロックが検出され、」
することを回避する方法はありますそれ?または、テーブルが大きすぎるのであまりできませんか?
データベース内のその他のものには、クエリを構築するために必要なオブジェクトがロックされています。
どのオブジェクトを試してみるか。
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
マテリアライズドビューが使用しようとしているオブジェクトを探して、どのユーザーがオブジェクトをロックしているかを確認する必要があります。
ユーザーに移動して、何をしているのかをコミットまたはロールバックするように依頼します。
ヒントありがとうございます。これは、oracleがMVを作成しようとするすべての時間に対して、誰もソース表で作業できないということですか?それは大きな問題かもしれません... – Maik
これは、テーブルに何が行われているかによって異なります。 – BriteSponge
まあ私は誰かが私のテーブル上の選択を行う場合、それをロックしないと仮定しますが、彼はテーブルのいくつかの行を更新します。 MVの作成に数時間かかるので、大きな問題があります。その時、誰かがしばらくテーブルをロックすることになります。何か私にできることはありますか? – Maik
クエリはクエリ実行ログのいくつかの統計情報に役立ちます – aviad
申し訳ありませんが、私は経験が豊富ではありません...クエリ実行ログとは何ですか?どこで見つけることができますか? – Maik
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