EnterpriseDB社のPostgres Plus Standard ServerがDBMotoから正しくレプリケーションできるか確認しました。
問題なく動作いたします!
EnterpriseDB社のPostgres Plus Standard ServerがDBMotoから正しくレプリケーションできるか確認しました。
問題なく動作いたします!
DBMotoのインストールは非常に簡単です。
DBMotoはWindowsマシンの.NET Framework上で動作します。
ということで…
■インストール要件
・Windows 2000/Xp/Vista/7、Windows Server 2003/2003R2/2008/2008R2
・.NET Framework 2.0 SP2以上がインストールされていること。
.NET Frameworkについてですが、
Windows Server 2003R2であればVer2.0が、
Windows Vista/Server 2008であればVer3.0が、
Windows 7/Server 2008R2であればVer3.5がプレインストールされているので、そのまま使用可能です。
Windows 2000/XP/Server2003についてはインストールされていなければ予めインストールしておく必要があります。
なお、Ver1.0/1.1では動作しません。最新のVer4.0は動作OKです。
適切な.NET Frameworkがインストールされていない場合はインストール時にエラーが出ます。
■新規インストール手順
1. setip.exeファイルを起動します。
なお、Windows Vista/7/2008/2008R2の場合、管理者権限で実行してください。
2. 「Next」を押下します。
3. 「I accept the license agreement.」にチェックを入れ、「Next」を押下します。
4. インストール先を確認し、「Next」を押下します。通常はデフォルトのままで問題ないはずです。
5. 通常は「Standard Installation」にチェックを入れ、「Next」を押下します。
「Remote Management Center Installation」は、複数台のDBMotoをリモートで管理する場合に選択します。
6. ライセンスファイル取り込みのため、「Import」を押下します。
7. ライセンスファイルを選択します。
8. ライセンスファイルのパスが表示されていることを確認します。
また、通常は「Create a Windows Services for the Data Replicator」にチェックを入れて「Next」を押下します。
これにチェックが入っていると、DBMotoのレプリケーション実行ツール「Data Replicator」がWindowsのサービスとして実行できるようになります。
9. インターネットアクセスがある場合は「Enable ~」に、インターネットアクセスがない場合は「Disable ~」にチェックを入れて「Next」を押下します。
10. 「Next」を押下するとインストールが始まります。
11. 8で「Create a Windows Services for the Data Replicator」にチェックを入れた場合にのみ表示されます。
そのまま右上の×で閉じて問題ありません。
12. インストールは完了です。
以上です。
OracleをソースDBとしたミラーリングレプリケーションにおいて注意点があります。
▼問題点
OracleのテーブルにTimestamp型のフィールドが存在する場合、Oracleからのミラーリングレプリケーション時に
ターゲットDBでTimestamp型のレコードのナノ秒が失われることがある。
※例
2010-09-16-11.08.22.123000
(ソースDB:Oracleで左記のようにTimestamp型レコードを追加・更新する)
↓
2010-09-16-11.08.22.000000
(ミラーリング後、ターゲットDBで左記のようにTimestamp型レコードのナノ秒が000000になってしまうことがある)
▼事象発生条件
下記3つの条件を満たすことで発生します。
・OracleがソースDBであり、ミラーリングかシンクロナイゼーションレプリケーションの場合
・Oracleのバージョンが9.2.0.6 / 10.2.0.1 / 10.2.0.2 / 10.2.0.3 / 10.2.0.4
・Oracle側でTimestamp型レコードに更新があるか、レコード自体の追加を行う
※リフレッシュレプリケーションの場合は問題ありません。
※ターゲットがOracleの場合のミラーリングは問題ありません。
▼原因
Oracleバージョン固有のログマイナー(log miner)のバグです。
▼回避策
問題バージョンにてOracle社提供のバッチを適用するか、当該バージョン以外を使用する。
以上です。
DBMotoから各DBに接続する際には、一部を除いて.NET Driverを使用します。
ここではメジャーDBの.NET Driverについて説明いたします。
・DB2/AS400 ⇒ .NET Driver(Ritmo/i)を使用。DBMotoに含まれるのでインストール不要。
・DB2/UDB ⇒ .NET Driver(Ritmo/DB2)を使用。DBMotoに含まれるのでインストール不要。
・Oracle ⇒ .NET Driverを使用。別途Oracle社からOracle Clientをダウンロードし、.NET Driverをインストール必要。
・SQL Server ⇒ .NET Driverを使用。Microsoftの.NET Framework 2.0以上に含まれるので、事実上インストール不要。
(DBMoto自体が.NET Framework 2.0 SP2上で稼動するため)
・MySQL ⇒ .NET Driverを使用。別途Oracle社からMySQL Connector/NETをダウンロードし、インストール必要。
DBMotoでDB接続設定をする画面では、DBを選択することで自動的に.NET Driverが選択されるようになっています。
※DB2/400の場合

