弊社取扱いのRDBデータレプリケーションンツールDBMotoでは、レプリケーション中にデータベースとのネットワークなどで問題で切断が発生した場合でも、次のインターバル間隔で再度接続をやり直してレプリケーションを継続しようとします。
その場合の挙動は以下の通りです。
- リフレッシュ:最初からやり直し
- ミラーリング・シンクロナイゼーション:最後に処理したトランザクションIDから再開
ミラーリングやシンクロナイゼーションでは途中からの再開となりますが、リフレッシュの場合最初からのやり直しとなってしまいます。
しかし、WAN越しでネットワーク回線の安定性に欠ける場合、もしレコード件数が多いテーブルのリフレッシュに失敗したとき、また最初からやり直すことで時間をロスしてしまう可能性があります。
それが予期される場合にあらかじめ設定することでリフレッシュの挙動を「最後に処理したレコードから再開」にすることができる機能があります。
それは「リフレッシュリカバリ」という機能です。
この「リフレッシュリカバリ」を使えば、リフレッシュ途中でエラーが発生しても、最後に処理したレコードからの再開で時間のロスを防ぐことができます。
※この機能の利用にはソース側テーブルに主キーがある必要があります。
設定箇所ですが、レプリケーションのプロパティを開き、左メニューの「優先」を選択すると、「リフレッシュオプション」内に「リフレッシュリカバリ」というメニューがあります。
これをデフォルトのFalseからTrueに変更すると機能が有効になります。
この機能を有効にすることで、リフレッシュ時のパフォーマンスが若干低下することがありますが、実際にその影響が感じられることはあまりありません。
レコード数が多いテーブルのレプリケーションをお考えの方は是非この機能の活用をご検討ください。
関連したトピックス
- APIからリフレッシュを実行するサンプルスクリプト[C#] [Syniti DR (DBMoto)]
- [DBMoto][スクリプト]条件付きレプリケーションを行うサンプルVBスクリプト
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方⑤:フィールドマッピング関数の書き方
- [DBMoto/SynitiDR]Ritmoトレース取得手順(AS/400, z/OS, Linux, AIX, Windows向けDB2)
- レプリケーションの際にnullを特定の値に変換する方法 その2【リアルタイムレプリケーションツールDBMoto】
- [DBMoto]Oracle順序オブジェクト(シーケンス)のレプリケーションをスクリプトで実現
- 転置した状態のテーブルへのレプリケーション構成方法[Syniti DR(旧DBMoto)]
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方③:グローバルスクリプト用の関数とイベント
- GlueSyncでNoSQL活用を加速:導入編
- GlueSyncでNoSQL活用を加速:通知アラート、ログ、モニタリング