反映トランザクション同期機能は,イベント機能を利用して実現します。処理の流れを次の図に示します。
図3-45 反映トランザクション同期機能の処理の流れ
![[図データ]](figure/rz03s460.gif)
- 注※1
- UAPは次の順番で実行します。
- トランA
- トランB
- hdeeventコマンド
- トランC
- hdeeventコマンドには,送信環境定義のeventsyncオペランドに指定した同期イベントの番号をイベントコードとして指定します。
- 注※2
- BES1,BES2,及びBES3の更新情報の反映処理は,それぞれ異なる反映プロセスによって実行されます。そのため,トランA及びトランBの反映処理は非同期に実行されます。また,トランA及びトランBの反映処理を実行した時点では,まだCOMMITを発行しません。
- 注※3
- 反映プロセスは,同期イベントを反映した時点でほかの反映プロセスを待機します。BES1からBES3までの反映プロセスすべてが同期イベントを反映して,全バックエンドサーバで整合性が取れた時点(全グローバルトランザクションを決着させた後)で,全反映プロセスは一斉にCOMMITを発行します。したがって,トランCに対するCOMMITは,次に同期イベントが実行されるまで発行されません。
- 注意
- この機能を使用すると,反映側Datareplicatorから発生するトランザクション(反映トランザクション)をCOMMITする契機は,同期イベントだけになります。このため,定期的に同期イベントを発生させないと反映トランザクションが長大化し,HiRDBのリソース不足などが発生します。反映側HiRDBのリソースを考慮して,反映トランザクションがエラーにならない間隔で,定期的に同期イベントを実行する必要があります。
定期的に同期イベントを発生させるためのシェルスクリプトのサンプルを次に示します。次のサンプルでは,5秒間隔で同期イベントを発生させます。
#!/bin/sh
if [ -z "$1" ]
then
echo "Please specify syncevent number."
exit 0
fi
if [ $1 -le 0 -o $1 -ge 129 ]
then
echo "Please specify numerical value from 1 to 128. "
exit 0
fi
if [ -z $PDUSER ]
then
echo "Please set PDUSER."
exit 0
fi
echo "Start event of synchronization."
execf=OK
while [ -n $execf ]
do
/opt/hirdbds/bin/hdeevent -n $1
if [ $? = 0 ]
then
echo "event $1 O.K"
else
echo "Execution of hdeevent failed."
exit 0
fi
sleep 5
done
echo "Stop event of synchronization."
exit 1 |