※Oracleの場合

なお、DBによっては.NET Driverの他にOLEDB、ODBCドライバをサポートしています。
しかし、開発元ではパフォーマンス面で.NET Driverを使用することを推奨しております。
デフォルトでは接続ドライバは.NET Driverしか選択できないようになっています。
もし.NET DriverではなくOLEDBやODBCを選択したい場合は、下記の手順で設定変更が必要です。
1. Management Centerのメニューバーから「Tools」→「Options」を選択します。
2. 「Use Only Default Providers」のチェックを外します。

3. DB接続設定画面で、.NET Driver以外のOLEDB・ODBCドライバが選択できるようになっています。
DB2の場合はIBM製.NET Driverも選択できるようになります。

また、Microsoft AccessやNetezzaについては、.NET Driverはなく、ODBCドライバのみのサポートとなります。
DB別対応接続ドライバの詳細については、下記サイトをご確認ください。
■3つのレプリケーションモード
DBMotoでは3つのレプリケーションモードをサポートしています。
●リフレッシュ
ソースDBのレコードをすべてターゲットにコピーします。
内部的にはソースDBのレコードをselectで抽出し、ターゲットDB対してにinsertします。(バルクインサートをサポート)
一回きりのレプリケーションですが、基本的には初期レプリケーションとして一番最初にリフレッシュを行い(イニシャルリフレッシュといいます)、
その後にミラーリングやシンクロナイゼーションを行うのが一般的です。
●ミラーリング
ソースDBのトランザクションを確認し、差分のみをターゲットDBに反映します。
内部的にはソースDBのログやトリガーテーブルを確認してトランザクションがあるか確認し、
トランザクションがあればターゲットDBに対してinsert/update/deleteをSQLクエリで発行します。
なお、ソースDBをチェックする間隔はDBMoto側でインターバル値として設定することになります。
推奨値でもあるデフォルト値は60秒となっています。
お分かりかと思いますが、つまり「完全」なリアルタイムではありません。周期的にインターバル毎にチェックする手法です。
ですので、銀行システムのように即時反映が求められるような用途には向いていないかもしれません。
●シンクロナイゼーション
ソースDBとターゲットDBのトランザクションを確認し、双方の差分をそれぞれ反映します。
つまり双方向のミラーリングです。
■対応DB
対応DBは下記の通りです。レプリケーションモードによって対応DBは異なります。
これは、ミラーリングやシンクロナイゼーションではログやトリガーの参照が必要なためです。(非対応のDBもある)
※リフレッシュの場合

ソース、ターゲット共に全DB対応です。
リフレッシュの場合はログやトリガーの参照がないためですね。
また、メジャーDBの対応バージョンは下記の通りです。(ソース・ターゲット共通)
・DB2/AS400 ⇒ V3R2以上
・DB2/UDB ⇒ Ver5以上
・Oracle ⇒ Ver8.1.7以上
・SQL Server ⇒ Ver7、2000以上
・MySQL ⇒ Ver4.1.5以上
※ミラーリングの場合

