AS400でのミラーリング設定時ジャーナル作成手順【リアルタイムレプリケーションツールDBMoto】

AS400/iSeresでのDBMotoミラーリングモードの設定時に、各テーブル毎に設定を行うジャーナル作成手順:

1.ジャーナルの作成

①レシーバの作成
CRTJRNRCV JRNRCV(TDLIBMST/DBRSJ00001) AUT(*ALL)
※ライブラリの指定とレシーバーの名前を設定します。

②ジャーナルの作成
CRTJRN JRN(TDLIBMST/DBRSJ) JRNRCV(TDLIBMST/DBRSJ00001) AUT(*ALL)
※ジャーナルの名前を指定します。

③複数レプリケーション&テーブルを設定(使用)する場合は、当該コマンドを実行する事により
  図の【Read】ボタンを押下したときに、Receiverが自動生成されます。
CHGJRN JRN(TDLIBMST/DBRSJ) JRNRCV(*GEN)

④ジャーナルの起動
STRJRNPF FILE(TDLIBMST/SDTZ1) JRN(TDLIBMST/DBRSJ) IMAGES(*BOTH) OMTJRNE(*OPNCLO)
※SDTZ1(テーブル名)
※レプリケーション対象テーブルに対して上記コマンドの実行が必要となります。

2.追加参考資料

①新しいジャーナルライブラリの作成
CREATE COLLECTION TDLIBMST1
※TDLIBMST1に含まれる全てのテーブルがジャーナルとなります。

②ジャーナルライブラリでないライブラリのジャーナルライブラリ化
CREATE TABLE TDLIBMST1/SDTZ2 AS (SELECT * FROM TDLIBMST/SDTZ2) WITH DATA 

コメントする -->

DBMOTOLIB Libraryの手動での作成方法(AS/400)【リアルタイムレプリケーションツールDBMoto】

DBMOTOLIB Libraryの手動での作成方法

本来、DBMOTOLIB Libraryは自動的に作成されるのですが
何らかの理由で自動作成されない場合、下記の手順にしたがって下さい。

1 .DBMotoの2つのsavefileの存在を確認して下さい。
   ※格納場所:C:Program Files_HiT Software_DBMoto V6ServerFiles

2 .DBMLIB43.SAVFとDBMLIB51.SAVFのファイルが存在しており、
   ローカルPC(e.g., C:DBMLib)にSAVEFileを退避してください。
   ※OS Ver.V4R3を使用している場合:DBMLIB43.SAVF
    OS Ver.V5R1を使用している場合:DBMLIB51.SAVF

3 .DOSプロンプトを実行して、ファイル退避したディレクトリに移動して下さい。
   ※(e.g., C:>cd C:DBMLib)

4 .iSeries/AS400 IP addressのFTPセクションに接続してください。
   ※(e.g., C:/DBMLib>ftp 111.111.1111.111)

5 .更新権限のあるユーザかQSECOFRで、iSeries/AS400に接続してください。

6 .iSeries/AS400のQGPLディレクトリに移動して下さい。
   ※(e.g., ftp> cwd QGPL)

7 .iSeries/AS400のQGPLディレクトリにSavefileを作成して下さい。
   ※(ftp> quote rcmd crtsavf file(QGPL/DBMLIBSAVF) AUT(*ALL))

8 .BINARY modeに変更して下さい。
   ※(e.g., ftp> bin)

9 .ローカルPC(e.g., C:DBMLib)に格納されているSAVEFILEを
   iSeries/AS400のQGPLディレクトリに移動します。
   ※(e.g., ftp> put DBMLIB43.SAVF dbmlibsavf)

10.DBMLIBSAVFをリストアーします。
   ※(e.g.,ftp> quote rcmd rstlib savlib(DBMOTOLIB) dev(*savf) savf(qgpl/dbmlibsavf))

11.DBMLIBSAVFを削除します。
   ※(e.g., ftp> quote dele DBMLIBSAVF)

12.FTPをクローズします。
   ※(e.g.,ftp> quit)

13.最後に、iSeries/AS400にDBMOTOLIB.JRNSQNMストアードプロシジャーを作成します。

【作成コマンド】
コマンドは、バージョンによって2通りあります。
【バージョンV5R0M0以前の場合】

