Syniti DR

マルチデータベース対応 レプリケーションツール

SQLServerへのレプリケーションで以下のエラーが発生しました。 System.Data.SqlClient.SqlException: IDENTITY_INSERT が OFF に設定されているときは、テーブル ‘XXXX’ の ID 列に明示的な値を挿入できません。

SQLServerのフィールドIdentityの仕様によるものです。Identity以外のPKフィールドを用意するかIdentity自体をOFFにする必要があります。

サプリメンタルロギングの設定でOracle9iでは「Minimal Level」だけにチェックを入れても「Database Level」にも自動でチェックが入ってしまう

Oracle9iの仕様によるものです。

AS/400でジャーナルを作成する手順が知りたいのですが。

下記のブログ記事をご参照ください。

https://www.climb.co.jp/blog_dbmoto/archives/337

DBへの接続設定でIPアドレスの代わりにコンピュータ名の指定は可能ですか?

可能です。

ターゲット→ソースへのリフレッシュは可能ですか?

リフレッシュはソース→ターゲット方向のみサポートしております。

ジャーナルが切り替わった場合、DBMotoもちゃんと切り替えて追ってくれますか?

はい、AS/400側のジャーナルに合わせてDBMotoが参照するジャーナルも自動で切り替わります。

レプリケーション定義を一括で作成する方法はありますか?

予めソース・ターゲットの接続設定を済ませたうえで「マルチレプリケーション作成」を選択することで可能です。

サプリメンタルロギングを設定時の「Minimal Level」と「Database Level」は何が違うのでしょうか?また、実行されるSQLを教えてください。

●Minimal Level

レプリケーションするテーブルのみ(最低限)にサプリメンタルロギングの設定が行われます。

以下のSQLが実行されます。

・サプリメンタルロギング設定時

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA

・レプリケーション作成時

ALTER TABLE テーブル名 ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS
●Database Level

データベース全体(すべてのテーブル)に対してサプリメンタルロギングの設定が行われます。

以下のSQLが実行されます。

・サプリメンタルロギング設定時

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS

シンクロナイゼーションで同一フィールドの同じ値を更新した時にコンフリクト扱いになりますか?

同じ値を更新した場合はコンフリクトとはみなされません。

リフレッシュ実行中にソースに更新があった場合はどうなりますか?

リフレッシュ完了後にミラーリングモードに移行し、更新分が差分レプリケーションされます。

AS/400のエラー「資源の限界を超えた」が発生しましたが原因はなんでしょうか?

下記ブログ記事をご参照ください。

https://www.climb.co.jp/blog_dbmoto/archives/491

1つのソースサーバから複数のターゲットサーバに分散レプリケーションすることは可能ですか?

可能です。詳細は下記ページをご参照ください。

https://www.climb.co.jp/soft/dbmoto/outline/example.html

複数のソースサーバから1つのターゲットサーバに結合レプリケーションすることは可能ですか?

可能です。詳細は下記ページをご参照ください。
https://www.climb.co.jp/soft/dbmoto/outline/example.html

Transaction Latency StatusにThreshold Warningが出る

この Warning は現在時刻と最後にレプリケーションした際の時刻がしきい値を超えたときに「レプリケーションが遅延しています」と警告を出すものです。

OracleからのレプリケーションでORA-01291(ログ・ファイルがありません)が表示される。

OracleのRedoログが1周してDBMotoが参照しに行くIDが既になくなってしまった際に発生するエラーです。
復旧はリフレッシュするか、最新のトランザクションIDを取得する必要があります。
また、このエラーが頻発する場合はRedoログのサイズ設定を見直す必要があります。

ビューのレプリケーションに対応していますか?

参照するベースのテーブルが1つの場合かつSQLServerのビュー更新条件(特定の関数が使用されていないこと)を満たしている場合に限り、リフレッシュのみ可能です。
複数のベーステーブルを参照するビューの場合は、ビューの仕様でinsert, update, deleteが行えず、selectのみ可能となりますので、DBMotoでも同様にレプリケーションは行えなくなります。

複数のテーブル内のレコードを1つのテーブルに結合可能ですか?

可能ですが注意が必要です。
ミラーリング時はPKが各テーブルで重複していなければ問題ありませんが、リフレッシュ時はそのまま実行してしまいますとリフレッシュ前に一度レコードを削除する処理(DBMotoの仕様)が行われます。これを回避するためにスクリプトでリフレッシュ時にレコードを削除しないようブロックする必要があります。
なお、各テーブル内のレコードが結合後に重複する可能性がある場合は、PK代わりのフィールドを新規で作成することでPK重複エラーを回避可能です。

バイナリデータはレプリケーション可能ですか?

可能です。

nullを特定の値に変換してレプリケーションすることは可能でしょうか?

スクリプトを使用することで実現可能です。詳細は下記をご参照ください。
https://www.climb.co.jp/blog_dbmoto/archives/452
https://www.climb.co.jp/blog_dbmoto/archives/460

レプリケーション中にSQLServer側のコネクション数が最大値に達したというエラーが出ます。

SQL Server側とDBMoto側のMax Pool Sizeをご確認ください。DBMoto側のデフォルト値は100です。

ミラーリングモードでも初回でリフレッシュは可能ですか?

可能です。下記の弊社ブログをご参照ください。
DBMotoでの全件リフレッシュ・差分ミラーリングの再設定手順

AS/400からのミラーリングでトランザクションID取得のためにReadボタンを押下するとエラーになります

DBMotoからAS/400のジャーナルレシーバを参照するためのプロシージャを手動で作成した場合に、正しく作成されていない可能性があります。

カタログ・技術資料一覧から以下をご参照ください。
[DBMoto共通]AS400ジャーナル・プロシージャ作成手順書

どのようにして差分レプリケーションが行われますか?

MySQLのバイナリログを参照する方法と、トリガーログテーブルを作成する方法があります。MySQLのバイナリログを使用する場合、拡張ファイルが必要となりますので別途お問い合わせください。

SQL Server Express Editionに対応していますか?

対応しております。ただし差分レプリケーションの際にDistributorを使用することはできず、トリガーテーブルを作成する必要があります。

どのようにして差分レプリケーションが行われますか?

Distributorを参照する方法と、トリガーログテーブルを作成する方法があります。