ソースは、トランザクションログが開放されているかトリガーが使えるDB、ターゲットは全DB対応です。
ソースはログやトリガーの参照が必須ですが、ターゲットはその必要がないためにこうなります。
また、メジャーDBの対応バージョンは下記の通りです。
・DB2/AS400 ⇒ ソースはV4R3以上、ターゲットはV3R2以上
・DB2/UDB ⇒ ソースはVer7.2以上、ターゲットはVer5以上
・Oracle ⇒ ソース・ターゲット共にVer8.1.7以上
・SQL Server ⇒ ソース・ターゲット共にVer7、2000以上
・MySQL ⇒ ソース・ターゲット共にVer4.1.5以上
※シンクロナイゼーショんの場合

ソース、ターゲット共にトランザクションログが開放されているかトリガーが使えるDBです。
また、メジャーDBの対応バージョンは下記の通りです。(ソース・ターゲット共通)
・DB2/AS400 ⇒ V3R2以上
・DB2/UDB ⇒ Ver7.2以上
・Oracle ⇒ Ver8.1.7以上
・SQL Server ⇒ Ver7、2000以上
・MySQL ⇒ Ver4.1.5以上
その他のDBについては、下記のサイトをご確認ください。
http://www.hitsw.com/support/kbase/DBMoto/Providers_DBMoto.htm(開発元ページ)
以上です。
DBMotoの最新バージョン7がリリースされて3ヶ月。
バージョン7ではエンタープライズ向けとして様々な機能が追加され、インターフェースも一新されました。
ここでは初心に戻ってDBMotoとは何か?ということで簡単にご紹介します。
また、DBMotoの基本的な使用方法やメリット等、役立つ情報を今後ブログでご紹介していく予定です。

