Data Transmission Service (DTS) を使用して、Elastic Compute Service (ECS) インスタンス上でホストされる自己管理 SQL Server データベースから AnalyticDB for PostgreSQL インスタンスへ、継続的なデータ同期パイプラインを構築します。DTS は初期の完全ロードを実行した後、SQL Server のトランザクションログを活用して変更を継続的にキャプチャし、分析ワークロードと運用データベースとの同期を維持します。
仕組み
DTS は、初期の完全データ同期後に発生する増分変更をキャプチャするために、SQL Server のトランザクションログを読み取ります。この機能を利用するには、ソースデータベースが「完全復元モード」で実行されている必要があります。これにより、トランザクションログが DTS による読み取りが完了するまで変更を十分な期間保持できます。また、DTS は同期遅延を追跡するため、ソースデータベースに <source_table_name>_dts_mysql_heartbeat という名前のハートビートテーブルを追加します。
前提条件
開始前に、以下の点を確認してください。
SQL Server のバージョンが 2008、2008 R2、2012、2014、2016、2017、または 2019 である
同期対象のテーブルにプライマリキーまたは UNIQUE NOT NULL インデックスが定義されている
AnalyticDB for PostgreSQL インスタンスの利用可能なストレージ容量が、ソース SQL Server データベース内の全データサイズより大きい
SQL Server データベースが Always on 可用性グループで展開されている場合、同期コミットモードを使用している
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期および初期完全同期 | 無料 |
| 増分同期 | 有料です。詳細については、「課金概要」をご参照ください。 |
制限事項
サポートされていないスキーマオブジェクト
DTS では、アセンブリ、Service Broker、フルテキストインデックス、フルテキストカタログ、分散スキーマ、分散関数、CLR ストアドプロシージャ、CLR スカラー値関数、CLR テーブル値関数、内部テーブル、システム、集計関数は同期されません。
サポートされていないデータの型
DTS では、以下のデータの型を持つカラムは同期されません:TIMESTAMP、CURSOR、ROWVERSION、HIERARCHYID、SQL_VARIANT、SPATIAL GEOMETRY、SPATIAL GEOGRAPHY、TABLE。
その他の制限
計算列を持つテーブルは同期されません
トランザクション型の DDL 操作は移行されません
サポートされる SQL 操作
DML:INSERT、UPDATE、DELETE
DDL:ADD COLUMN のみ
必要な権限
増分同期が必要かどうかによって、必要な権限が異なります。
完全同期のみ(スキーマ+完全データ)
| データベース | 必要な権限 |
|---|---|
| 自己管理 SQL Server | sysadmin |
| AnalyticDB for PostgreSQL | LOGIN;宛先テーブルに対する SELECT、CREATE、INSERT、UPDATE、DELETE;宛先データベースに対する CONNECT および CREATE;宛先スキーマに対する CREATE;COPY 権限 |
完全同期+増分同期
上記と同じ権限セットが適用されます。AnalyticDB for PostgreSQL のアカウントについては、インスタンスの初期アカウントが既にすべての必要な権限を有しています。
権限付与に関する手順については、以下をご参照ください。
SQL Server:「CREATE USER」および「ユーザーおよび権限の管理」
AnalyticDB for PostgreSQL:「データベースアカウントの作成」および「ユーザーおよび権限の管理」
注意事項
初期完全同期中、DTS はソースおよび宛先インスタンスの読み取り・書き込みリソースを活用するため、両インスタンスの負荷が高まります。そのため、非ピーク時間帯(理想的には、両インスタンスの CPU 利用率が 30 % 未満の時間帯)に同期を実行してください。
同期中にソースデータベースを頻繁にバックアップしないでください。ログファイルは 3 日以上保持してください。DTS が読み取る前にログファイルが切り捨てられると、変更を取得できなくなります。
ソース SQL Server データベースの準備
同期タスクの設定を行う前に、以下の手順を完了してください。これにより、DTS がトランザクションログを読み取り、増分変更をキャプチャできるようになります。
復元モードを完全に設定します。これにより、DTS が増分同期に必要とする変更をトランザクションログが保持できるようになります。次のコマンドを実行するか、SQL Server Management Studio (SSMS) を使用します。SSMS の手順については、「データベースの復元モードを表示または変更する」をご参照ください。
use master; GO ALTER DATABASE <database_name> SET RECOVERY FULL WITH ROLLBACK IMMEDIATE; GO<database_name>をソースデータベースの名前に置き換えてください。例:use master; GO ALTER DATABASE mytestdata SET RECOVERY FULL WITH ROLLBACK IMMEDIATE; GO完全データベースバックアップを作成します。既にバックアップがある場合は、このステップをスキップできます。
プレースホルダー 説明 例 <database_name>ソースデータベースの名前 mytestdata<backup_file_path>バックアップの保存先パスおよびファイル名 D:\backup\dbdata.bakBACKUP DATABASE <database_name> TO DISK='<backup_file_path>'; GO例:
BACKUP DATABASE mytestdata TO DISK='D:\backup\dbdata.bak'; GOトランザクションログをバックアップします。
BACKUP LOG <database_name> TO DISK='<backup_file_path>' WITH init; GO例:
BACKUP LOG mytestdata TO DISK='D:\backup\dblog.bak' WITH init; GO同期するテーブルにクラスター化インデックスを作成します。手順については、「クラスター化インデックスの作成」をご参照ください。
同期タスクの設定
DTS 同期インスタンスを購入します。購入ページで以下の設定を行います。購入手順については、「DTS インスタンスの購入」をご参照ください。
ソースインスタンス:SQL Server
宛先インスタンス:AnalyticDB for PostgreSQL
同期トポロジー:単方向同期
DTS コンソールにログインします。
左側ナビゲーションウィンドウで、データ同期 をクリックします。
同期タスク ページの上部で、宛先インスタンスが存在するリージョンを選択します。
同期インスタンスを検索し、[操作] 列で 同期チャネルの設定 をクリックします。
ソースおよび宛先インスタンスを設定します。
セクション パラメーター 説明 該当なし 同期タスク名 DTS が自動生成する名前です。タスクを識別しやすいように、意味のある名前を指定してください。名前は一意である必要はありません。 ソースインスタンスの詳細 インスタンスタイプ ECS インスタンス上のユーザー作成データベース を選択します。他のインスタンスタイプを選択する場合は、事前に必要な環境を準備してください。詳細については、「事前準備の概要」をご参照ください。 インスタンスリージョン インスタンス購入時に選択したソースリージョンです。読み取り専用です。 ECS インスタンス ID ソースデータベースをホストする ECS インスタンスの ID です。 データベースタイプ 固定値:SQLServer。読み取り専用です。 ポート番号 ソースデータベースのサービスポートです。デフォルト値:3306。 データベースアカウント ソースデータベースのアカウントです。「必要な権限」をご参照ください。 データベースパスワード データベースアカウントのパスワードです。 暗号化 暗号化なし または SSL 暗号化 を選択します。このパラメーターは、中国本土および中国 (香港) リージョンでのみ利用可能です。 説明現在、接続方法 の設定は、中国本土および中国 (香港) リージョンでのみサポートされています。
宛先インスタンスの詳細 インスタンスタイプ 固定値:AnalyticDB for PostgreSQL。読み取り専用です。 インスタンスリージョン インスタンス購入時に選択した宛先リージョンです。読み取り専用です。 インスタンス ID 宛先 AnalyticDB for PostgreSQL インスタンスの ID です。 データベース名 宛先データベースの名前です。 データベースアカウント 宛先データベースのアカウントです。「必要な権限」をご参照ください。 データベースパスワード データベースアカウントのパスワードです。 
「[ホワイトリストの設定と次へ]」をクリックします。DTS は、そのサーバーの CIDR ブロックを自動的に ECS セキュリティグループルールに追加します。ソースデータベースが複数の ECS インスタンスで実行されている場合は、各インスタンスのセキュリティグループルールに DTS サーバーの CIDR ブロックを手動で追加します。DTS の CIDR ブロックの完全な一覧については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
警告セキュリティグループルールまたは IP アドレスホワイトリストに DTS サーバーの CIDR ブロックを追加すると、セキュリティリスクが生じます。続行する前に、以下の予防措置を講じてください。ユーザー名とパスワードのセキュリティを強化すること、公開ポートを制限すること、API 呼び出しを認証すること、ホワイトリストとセキュリティグループルールを定期的に監査すること、および Express Connect、VPN Gateway、または Smart Access Gateway を通じてデータベースを DTS に接続することです。
同期ポリシーおよび同期対象オブジェクトを選択します。
設定 説明 同期の初期化 初期スキーマ同期、初期完全同期、および 初期増分同期 が選択されます。DTS は、増分レプリケーションを開始する前に、スキーマおよびデータを同期します。 既存の宛先テーブルにおける処理モード [事前チェックと中断](デフォルト):ターゲットデータベースに既に同名のテーブルが存在する場合、事前チェックが失敗します。競合するテーブルの名前を変更するには、オブジェクト名マッピング機能を使用します。「同期対象オブジェクトの名前変更」をご参照ください。[エラーを無視して続行]:名前競合チェックをスキップします。スキーマが一致する場合、DTS が重複するプライマリキーを持つレコードをスキップします。スキーマが異なる場合、一部の列のみが同期されるか、タスクが失敗します。 複数テーブルのマージ はい:スキーマが同一の複数のソーステーブルを、単一の宛先テーブルにマージします。これは、AnalyticDB for PostgreSQL でシャーディングされたテーブルを分析目的で統合したい OLTP シャーディングシナリオに有用です。有効化する場合、宛先テーブルに __dts_data_sourceカラム(TEXT 型)を追加して、各レコードのソースを識別します。DTS は、<instance_ID>:<database_name>.<schema_name>.<table_name>の形式で値を書き込みます(例:dts********:dtstestdata.testschema.customer1)。その後、オブジェクト名マッピング機能を使用して、選択した各ソーステーブルの名前を宛先テーブル名に変更します。いいえ(デフォルト)。操作タイプの選択 同期する DML および DDL 操作を選択します。すべてのタイプがデフォルトで選択されています。 同期対象オブジェクトの選択 「[利用可能]」セクションから「[選択済み]」セクションへテーブルを移動します。この異種同期シナリオでは、テーブルのみが同期され、ビュー、トリガー、およびストアドプロシージャは除外されます。宛先インスタンス内のオブジェクトの名前を変更するには、オブジェクト名マッピング機能を使用します。詳細については、「同期対象オブジェクトの名前を変更する」をご参照ください。 宛先オブジェクトに引用符を追加 オブジェクト名に大文字小文字が混在している、英字以外の文字で始まる、または宛先データベースの予約キーワードである場合、はい を選択します。有効化すると、DTS はスキーマ同期および増分同期時に、オブジェクト名をシングルクォートまたはダブルクォートで囲みます。同期後は、クエリ内で引用符付きの名前でこれらのオブジェクトを参照してください。 データベースおよびテーブルの名前変更 オブジェクト名マッピング機能を使用して、同期されたオブジェクトの名前を変更します。詳細については、「オブジェクト名マッピング」をご参照ください。 接続失敗時の再試行時間 DTS がソースまたは宛先データベースへの接続を失った場合、デフォルトで最大 720 分(12 時間)再試行します。この時間内に DTS が再接続できた場合、タスクは再開されます。それ以外の場合、タスクは失敗します。ご要件に応じてこの値を調整してください。DTS が再試行中の間は、インスタンスの課金が発生します。 
各テーブルについて、AnalyticDB for PostgreSQL に同期するテーブルタイプ、プライマリキー列、および分散キーを指定します。プライマリキー列および分布列について詳しくは、「テーブルの管理」および「テーブルのディストリビューションの定義」をご参照ください。

事前チェック をクリックします。DTS はタスク開始前に構成を検証します。いずれかのチェックが失敗した場合、失敗項目の横にある
アイコンをクリックして詳細を表示し、問題を修正して再度事前チェックを実行してください。問題が重大でない場合は、失敗項目を無視して事前チェックを再実行できます。事前チェックが成功した後、事前チェック ダイアログボックスを閉じます。同期タスクは自動的に開始されます。
同期タスク ページで、タスクのステータスが 同期中 に変更されるまで待ちます。

次のステップ
DTS コンソールで同期遅延およびタスクの健全性を監視します。
分散キーとテーブルタイプを使用してクエリパフォーマンスを最適化するために、AnalyticDB for PostgreSQL ドキュメントの「テーブルのディストリビューションを定義する」を確認します。