1

データベースを調べているクエリエディタ(Toad)があります。

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

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

現在、アプリからのクエリ出力をテキストファイルにダンプし、それを読み取ることでこれを回避しています。

コミットが完了する前に、別のOracleセッションの内部を覗いて、そのセッションが何を表示するかを確認するためのより良い方法はありますか?

これを尋ねる別の方法は次のとおりです。Oracleでは、他の人のセッションに影響を与えることなく、2つのセッション間でのみダーティ読み取りを有効にできますか?

4

3 に答える 3

2

いいえ、Oracle はダーティ リードを許可していません。また、変更はディスクに物理的に書き込まれていない可能性があるため、データ ファイルには見つかりません。ログ ライターは保留中のデータ変更を少なくとも 3 秒ごとに書き込むため、Log Miner を使用してそこからそれを選択できる場合があります。

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

于 2009-05-05T22:25:25.227 に答える
1

私が知っている完全な答えではありませんが、死んだ読み取りはありませんが、何が起こっているのかを知ることができるロックがあります。

セッション 1 で主キー 7 の行を挿入すると、セッション 2 から選択したときに表示されません (ダーティ リードとなります)。

ただし、主キー 7 を使用してセッション 2 から挿入を試みると、待機してセッション 1 がコミットまたはロールバックするかどうかを確認する必要があるため、セッション 1 の背後でブロックされます。「WAIT 10」を使用して、これが起こるまで 10 秒間待つことができます。

更新または一意の制約違反を引き起こす可能性のあるものについても、同様の話があります。

于 2009-05-06T02:32:30.063 に答える
0

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

私が(一般的に)好むのは、永続的にそこに残るが本番環境ではオフにされるコードにデバッグステートメントを配置することです-Tom Kyteのdebug.fパッケージは開始するのに便利な場所です-http: //asktom.oracle.com /tkyte/debugf

于 2009-05-05T20:48:06.490 に答える