DBMotoはひとことで言えば「異種DB間リアルタイムレプリケーションツール」。
DBMotoでは複製元DBを「ソース」、複製先DBを「ターゲット」と呼んでいます。
つまり、構成としては、ソースDB・DBMoto・ターゲットDBで成り立ちます。
イメージとしてはこんな感じ↓
DBMotoでは下記の3つのレプリケーションモードをサポートしています。
・ソースDBのレコードをすべてターゲットにコピーする「リフレッシュ(スナップショット)」モード。
・ソースDBのトランザクションを確認し、差分のみをターゲットDBに反映する「ミラーリング」モード(片方向)。
・ソースDBとターゲットDBのトランザクションを確認し、双方の差分をそれぞれ反映する「シンクロナイゼーション」モード(双方向ミラーリング)。
※レプリケーションモードと対応DBについては、別記事にて詳しくご紹介いたします。
次にDBMotoの画面イメージを2つ。
こちらも改めてご紹介しますが、設定は非常にシンプルで使いやすいのが特徴です。
※サンプル1
こちらはManagement Centerと呼ばれる設定ツール。
左ペインにDBの設定項目が、右ペインにレプリケーションの進捗状況が表示されているところです。
非常にシンプルですね。
※サンプル2
こちらはレプリケーション設定画面。
レプリケーションモード(リフレッシュ・ミラーリング・シンクロナイゼーション)を設定するところです。
最後にDBMoto情報サイトについて。
・DBMoto製品紹介ページ
//www.climb.co.jp/soft/dbmoto/
・DBMoto(IBM i・iSeries・AS/400メイン)特設ページ
//www.climb.co.jp/soft/dbmoto/
・お問合せはこちらから
//www.climb.co.jp/soft/contact/
【補足】開発元について
DBMotoの開発元は米国のSan Jose, CaliforniaにあるHiT Software社です。http://www.hitsw.com/
異種RDBMのデータ転送製品の業界リーダで全世界に販売網を持っています。(日本はクライムが担当)
以上です。
DBMoto7ではWindows Serverのクラスタリング、及びOracle Racを正式サポートしています。
ここではWindowsクラスタの設定手順について説明します。
▼前提条件
・Windows Serverクラスタリング構築が済んでいること
・metadata保存用のDBクラスタリング構築が済んでいること
▼DBMotoインストール
Windowsクラスタリングを構築しているマシン1とマシン2にDBMotoをインストールします。
注意点として、「DB Replocator」のサービスも必ずインストールしておく必要があります。
▼DBMoto設定
○マシン1
1. 新規でmetadataを作成します。
2. metadataの接続先はクラスタ構築済みのSQL Serverとします。
3. ソース・ターゲット・レプリケーションの設定を行います。
4. レプリケーションが正しく行われることを確認します。
5. DBMoto Server AgentのサービスはON、Data ReplocatorのサービスはOFFにしておきます。
○マシン2
1. 新規でmetadataを作成します。
2. metadataの接続先はクラスタ構築済みのSQL Serverとします。
3. マシン1で設定した情報を読み込めていることを確認します。
4. DBMoto Server AgentのサービスはON、Data ReplocatorのサービスはOFFにしておきます。
5. DBMoto Management Centerを閉じておきます。
▼DBMotoクラスタ設定
フェールオーバークラスタマネージャーにて、サービスとアプリケーションに登録されているSQL Serverに対し、DBMotoのData Replicatorを追加で登録します。
このとき、必ずSQL Serverの各サービスが起動した後にDBMotoのData Replucatorが起動するように設定しておきます。
また、Data ReplicatorとSQL Serverの各リソースをマシン1にてオンラインとしておきます。
▼DBMotoクラスタ動作確認
1. マシン1にてレプリケーションをあらかじめ実行しておきます。
2. Hyper-Vマネージャーにて、マシン1を一時停止状態にします。
(障害を想定させるための動作です)
3. マシン2にて、SQL Serverのサービス・DBMotoのサービスがそれぞれ立ち上がることを確認します。
4. レプリケーションが継続されていることを確認します。
以上でDBMotoのクラスタリング構築は完了です。
【2015/10/13追記】
※バージョン8の場合は次の記事をご覧ください。
DB2 LUWのトランザクションログを利用したミラーリング【リアルタイムレプリケーションツールDBMoto】
DBMoto7では、DB2 UDBからのミラーリングの際、
DB2のログを使用することが可能となりました。
(DBMoto6以前ではトリガーテーブルを使用する方法のみでした)
ただし、事前にDB2側で少し準備が必要です。
▼DB2側での設定
C:Program FilesHiT SoftwareDBMoto V7ServerFilesDB2UDB
から対象のDB2のバージョンの拡張ファイルを
<DB2ホームディレクトリ>FUNCTION
にコピーします。コピーした際はファイル名を「db2udbreadlog.dll」に変更します。
DB2の対象データベースにて、パラメータの構成で下記の値を変更します。
LOGRETAIN・・・リカバリー
LOGARCHMETH1・・・LOGRETAIN
上記パラメータを変更すると下記のようにバックアップを要求されますので・・・
オフラインフルバックを行います。
以上でDB2側の準備は完了です。
▼DBMoto側の設定
コネクション設定のトランザクションログ設定の画面で「DB2UDB」を選択します。
「Verify」を押下するとメッセージが表示されますので、
「Install」を押下して「はい」を押下します。
DBMotoにLog Reader Libraryのバージョンが設定されます。
ここでもう一度「Verify」を押下し、確認の画面が表示されます。
ミラーリング設定画面では他DBやDB2トリガーの時と同様に、
「Read」を押下することで最新のトランザクションIDを取得します。
本日は弊社製品、DBMoto7の新機能『マルチシンクロナイゼーション』の概要と設定手順を紹介します。
今までシンクロナイゼーションを行う際には、ソースDBとターゲットDBが一対一になっていることが必須条件でしたが、
今回実装された新機能を利用すると、一対複数を対象として、シンクロナイゼーションを行うことができるようになります。
次に、設定手順の紹介です。
今回は、1対3の条件下でマルチシンクロナイゼーションを行う手順を説明します。
大まかな設定手順としては、
1:ソースDBの設定
2:ターゲットDB1の設定
3:ターゲットDB2の設定
4:ターゲットDB3の設定
5:レプリケーションの設定
6:マルチシンクロナイゼーション用グループの設定
となっております。
通常の設定と異なる所は、
3,4でターゲットDBの数を増加させること、
6でソースとターゲットを一つのまとまりにすること
等が挙げられます。
ターゲットDB数の増加は、通常のシンクロナイゼーションを行う時と
同様な手順で問題ありません。
下記の画像は台数分ターゲットDBを増加した後のものです。

