SQLサーバー 2005
ODBI=2 (READ_COMMITTED)LockTimeout=2 (X_DBMENV.DAT)

WITH_KEY IOアクセス

 

ステップ

アクション (ユーザー)

IO$STS

メッセージ

1

挿入 (1)

OK

IOオペレーションは成功しました。

2

挿入 (2)

ER

レコードはロックされました。

3

削除 (2)

ER

レコードはロックされました。

4

コミット (1)

 

 

5

更新 (1)

OK

IOオペレーションは成功しました。

6

更新 (2)

ER

レコードはロックされました。

7

フェッチ (1)

OK

IOオペレーションは成功しました。

8

フェッチ (2)

ER

レコードはロックされました。

9

コミット (1)

 

 

10

削除 (1)

OK

IOオペレーションは成功しました。

11

挿入 (2)

ER

レコードはロックされました。

12

更新 (2) 削除 (2)

ER

レコードはロックされました。

13

コミット (1)

 

 

 

 

ステップ2、7、12のASAとSQLサーバーの違いに注意してください。これらの違いは、一つのアプリケーションを両方のデータベース上で同じように実行しようとする際、多くの影響を与える可能性があります。例えば、ステップ7は、ユーザーのアプリケーションがレコードを更新し、更新をコミットしない場合、アプリケーションが機能するSQLサーバー上でレコードを再度読み取ることを意味します。その後ASA上でアプリケーションを実行すると、LockTimeoutが設定されている場合には、タイムアウトになり、設定されていなければブロックします。

最後のレコード読み取り IO アクセス

最後のレコード読み取りの前に読み取るレコードが必要なため、これは異なる一連のステップになります。したがって、エラーが発生すると、ステップ13のように、再度レコードをフェッチする必要があります。

ステップ

アクション (ユーザー)

IO$STS

メッセージ

1

挿入 (1)

OK

IOオペレーションは成功しました。

2

挿入 (2)

ER

レコードはロックされました。

3

コミット (1)

 

 

4

フェッチ (1)、フェッチ (2)

OK

IOオペレーションは成功しました。

5

更新 (1)

OK

IOオペレーションは成功しました。

6

更新 (2)

ER

レコードはロックされました。

7

フェッチ (1)

OK

IOオペレーションは成功しました。

8

フェッチ (2)

ER

レコードはロックされました。

9

コミット (1)

 

 

10

フェッチ (1)、フェッチ (2)

OK

IOオペレーションは成功しました。

11

削除 (1)

OK

IOオペレーションは成功しました。

12

挿入 (2)

ER

レコードはロックされました。

13

フェッチ (2) 更新 (2)、フェッチ(2) 削除(2)

ER

レコードはロックされました。

14

コミット (1)

 

 

 

ステップ13は、更新ではなくフェッチ上でロックのタイムアウトを受け取ることに注意してください。ASAはフェッチおよびOracle上に行が存在しないことをレポートしますが、これはフェッチ上では成功しても更新上ではロックのタイムアウトを受け取ります。