CREATE PROCEDURE DBMOTOLIB.JRNSQNM
(IN JOUR CHAR(10),
IN JLIB CHAR(10),
IN FNMS CHAR(900),
IN JDAT CHAR(8),
IN JTIM CHAR(6),
INOUT NUMSEQ DECIMAL(10,0),
INOUT RECVR CHAR(10),
INOUT LIBRCV CHAR(10),
OUT LSTSQN DECIMAL(10,0),
OUT LSTRECVR CHAR(10),
OUT LSTLIBREC CHAR(10),
OUT FLAG CHAR(1),
OUT CODC CHAR(7),
OUT MSGG CHAR(100))
LANGUAGE CL SPECIFIC DBMOTOLIB.JRNSQNM
NOT DETERMINISTIC
NO SQL
EXTERNAL NAME ‘DBMOTOLIB/JRNSQNM’
PARAMETER STYLE GENERAL

【バージョンV5R0M0以降の場合】

CREATE PROCEDURE DBMOTOLIB.JRNSQNM
(IN JOUR CHAR(10),
IN JLIB CHAR(10),
IN FNMS CHAR(900),
IN JDAT CHAR(8),
IN JTIM CHAR(6),
INOUT NUMSEQ DECIMAL(10,0),
INOUT RECVR CHAR(10),
INOUT LIBRCV CHAR(10),
OUT LSTSQN DECIMAL(10,0),
OUT LSTRECVR CHAR(10),
OUT LSTLIBREC CHAR(10),
OUT FLAG CHAR(1),
OUT CODC CHAR(7),
OUT MSGG CHAR(100))
LANGUAGE CL SPECIFIC DBMOTOLIB.JRNSQNM
NOT DETERMINISTIC
NO SQL
CALLED ON NULL INPUT
EXTERNAL NAME ‘DBMOTOLIB/JRNSQNM’
PARAMETER STYLE GENERAL

コメントする -->

・DBMoto「トランザクションログテーブル」について【リアルタイムレプリケーションツールDBMoto】

Q1:「トランザクションログテーブル」につきましては更新毎にデータ書き足されている模様で、テーブル自体も頻繁に追加されています。 ( _DBM__LOG_nn )
これですとDB領域にも影響が出そうなのですが、定期的な削除等の機能は無いのでしょうか?

→トランザクションログのサイズ制限に関しては、DBMotoが提供している
機能は3つあります。下記の図をご参照ください。

Q2:「トランザクションログ」のため Source DB上に「トリガー」が自動作成されている可能性はありますか?

→はい、Source DB上に「トリガー」が自動生成されております。

Q3:もし設定されていますと他業務でのDBのパフォーマンスに影響が
大きいと思われますが?

→トランザクションログのサイズを制限すると、DBのパフォーマンスに影響が大きくはないと思っております。
但し、行なうミラーリングレプリケーションは大量の場合は、DBパフォーマンスに影響する可能性があります。

コメントする -->

ミラーリングおいてのレコード数を確認の方法【リアルタイムレプリケーションツール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

コメントする -->

ソース・ターゲット接続での「Assembly」フィールドの設定【リアルタイムレプリケーションDBMoto】

ソース・ターゲット接続ウィザードでの「Assembly」フィールドを設定するには、
下記のケースで行なっています。

1. SQL Serverの場合は、インストールされているフレームワークに
SqlClientが含まれていますので、
「Assembly」フィールドを設定する必要はありません。

2. 選択されたデータベースのアセンブリはGACに登録されている場合は、
「Assembly」フィールドを設定する必要はありません。

3. 使用しないアセンブリはGACに登録されている場合は、
「Assembly」フィールドを指定する必要はあります。

※ GACに該当するアセンブリを登録するかどうかの判断を
  .Netプロバイダのメーカーが決定します。

コメントする -->

・DBMotoユーザ事例:エプソン(香港)

●バックグラウンド:

EPSON PRECISION (HONG KONG) LTDはセイコー・エプソンの最大手の海外子会社の1つです。設立は1986年の6月です。Epson Hong Kongもセイコーエプソンの子会社で東南アジア地域のセールス・マーケティングを担当しています。

●使用プラットフォーム:
iSeries/AS400, Windows 2000, Solaris

●当初の問題とHiT Softwareの提供ソリューション:

