ミラーリングおいてのレコード数を確認の方法【リアルタイムレプリケーションツールDBMoto】


※2015年11月26日にバージョン8.5に合わせて改稿。
※バージョン9.0では引数が追加されているので、サンプルスクリプトの宣言部分をそれぞれ下記に変更しご利用ください。
——————————–
◇「Record_onAfterExecute」
Public Overrides Sub Record_onAfterExecute(recTarget As IRecord, Failed As Boolean, e As Exception, ByRef AbortRecord As Boolean,ByRef DisableReplication As Boolean)

◇「Record_onBeforeExecute」
Public Overrides Sub Record_onBeforeExecute(recTarget As IRecord, ByRef AbortRecord As Boolean, ByRef DisableReplication As Boolean)
——————————–

ミラーリングレプリケーションを行なう場合は、ターゲットテーブルのレプリケーション前のレコード数、それとも、レプリケーション後のレコード数をDBMotoログファイルに確認することができます。

レコード数をDBMotoログファイルに出力するには、下記の方法をご参照ください。

1) 該当するミラーリングレプリケーションを使用不可に設定する必要はあります。

2) レプリケーションを右クリックをして、「Replication Properties」を表示します。

3) 「Use Script」のチェックボックスをチェックをします。

4) 「Script…」ボタンを押下して、「Replication Script」エディターを表示します。

5)エディターの左下隅の3番目のボタンを押下して、「References」ダイアログを表示します。
「System.Data.dll」を入力して、「OK」ボタンを押下します。

6) 「Replication Script」エディターに下記のスクリプトを入れます。

——————————–
Imports Microsoft.VisualBasic
Imports DBMotoPublic
Imports DBMotoScript
Imports DBRS.GlobalScript
Imports System.Data
Imports System

Namespace DBRS
Public Class ReplicationScript : Inherits IReplicationScript

Dim conn as IDbConnection = Nothing
Dim cmd as IDbCommand = Nothing
Dim reader as IDataReader = Nothing

‘レプリケーション実行後のメソッド
Public Overrides Sub Record_onAfterExecute(recTarget As IRecord, Failed As Boolean)
Try
conn = TargetConnection
SyncLock(conn)
cmd = conn.CreateCommand
cmd.CommandText = “select count(*) from TEST_TBL”
reader = cmd.ExecuteReader
Dim iNumRecords = -1

If reader.Read Then
iNumRecords = reader.GetInt32(0)
End If

AddLog(“AfterExecute- RecordCount: ” & iNumRecords.ToString, 0)
End SyncLock
Catch ex As Exception
AddLog(“Exception in AfterExecute: ” & ex.ToString,0)
Finally
if (not reader is Nothing) Then
reader.Close
End If
if (not cmd is Nothing) Then
cmd.Dispose
End If
End Try

End Sub

‘レプリケーション実行前のメソッド
Public Overrides Sub Record_onBeforeExecute(recTarget As IRecord, ByRef AbortRecord As Boolean)
Try
conn = TargetConnection
SyncLock(conn)
cmd = conn.CreateCommand
cmd.CommandText = “select count(*) from TEST_TBL”
reader = cmd.ExecuteReader
Dim iNumRecords = -1
If reader.Read Then
iNumRecords = reader.GetInt32(0)
End If
AddLog(“BeforeExecute- RecordCount: ” & iNumRecords.ToString, 0)
End SyncLock
Catch ex As Exception
AddLog(“Exception in BeforeExecute: ” & ex.ToString,0)
Finally
if (not reader is Nothing) Then
reader.Close
End If
if (not cmd is Nothing) Then
cmd.Dispose
End If
End Try
End Sub

End Class
End Namespace

関連したトピックス