? トランザクションとは…
– コミットとコミットの間に起こるデータベース へのすべての変更。
? コミットとは…
– トランザクションで実行した変更をすべて 確定すること。
? ロールバックとは…
– トランザクションで実行した変更をすべて 取り消すこと。
トランザクション管理
コミット
コミット
INSERT
INSERT UPDATE
DELETE
ロールバック トランザクシ
ョ ン トランザクション
Oracle --- コミットしてからコミットするまで、明示的に トランザクションが終了させる必要がある。
トランザクション管理
?
トランザクション管理が必要
– 両方の処理が成功したら書き込む(Commit)
– どちらか失敗したら元に戻す(Rollback)
?OraSession
単位、
OraDatabase単位で実行
– OraSession.BeginTrans
トランザクション開始
– OraSession.CommitTrans
書き込み
– OraSession.Rollback
元に戻す
トランザクション管理
OraSession.BeginTrans
OraDatabase.ExecuteSQL _
("Update 口座 Set 残高 = 残高 - 500 Where 口座番号 = 1") OraDatabase.ExecuteSQL _
("Update 口座 Set 残高 = 残高 + 500 Where 口座番号 = 2") OraSession.CommitTrans
Exit Sub ErrHandler:
OraSession.Rollback
? 他のユーザが更新中のデータに対して、別のユーザの 更新を防ぐための排他制御が “ロック” です。
? 一般的なロックのレベル(単位)
– 表
– ページ
– 行
? ロックの単位が大きくなると、他のデータにも不要なロックがか かり、ロック解除待ちが多発するためOLTPシステムにおける処 理効率が大幅に低下します。
表
ページ
行
Oracle の優位点
行レベルロック --同時実行性
--? 他社製RDBMSの行レベル・ロックは、行数に応じて
“勝手に” ページ・レベル、表レベルへとエスカレートしてし まいます。
Update EMP set ….
where age = 30;
Update EMP set ….
where age > 29 and age < 40;
Update EMP set ….
where age < 30;
行レベル ページ・レベル 表レベル
大
ロック・レベル:
小
同時性:
Oracle の優位点
行レベルロック --同時実行性
--? オラクルでは、Oracle Ver.6 以前から完全な行レベル・ロ ックをサポートしています。
? ロック・エントリをメモリで管理するのではなく、データの属 性として保持するため、エスカレーションの発生しない “無 制限の” 行レベル・ロックを実現しています。
? エスカレーションの制御によるオーバーヘッドが無いため
、ヘビ−なOLTP環境での排他制御も効率的に処理可能 です。
Oracle の優位点
行レベルロック --同時実行性
--? 別のユーザが更新途中のデータを参照しようとした場合 でも、一貫性のあるデータ(コミットされたデータ)を参照 できることが保証されることです。
¥12000
¥20000
Update ①
Select
②
③ ¥12000
Commit
or
Rollback
④
or ¥12000
¥20000
Oracle の優位点
行レベルロック --競合しない読み取り一貫性
--分離レベル ダーティリード ファジーリード 仮読取り READ UNCOMMITTED(非コミット読取り) ! ! !
READ COMMITTED(コミット読取り) − ! !
REPEATABLE READ(繰返し可能読取り) − − !
SERIALIZABLE(直列可能) − − −
? ダーティリード
– トランザクションは、あるトランザクションによって書き込まれたまだコミットされていないデータ を読み込みます。
? ファジーリード
– トランザクションはすでに読み取ったデータをもう一度読み取って、他のコミット済みトラ ンザクションがそのデータを変更または削除したかどうか調べます。
? 仮読取り
– トランザクションは問合せを再実行して、検索条件に適合する行一式を返して、別のコミ ット済みトランザクションが条件に適合する追加の行を挿入したかどうかを調べます。
Oracle の優位点
行レベルロック --競合しない読み取り一貫性
--スループットが低下 !!
?
他社製
RDBMSの場合...
¥1200 0
¥2000
0 Select
②
Commit
or
Rollback
Update ①
③
Read Committedモード
¥12000
¥20000
Select
②
Rollback Update
①
④ ③ ¥20000
¥12000
Dirty Readモード
データに一貫性が無い !!
Oracle の優位点
行レベルロック --競合しない読み取り一貫性
--? オラクル独自のマルチバージョニング機構による読取り 一貫性保証。ユーザは常に一貫性のあるデータを、待 ち時間無しで参照できます。
Copy
Update
Update
Copy Copy
Update
REDOバッファ
テーブル
Oracle の優位点
行レベルロック --競合しない読み取り一貫性