6

Microsoft SQL Server では、READ_COMMITTED_SNAPSHOT ISOLATION を使用します。

ALTER DATABASE MyDatabase
SET ALLOW_SNAPSHOT_ISOLATION ON

ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON

セッション 1 で、プリンシパルを 4000 から 5000 に更新します。

BEGIN TRAN
Update MyTable Set Principal=5000 Where InvestorId=10 

セッション 2 では、次のように言います。

Select Principal from MyTable where InvestorId=10

セッション 1 トランザクションがコミットされていないため、4000 が返されます。

READ_COMMITTED_SNAPSHOT 分離モードを使用せず、使用する場合

  1. READ COMMITTED ISOLATION モードの場合、セッション 2 は待機し続けます
  2. READ_UNCOMMITTED ISOLATION モードを使用すると、セッション 2 で 5000 が返されます (select ステートメントで nolock を使用するのと同じです)。

Oracle では、同等のコマンド セットを実行すると、デフォルトで READ_COMMITTED_SNAPSHOT 分離モードが設定されているかのように動作します。

更新が完了する前に、SNAPSHOT 分離モードが tempdb に書き込むという Microsoft の記事を読みました。

-オラクルはデフォルトでどのようにこれを実現していますか?

-ディスクにも書き込みますか? I / Oの問題が発生しますか?

- Oracle のデフォルトのロック レベルは SQL サーバーとは異なりますか?

あなたの助けと時間を前もってありがとう。

4

2 に答える 2

1

Oracle では、デフォルトでノンブロッキング クエリです。SQL スナップショット分離モードに似ています。ロック動作は引き続き行われますが、トランザクションが影響を受ける行で開始される前にコミットされたデータのみを照会する読み取りには影響しないため、ダーティ リードが回避されます。第 9 章 - ノンブロッキング クエリを参照してください。

于 2018-06-28T08:47:12.113 に答える