Epsonは倉庫管理プロジェクトでOracleデータベースを日本のiSeries/AS400に信頼できる方法でレプリケーションする必要がありました。このプロジェクトは「受取」、「入荷」、「出荷」の倉庫機能をカバーするフロントエンドのバーコード・データ収集機器から構成されています。このデータは中段のOracleデータベースにアップロードされます。DBMotoを使用して、データはバックエンドのiSeries/AS400データベースにレプリケートされます。

●製品概要:

DBMotoはリプリケーションが必要な企業サーバやデスクトップ用のリフレッシュとリアルタイムなデータ・レプリケーションを実行します。サポートするデータベースはIBM DB2 UDB (iSeries/AS400, zOS含む), Oracle, Microsoft SQL Server, Microsoft Access, Sybase Adaptive Server Enterprise, MySQLなどのメジャーなデータベースを含みます。

●ユーザのコメント:
“Hit Software provided us with the best AS/400 DB2/400 to Oracle replication tool at an affordable price. We were most impressed by their professional support service.”

— Johnny Ip, Systems Analyst, Epson Precision (Hong Kong)

コメントする -->

・レプリケーションの所要時間を計測する手法【リアルタイムレプリケーションツールDBMoto】

レプリケーションの所要時間を計測するにあたり、レスポンスに影響が無い程度に、各レプリケーション毎にVBScriptを組み込んだテスト手法があります。

使用例を記述いたします。

【使用例】
「ミラーリング」時に終了時間をLogに出力するには下記のコードをVBScript入力画面に記述します。
出力結果は、添付いたします。

【VBScript記述例】
———-

Imports Microsoft.VisualBasic
Imports DBMotoPublic
Imports DBMotoScript
Imports DBRS.GlobalScript

Namespace DBRS
Public Class ReplicationScript : Inherits IReplicationScript

Public Overrides Sub Record_onAfterExecute(recTarget As IRecord)
AddLog(“ミラーリング終了”&Now(), 0)
End Sub

Public Overrides Sub Record_onBeforeExecute(recTarget As IRecord,
ByRef AbortRecord As Boolean)
AddLog(“ミラーリング開始”&Now(), 0)
End Sub

End Class
End Namespace

コメントする -->

・DBMoto6でのDB2/UDB文字化け問題:2007-1-11【リアルタイムレプリケーションツールDBMoto】

DBMoto6でDB2/UDBをソースとして利用したときにターゲットのデータベースに文字化け問題がありました。
またMetafileをDB2/UDBに格納したときに文字化け問題がありました。
この2つの問題は解決しました。(2007-1-11)
詳細についてはお問い合わせください。

コメントする -->

排他制御について【リアルタイムレプリケーションツールDBMoto】

レプリケーションと同時に発生したデータベース更新時の排他制御に関して(Ver6):

【リフレッシュモード】
 DB接続プロパティ設定時に【isolation level】項目で排他制御の挙動を5レベルで選択できます。

 ※リフレッシュモード使用時のみ考慮が必要です。

【ミラーリング/シンクロナイゼーションモード】
 当該モード中はトランザクションログを参照するので、同一テーブルの参照が発生しません。

コメントする -->

DBMoto6でのフォントタイプの設定【リアルタイムレプリケーションツールDBMoto】

【DB2のコネクション設定時】

1.下記図のDB2とのコネクション設定時に【Host CodePage】に 【943-Jan.PC Mixed for Open Env.】を選択をします。

【DBMoto Enterprise Manager での表示設定】
1.DBMotoのツールバー【Tools】⇒【Options】を選択します。

Options画面の【General】シートを選択し、Current GDI Charset(Font)より【Japanese】を選択します。

コメントする -->

DBMoto5 FAQ: 2006-7【リアルタイムレプリケーションツールDBMoto】

Q1)DBMotoでポート番号を変更することが可能ですか。
A1)Oracleの場合:
可能でありません。Oracleのほうで設定することになります。
デフォルト値は1521になっている。変更したい場合は、使用可能ポート番号をtnsnames.oraファイルに設定します。

DB2の場合:
DBMotoで可能です。(Set Connection String Dialog)
デフォールトで適用せれるポート番号は50000と446になっています。
DB2のほうで使用可能ポート番号を追加して、DBMotoでその追加するポート番号が反映されます。

