例えば上記のように複数のAS/400にあるテーブル(物理ファイル)のレコードをOracleの1つのテーブルにレコード統合する場合、ソース・ターゲットのコネクション設定やレプリケーションの定義は通常と同じように作成しますが、注意が必要です。
DBMotoの初期レプリケーションであるリフレッシュは、まず最初にターゲットのレコードを削除(Truncate)するため、AS/400各サーバからリフレッシュを行ってしまうと、その都度Oracleのレコードを削除してしまうため、データの整合性が取れません。
回避策として、リフレッシュ時にレコードを削除しないように設定することが可能です。
レプリケーション定義で「リフレッシュ時にレコードを削除しない」スクリプトを記述します。
以下がそのスクリプトです。
DBMoto Ver 9以前の場合
———-
Imports Microsoft.VisualBasic Imports DBMotoPublic Imports DBMotoScript Imports DBRS.GlobalScript Imports System.Data Namespace DBRS Public Class ReplicationScript : Inherits IReplicationScript Public Overrides Sub Refresh_onBeforeTruncate(ByRef CancelTruncate As Boolean) CancelTruncate = true End Sub End Class End Namespace
DBMoto Ver 9.5以降の場合
———-
Imports System
Imports System.Data
Imports Microsoft.VisualBasic
Imports DBMotoPublic
Imports DBMotoScript
Imports DBRS.GlobalScript
Namespace DBRS
Public Class ReplicationScript : Inherits IReplicationScript
Public Overrides Sub Refresh_onBeforeTruncate(ByRef CancelTruncate As Boolean, ByRef Filter As String)
canceltruncate = True
End Sub
End Class
End Namespace
このスクリプトは今回のように複数テーブルからの統合目的以外の場合でも、リフレッシュ時に既にあるレコードを削除したくない場合にももちろん適用できます。
関連したトピックス
- 複数の複製元サーバから1つの複製先サーバへの結合レプリケーションもDBMotoで簡単実現
- [DBMoto]「未マッピング使用」機能によるマッピング外のデータを活用したレプリケーション
- 2つのソーステーブルからターゲットの一つのレコードにレプリケーション
- [DBMoto][スクリプト]条件付きレプリケーションを行うサンプルVBスクリプト
- [Syniti(DBMoto)][スクリプト] 特定カラムの値が変更となった場合、ターゲットのレコードを削除するサンプルスクリプト
- ミラーリングおいてのレコード数を確認の方法【リアルタイムレプリケーションツールDBMoto】
- 外部DLL(COM)の使用方法【リアルタイムレプリケーションツールDBMoto】
- [Syniti(旧DBMoto)]レコード競合(コンフリクト)発生時のレコード内容を出力する方法
- レプリケーションの際にnullを特定の値に変換する方法 その2【リアルタイムレプリケーションツールDBMoto】
- [DBMoto]関数を使用してレプリケーション時のデータを変換する方法(VB/C#言語選択、関数適用、ユーザ関数作成、置換関数、一括設定手順)




RSSフィードを取得する