DBMotoでは通常、DDL文であるTRUNCATEなどによる変更はミラーリングを行いません。
しかしAS/400において、CLRPFMやCPYFをREPLACEオプションつきで実行した場合などにはミラーリング先のデータベースに対してTRUNCATEを使用した操作を行います。
※ただし、レプリケーション対象であるAS/400物理ファイルのメンバー名とファイル名が異なる場合は、TRUNCATEが実施されません。
・AS/400でCLRPFMを実行した場合
ミラーリング先データベースでは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でCLRPFMを実行した場合
ミラーリング先のデータベースには何も操作を行いません。
・AS/400でCPYFをREPLACEオプションつきで実行した場合
コピーされた内容をINSERTにより追加します。
関連したトピックス
- [DBMoto][スクリプト]条件付きレプリケーションを行うサンプルVBスクリプト
- [Syniti(DBMoto)][スクリプト] 特定カラムの値が変更となった場合、ターゲットのレコードを削除するサンプルスクリプト
- [DBMoto]「未マッピング使用」機能によるマッピング外のデータを活用したレプリケーション
- 外部DLL(COM)の使用方法【リアルタイムレプリケーションツールDBMoto】
- 2つのソーステーブルからターゲットの一つのレコードにレプリケーション
- ・レプリケーションの所要時間を計測する手法【リアルタイムレプリケーションツールDBMoto】
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方④:レプリケーションスクリプト
- ミラーリングおいてのレコード数を確認の方法【リアルタイムレプリケーションツールDBMoto】
- [DBMoto]Oracle順序オブジェクト(シーケンス)のレプリケーションをスクリプトで実現
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方③:グローバルスクリプト用の関数とイベント