AS/400でのレコード全消去時における、DBMotoによるミラーリング動作


DBMotoでは通常、DDL文であるTRUNCATEなどによる変更はミラーリングを行いません。
しかしAS/400において、CLRPFMやCPYFをREPLACEオプションつきで実行した場合などにはミラーリング先のデータベースに対してTRUNCATEを使用した操作を行います。
※ただし、レプリケーション対象であるAS/400物理ファイルのメンバー名とファイル名が異なる場合は、TRUNCATEが実施されません。

・AS/400でCRLPFMを実行した場合
ミラーリング先データベースではTRUNCATEを実行し、AS/400と同様にレコードを全て消去します。

・AS/400でCPYFをREPLACEオプションつきで実行した場合
ミラーリング先データベースではTRUNCATEを実行した後に、コピーされた内容をINSERTにより反映します。

このAS/400側に行った操作をミラーリング先データベースに反映したくない場合は下記のスクリプトを記述する必要があります。
————————————
Namespace DBRS
Public Overrides Sub Record_onBeforeMapping(recSource As IRecord, ByRef AbortRecord As Boolean)

if (recSource.OperationType = enmOperationType.Clear) Then

AbortRecord = True
End if

End Sub
End Class
End Namespace
————————————

このスクリプトを追加するとミラーリング時の動作は次のようになります。

・AS/400でCRLPFMを実行した場合
ミラーリング先のデータベースには何も操作を行いません。

・AS/400でCPYFをREPLACEオプションつきで実行した場合
コピーされた内容をINSERTにより追加します。

関連したトピックス