例えば上記のように複数のAS/400にあるテーブル(物理ファイル)のレコードをOracleの1つのテーブルにレコード統合する場合、ソース・ターゲットのコネクション設定やレプリケーションの定義は通常と同じように作成しますが、注意が必要です。
DBMotoの初期レプリケーションであるリフレッシュは、まず最初にターゲットのレコードを削除(Truncate)するため、AS/400各サーバからリフレッシュを行ってしまうと、その都度Oracleのレコードを削除してしまうため、データの整合性が取れません。
回避策として、リフレッシュ時にレコードを削除しないように設定することが可能です。
レプリケーション定義で「リフレッシュ時にレコードを削除しない」スクリプトを記述します。
以下がそのスクリプトです。
DBMoto Ver 9以前の場合
———-
[vb]
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
[/vb]
DBMoto Ver 9.5以降の場合
———-
[vb]
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
[/vb]
このスクリプトは今回のように複数テーブルからの統合目的以外の場合でも、リフレッシュ時に既にあるレコードを削除したくない場合にももちろん適用できます。




RSSフィードを取得する