(ソース側がAS/400、ターゲット側がoracle DB)
ターゲットDBを設定した後に、レプリケーションの設定を行い、
最後にマルチシンクロナイゼーション用のグループの設定を行います。
[Next]ボタンをクリックして先へ進んでください。

[Name]にグループ名(必須)、[Description]にグループの詳細情報(任意)を記入した後に、[Next]ボタンをクリックし、次へ進んでください。

右側の新規グループに、マルチシンクロナイゼーションを行うレプリケーション名を選択して、『→』ボタンをクリックします。

選択が終了したら、[Next]ボタンをクリックして次へ進みます。

[Finish]ボタンをクリックして次へ進んでください。

[はい(Y)]ボタンをクリックしてください。

システムトレイにある『DBReplicator』を起動させてください。

モニターにレプリケーションの進行度が表示されます。

DBMoto7ではセキュリティ機能が強化されました。
DBMoto7の管理者はDBMotoのセキュリティ機能かMicrosoft Windows Integrated Securityを利用して
ファンクション・レベルでのオペレーションに関してマルチ・ユーザ・アクセスを管理することができます。

こちらがユーザ設定のトップ画面。
デフォルトでは「Enable Security」がチェックオフです。つまり誰でも自由にDBMotoを操作できる状態です。
DBMoto6では常にこの状態で、ユーザの管理はできない状態でした。

Enable Securityにチェックを入れ、Addを押下すると・・・

ユーザの追加画面が表示されます。
ここでは、認証方式「DBMoto or Windows」、ログインユーザ、パスワードを設定できます。

Permissionタブに移動すると、そのユーザに対して機能別に権限を細かく割り当てることが可能です。
例えば…「metadata作成」「ソース・ターゲット設定」「レプリケーション設定」「レプリケーション実行」などなど。
機能単位で設定することも、ロールで設定することも可能です。

ユーザを追加し終えたところ。
ここでは「climb1」というユーザを作成してみました。ロールは「Administrator」(全権限付与)、認証方式は「DBMoto」です。
もちろん複数ユーザの作成も可能で、ユーザごとに権限の割り振りが可能です。

ユーザの追加が完了したあとに、DBMotoを起動すると、まずはログイン画面が。

