2012-01-14 2 views
1

DELETEクエリが実行されると、どこからデータが削除されますか?他のセッションでデータが引き続き表示されるのはなぜですか? Oracle SQLで(アーキテクチャ・レベルで)DELETE問合せが起動されたときに実行されるバックグラウンド・プロセスとは何ですか?Oracle SQLでは、削除された(コミットされていない)行は現在のセッションでは表示されませんが、他のセッションでは表示されるのはなぜですか?

+4

トランザクションの仕組みはhttp://en.wikipedia.org/wiki/Database_transactionです。もちろんOraleの参考資料もあります。http://docs.oracle.com/cd/E11882_01/server.112/e25789/transact htm –

答えて

3

ziesemerが参照されているACIDプロパティの説明と同様に、Multi-Version Concurrency ControlまたはMVCCについて知っておく必要があります。 「すべてについて」を知りたい場合は、Philip A. Bernstein、Vassos Hadzilacos、Nathan Goodman(ダウンロード可能)によってConcurrency Control and Recovery in Database Systemsを読むことを検討してください。

Oracleおよび他の同様のMVCC DBMSでは、トランザクションを開始すると、その開始時刻を識別するタイムスタンプのメモが保持されます(ただし、タイムスタンプ値は必ずしも単純な「Unix Epochからの秒」値ではありません)。そのトランザクションが実行されている間は、開始時刻以降のタイムスタンプが挿入されたデータは表示されません。システムでは、まだ実行中のトランザクションに対してデータ・ページの以前のバージョンを使用可能にしています。トランザクションがページを書き込むと、新しいタイムスタンプを持つ新しいコピーが作成されますが、そのコピーは変更トランザクションがコミットするまで他のトランザクションで使用できなくなり、コミット後に開始されるトランザクションでのみ使用可能になります。

3

具体的にはIsolationACIDに慣れてください。他のセッションから見えるようにするには、削除後にコミットを行ってください。

データは、上にリンクされた標準のために、設計によって他のセッションで引き続き表示されます。

2

行はコマンドが発行されるとすぐにローカルセッションで削除されますが、他のセッションではCOMMITまで削除されません。

関連する問題