Q2)ターゲットDBを設定する時に、SQLクエリーを変更できますか。
A2) 変更できます。プライマリー、フィールドの追加が可能。

Q3)ジョインレプリケーション(Many-To-One Replication)で抽出条件を設定することは可能でしょうか。またレプリケーションの時、ターゲットテーブルに存在するデータを削除しないようにすることは可能でしょうか。

A3)Scriptでレプリケーションの抽出条件を設定できます。
参照:http://www.hitsw.com/support/kbase/DBMoto5/DBMoto5_1600_JoinScript.htm
「DBMoto5UsersGuide.pdf -> Writing A Replication Script」

Q4)レプリケーションの時、ターゲットテーブルに存在するデータを削除しないようにすることは可能でしょうか。

A4)レプリケーションScriptのRefresh_onBeforeTruncate()のメソッドで下記のコードを追加すれば、ターゲットテーブルに存在データの削除は行われないです。

CancelTruncate = True

コメントする -->

DB2 UDBにDBMotoのMetadataを置く【リアルタイムレプリケーションツールDBMoto】

DBMoto の Metadata を DB2 UDB に作成しようとした際にエラーになる場合があります。

これは Metadata として作成されるいくつかのテーブルの中にレコードサイズの大きいものがあり、デフォルトで作成されているページ・サイズ4KBの表スペースに格納することができないためです。

このような場合にはページ・サイズ8KB以上の新しい表スペースを作成後に Metadata の作成をお試しください。

コメントする -->

データベース接続数の制限設定【リアルタイムレプリケーションツールDBMoto】

Q)複数のテーブルのレプリケーションを設定したときに、一気にではなく2~3の接続を使い回すような動作設定が出来れきますか?

A)接続数の制限はデータベースソース又はデータベースターゲットの接続プロパティに設定出来ます。

データベース接続数の制限設定

(1) DBMotoで設定したDBソース又はDBターゲットの接続数を制限するには、
「Connection Properties」ダイアログで設定する。
(2) ツリービューでDBソース又はDBターゲットのノードを右クリックして、
「Connection Properties」を選択する。
(3) 「Connection Properties」ダイアログで「Max Number of
Concurrent Connection」に接続数を設定する。  
(デフォールト設定は20になっている。)

※「DBMoto5UsersGuide.pdf -> Connection Properties Dialog」を
ご参照ください。

コメントする -->

Oracleをmirroringモードで使う場合【リアルタイムレプリケーションツールDBMoto】

DBMoto で Oracle を mirroring モードのソースあるいは synchronization のソースまたはターゲットで使う場合には追加のステップがあります。

Oracleでmirroring あるいは synchronization を行う場合、更新情報を得るためにREDO ログを使用します。 REDO ログを使用するための確認点、あるいは必要な作業は Oracle のバージョンにより異なっています。

詳細は DBMoto のヘルプの
  Setting Up -> Installing DBMoto for Oracle
をご覧ください。

また、Oracle の connection を作成するときに REDO ログを読むことのできる権限を持ったユーザーを指定する必要があります。 権限についての詳細は Oracle のマニュアルを参照ください。

コメントする -->

DBMoto5 FAQ : 2006-6【リアルタイムレプリケーションツールDBMoto】

(1) メール通知のスクリプトについて:

SendMail (subject, body, smtpserver, from, to) という形で使います。
smtpserver , from , to は省略可能で、Enterprise Manager の
tools->options->[mail]
の設定を使用します。

(2) リフレッシュスケジュールの設定について:

スケジュールの設定種類
・時間
・日
・週 複数曜日設定可
・月 何日という指定と第何の何曜日のどちらかの形式
・年 何月何日という指定と何月の第何の何曜日のどちらかの形式
日~年の場合にはその日の何時に行うかを複数登録可能です。

(3) リプリケーター始動時の refresh 開始について:

リプリケーター始動時にリプリケーションを開始する設定はございません。
リプリケーションのタイミングは構成されたリプリケーションのスケジュールに
より決定されます。
外部から制御する方法としては
i) サービスに登録し、リプリケーターの起動/停止を行う
ii) .NET環境のプログラムから特定のリプリケーションの有効/無効を制御する
という2つの方法があります。

コメントする -->