ログインに成功すればmetadataが参照できるようになり、設定ができるようになります。
あとは普通に使用するだけですが、ユーザ設定で権限を割り振っていない機能は使用できません。
複数のユーザでDBMotoを管理する場合に重宝しそうな機能です!
DBMoto7では、複数のDBMotoの設定情報(metadata)を単一のManagement Center(旧Enterprise Manager)で管理すること
ができるようになりました。異なるDBMotoとの通信を管理するために、DBMoto Server Agentと呼ばれるWindowsサービスを採用しています。
具体的に画面を用いて説明いたします。
■DBMoto6以前の場合
DBMoto6のEnterprise Managerでは、上記のように自身のDBMotoのmetadataしか参照できませんでした。
■DBMoto7の場合
DBMoto7のManagement Centerでは、上記のようにDBMotoのサーバ単位で参照できるようになりました。
オレンジの枠の部分が、他のDBMotoマシンの情報を参照していることになります。
サーバのIPを設定するだけで簡単にそのDBMotoサーバのmetadataを読み込めますが、下記の点注意が必要です。
・metadataがデフォルトのSQL Server CE以外に保存されていること。
・metadata保存先DBは、仮にそのDBMotoマシンであってもIPアドレスで指定すること。(localhostではダメ)
・そのサーバが参照されることが出来る上限はクライアント3台までです(自身も含む)。4台以上希望の場合は別ライセンスが必要です。
本日はMySQLの『匿名ユーザ』について説明します。
MySQLは、インストールと同時に『匿名ユーザ』と呼ばれる、
ユーザ名とパスワードが空のユーザが作成されます。
この匿名ユーザは、ホストがlocalhostに指定されているため、
userテーブルでソートを行うと、root、匿名ユーザ、自作ユーザという
順番に並べられます。
MySQL にログインする際は、ユーザ名とパスワードを user テーブルを
参照して照合しますが、その際レコードの上から順番に照合します。
また、MySQLはユーザを作成する際に、localhostの他にも%(全てのホスト)を
指定することができます。
%は『全てのホスト』という扱いなので、ホストを%で指定しても
問題なくログインの処理が行えるように感じますが、
実は照合方法に問題があり、実際にはログインを行うことができません。
例として、ユーザネームを『climb』、パスワードを『itsq』ホストを『%』に指定して
ユーザを作成しても、MySQLはまず始めに
1:『localhost』のホストの中の
2:『climb』というユーザーネームがあるか
を参照しに行きます。
合致したデータが無い場合、次は
1:『localhost』のホストの中の
2:『匿名ユーザ』(実際には名前・パスワード共に何も無い物)
を参照しに行きます。
そして最後に
1:『%(全てのホスト)』の中の
2:『climb』というユーザ
を参照しに行きます。
ホストに%を指定した場合、こちらが望む3番目の参照方法の前に
2番目の参照方法で、MySQL側が「条件に合致している」として
この参照方法に引っかかってしまう為、接続に失敗してしまいます。
対策としては、
・ユーザ作成の際に、ホストの指定を正しく行う(%以外の物を使用する)
・匿名ユーザを消去する
等が挙げられます。
※2015年12月21日追記
バージョン8以降をお使いの方は以下の記事をご覧ください。
DBMotoがサポートするログの出力先・・・ファイル、DB、Windowsイベントログ、Apache Log4Net
DBMotoでは、ログの様々な保存形式やサイズの管理をサポートしております。
▼管理画面起動方法
DBMotoのMetadata Explorerから対象のサーバを選択し、
下記の赤線マークのボタン(Data Replicator Options)を押下します。
※画像クリックで拡大。画面はDBMoto7。
※DBMoto6の場合は対象のmetadataを選択し、右クリック→Data Replicator Optionsを選択します。
▼設定画面サンプル
1…ログの保存形式を選択します。
・File
→ファイル形式(*.log)で保存します。
・Database
→DBに保存します。metadataと同じDBに保存するか、他のDBに保存するかをさらに選択できます。
・Windows Event Log
→Windowsのイベントログに保存します。
2…1にてFileを選択した場合に表示され、ファイルの保存サイズや期間を設定できます。
・Only One File
→1ファイルに保存します。
・One File Every ~ days
→~日単位でファイルに保存します。
・One File With Size Limited to ~ Mb
→~MB単位でファイルに保存します。
・Keep Max ~ Log Files
→最大で~ファイルをキープし、それを超えた場合に古いファイルから削除します。
3…チェックを入れることで、historyファイルを取得します。
<historyファイルとは…?>
レプリケーションチェックのインターバルごとに、どのテーブルに対して何件のレプリケーションが成功(失敗)したかを記録するファイルです。
エラーメッセージ等は通常のログファイルに出力されます。
Oracleからのミラーリング、及びシンクロナイゼーションのレプリケーションの場合は、
トランザクションログ、すなわちRedoログの参照の設定が必須となります。
各設定項目については下記の通りです。
●Use Transactional Replication
Oracleからのミラーリング、及びシンクロナイゼーションのレプリケーションの場合は
ここにチェックを入れることでRedoログの参照が可能となります。
●Use Online Dictionary
Oracleのバージョンが9i以降の場合に選択します。
●Use Flat File Dictionary
Oracleのバージョンが8.1.7~9i未満の場合に選択します。
また、Dictionaryファイルのパスを入れる必要があります。
●Raed Archived Logs
ここにチェックを入れることで、Redoログに加えてアーカイブログの参照が可能となります。
DBMotoのLog Viewerを使用することで、効率よくログを調査することができます。
Log Viewerの起動はメニューのMetadataから
1はログファイル名一覧、2はログの一覧です。
・1のログファイルは”C:\Program Files\HiT Software\DBMoto V6\Log”(バージョン6の場合)にあります。
・2のログを選択してダブルクリックすると、ログの詳細と対象レコードが表示されます。
フィルタリング機能を使用することで、絞込みも可能。