[an error occurred while processing this directive] [an error occurred while processing this directive]


プログラミング
逆引き
クライアントとの通信
VisMでの通信
Factoryでの通信
WebServiceでの通信
CSP (Cache' Server Pages)
Cache'SQL
設定・性能


【広告】









トランザクション処理

Transaction on Cache'.

 トランザクションとは、一連の処理を一括で処理する単位のことです。

 関連する複数の処理を一つの処理単位としてまとめたもの。金融機関のコンピュータシステムにおける入出金処理のように、一連の作業を全体として一つの処理として管理するために用いる。
 トランザクションとして管理された処理は「すべて成功」か「すべて失敗」のいずれかであることが保証される。例えば、資金移動システムを
コンピュータで処理する場合、出金処理と入金処理は「どちらも成功」か「どちらも失敗」のどちらかであることが要求される。「出金に成功して入金に失敗」すると、出金された資金が宙に浮いてしまうからである。

e-Words:トランザクション

 この例の「出金と入金」や「売り上げと在庫」、「」のように、どちらかの処理が成功して、もう一方の処理が失敗すると残高や在庫などに問題が発生してしまいます。たとえば先日の東証のトラブルはトランザクション処理がうまくいかなかった例だと思われます。yahooニュース

 キャシェーでトランザクションを処理するには、以下のコマンドを使用します。

  Cache' Object Script Cache' SQL
トランザクションの開始 TSTART %BEGTRANS
トランザクションのコミット(確定) TCOMMIT COMMIT WORK
トランザクションのロールバック(取消) TROLLBACK ROLLBACK WORK

 トランザクションの開始をTSTARTコマンドで宣言し、TCOMMITコマンドでトランザクションを確定させます。処理中にエラーがあった場合はTROLLBACKコマンドでトランザクションを取り消し、トランザクション前の状態にデータベースを戻します。

 ためしにCache' ターミナルで実行してみます。

>SET ^A=0

>TSTART

>SET ^A=1

>TCOMMIT

>WRITE ^A
1
>TSTART

>SET ^A=2

>TROLLBACK

>WRITE ^A
1
>

 このように、トランザクションがコミットした場合は変更が反映され、ロールバックした場合は変更が取り消されます。

 ただし、トランザクション中のグローバルは別プロセスからの変更を含めたアクセスが可能です。そのため、LOCKコマンドを使用して他のユーザからの変更を防ぐ必要があります。

 ルーチンとしてまとめると次のような感じになります。

TRAN ;
     SET $ZT="ERR"  ;エラートラップ設定
     TSTART  ;トランザクション開始
     LOCK +^A  ;ロック
     SET ^A=100
     LOCK -^A  ;ロック解除
     TCOMMIT  ;トランザクション確定
     QUIT

ERR ;
     TROLLBACK  ;トランザクション取消
     LOCK -^A  ;ロック解除
     QUIT

 また、トランザクションは入れ子にすることができます。トランザクションの階層は$TLEVELシステム変数を参照することで確認できます。



[an error occurred while processing this directive] [an error occurred while processing this directive]
2012/11/19Update