2009-05-05 14 views
1

データベースを調べるクエリエディタ(Toad)があります。別のOracleセッションの内部を覗く方法はありますか?

同時に、独自の別の接続でアプリケーションをデバッグしています。

私のアプリケーションはトランザクションを開始し、いくつかの更新を行い、いくつかのSELECTステートメントに基づいて決定を下します。更新ステートメント(多くの複雑な)はまだコミットされていないので、アプリケーションがSELECTから取得した結果は、Toadで同じステートメントを実行した場合の結果と同じになりません。

現在、私はアプリからのクエリ出力をテキストファイルにダンプして読んでいます。

他のoracleセッションを覗き見て、コミットが完了する前にそのセッションがどのように見えるかを確認する方法がありますか?

もう1つの方法は次のとおりです。オラクルでは、他の誰のセッションにも影響を与えずに、わずか2セッション間でdirty readsを有効にすることはできますか?

答えて

0

変更セッションコマンドまたはログオントリガー(私自身は試していません)を使用して、「コミットされていない読み取り」にピークにしたいセッションの分離レベルを一時的に設定することはできませんか?私は(一般的に)行うことを好む何

は永久にそこに残っているコード内の場所のデバッグ文ですが、本番ではオフになっている - http://asktom.oracle.com/tkyte/debugf

+0

Oracleには、読み取りコミットされていない分離レベルがありません。 http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/consist.htm#CNCPT1326 –

+0

申し訳ありませんが、あなたは正しいです!私はドキュメントの間違った部分を誤って読んで、コミットされていないreadが存在していると思ったが、そうではないと思った。 –

2

- トム・カイトのdebug.fパッケージを開始するのに便利な場所ですいいえ、オラクルではダーティ・リードは許可されていません。また、変更が物理的にディスクに書き込まれていない可能性があるため、データファイル内で変更内容を見つけることはできません。 ログライターは、少なくとも3秒ごとに保留中のデータ変更を書き込むので、ログマイナーの項目を使用してそこから選択することができます。

しかし、一般的には、必要に応じて簡単にオンとオフに切り替えることができる独自のデバッグ情報を含めることをお勧めします。

1

私は知っている完全な答えではありませんが、デッドリードはありませんが、何が起こっているかをいくつか考えられるロックがあります。

セッション1では、主キー7の行を挿入すると、セッション2から選択すると表示されなくなります(ダーティな読み込みになります)。

ただし、プライマリキー7を使用してセッション2から挿入しようとすると、セッション1がコミットまたはロールバックするかどうかを待つ必要があるため、セッション1の後ろでブロックされます。 「WAIT 10」を使って10秒待つことができます。

唯一の制約違反の原因となる更新または同様の話があります。