Data Transmission Service (DTS) を使用して、ApsaraDB RDS for SQL Server から AnalyticDB for PostgreSQL にデータを同期します。DTS は、スキーマ同期、完全データ同期、増分データ同期を処理し、トランザクションデータベースの変更に応じて分析データベースを最新の状態に保ちます。
このシナリオで DTS がサポートする機能
| 機能 | 詳細 |
|---|---|
| サポートされている SQL Server のバージョン | 2012、2014、2016、2017、2019 |
| スキーマ同期オブジェクト | スキーマ、テーブル、ビュー、関数、プロシージャ |
| DDL 操作 | ADD COLUMN のみ。トランザクション DDL 操作はサポートされていません。 |
| DML 操作 | INSERT、UPDATE、DELETE |
| 同期トポロジー | 一方向同期 |
| 課金 | スキーマと完全データ同期: 無料。増分データ同期: 有料。「課金概要」をご参照ください。 |
制限事項
サポートされていないデータ型
DTS は、TIMESTAMP、CURSOR、ROWVERSION、HIERARCHYID、SQL_VARIANT、SPATIAL GEOMETRY、SPATIAL GEOGRAPHY、TABLE のデータ型の列を同期しません。
異種データベースの制約
SQL Server と AnalyticDB for PostgreSQL は異種データベースです。データ型は、これらの間で 1 対 1 にはマッピングされません。開始する前に、「スキーマ同期のデータ型マッピング」を確認し、ビジネスへの影響を評価してください。
ソーステーブルと宛先テーブルの要件
ソーステーブルにはプライマリキーが必要です。
宛先テーブルにはプライマリキーまたは一意なインデックスが必要です。
前提条件
開始する前に、以下を確認してください。
ApsaraDB RDS for SQL Server インスタンス (バージョン 2012、2014、2016、2017、または 2019)。詳細は、「ApsaraDB RDS for SQL Server インスタンスの作成」および「データ同期シナリオの概要」をご参照ください。
AnalyticDB for PostgreSQL インスタンス。詳細は、「AnalyticDB for PostgreSQL インスタンスの作成」をご参照ください。
アカウント権限の変更で説明されている権限を持つデータベースアカウント
必要な権限
同期タスクを設定する前に、次の権限を付与してください。
ApsaraDB RDS for SQL Server
データベースアカウントは、ソースデータベースに対する所有者レベルの権限を持っている必要があります。詳細は、「アカウントの権限を変更する」をご参照ください。
AnalyticDB for PostgreSQL
データベースアカウントには、次の権限が必要です。インスタンスの初期アカウントを使用できます。このアカウントは、デフォルトでこれらの権限を持っています。
LOGIN 権限
宛先テーブルに対する SELECT、CREATE、INSERT、UPDATE、DELETE 権限
宛先データベースに対する CONNECT および CREATE 権限
宛先スキーマに対する CREATE 権限
COPY 権限 (メモリベースのバッチコピー操作に必要)
詳細については、「ユーザーと権限の管理」をご参照ください。
注意事項
DTS は、同期遅延の精度を維持するために、
dts_log_heart_beatという名前のハートビートテーブルをソースデータベースに追加します。DTS は同期中に両方のデータベースの読み取りおよび書き込みリソースを消費します。データベースのパフォーマンス低下を避けるため、同期タスクはオフピーク時間に実行することを推奨します。理想的には、両方のデータベースの CPU 使用率が 30% 未満のときです。
DTS がソースまたは宛先データベースへの接続に失敗した場合、デフォルトで最大 720 分 (12 時間) 再試行します。ビジネス要件に基づいてこの値を調整してください。再試行中も DTS インスタンスの料金は発生します。
DTS の CIDR ブロックがデータベースのホワイトリストまたは ECS のセキュリティグループルールに追加されると、セキュリティリスクが発生する可能性があります。同期を開始する前に、ユーザー名とパスワードのセキュリティ強化、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期的な監査などの予防措置を講じてください。代替案として、Express Connect、VPN Gateway、または Smart Access Gateway を介してデータベースを DTS に接続します。
同期タスクの設定
同期タスクの設定には、DTS インスタンスの購入と設定、同期するオブジェクトの選択、AnalyticDB for PostgreSQL 固有のテーブル設定の 3 つのフェーズが含まれます。
ステップ 1:DTS インスタンスの購入と設定
DTS インスタンスを購入します。購入ページで、以下を設定します。
ソースインスタンス:SQL Server
宛先インスタンス:AnalyticDB for PostgreSQL
同期トポロジー:一方向同期
DTS コンソールにログインします。
左側のナビゲーションウィンドウで、[データ同期] をクリックします。
[同期タスク] ページの上部で、宛先インスタンスが存在するリージョンを選択します。
同期インスタンスを見つけ、[操作] 列の [同期チャネルの設定] をクリックします。
ソースインスタンスと宛先インスタンスを設定します。
セクション パラメーター 説明 該当なし 同期タスク名 このタスクの名前です。タスクを容易に識別できるよう、分かりやすい名前を使用します。タスク名は一意である必要はありません。 ソースインスタンスの詳細 インスタンスタイプ [RDS インスタンス] を選択します。 インスタンスリージョン 購入ページで選択したソースリージョンです。読み取り専用です。 インスタンス ID ソースの ApsaraDB RDS for SQL Server インスタンスの ID です。 データベースアカウント ソースデータベースに対する所有者レベルの権限を持つアカウントです。 データベースのパスワード データベースアカウントのパスワードです。 暗号化 [非暗号化] または [SSL 暗号化] を選択します。SSL 暗号化を使用するには、まず RDS インスタンスで SSL 暗号化を有効化 する必要があります。 説明[暗号化] パラメーターは、中国本土および中国 (香港) リージョンでのみ利用可能です。
宛先インスタンスの詳細 インスタンスタイプ [AnalyticDB for PostgreSQL] に固定されています。 インスタンスリージョン 購入ページで選択したターゲットリージョンです。読み取り専用です。 インスタンス ID 宛先の AnalyticDB for PostgreSQL インスタンスの ID です。 データベース名 ターゲットデータベースの名前です。 データベースアカウント 宛先インスタンスで必要な権限を持つアカウントです。 データベースのパスワード データベースアカウントのパスワードです。 
右下隅の [ホワイトリストの設定と次へ] をクリックします。DTS は、そのサーバーの CIDR ブロックを自動的に Alibaba Cloud データベースインスタンスの IP アドレスホワイトリストおよび ECS でホストされるデータベースのセキュリティグループルールに追加します。データセンター内またはサードパーティのクラウドプラットフォーム上の自己管理データベースの場合は、CIDR ブロックを手動で追加します。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
ステップ 2:同期ポリシーとオブジェクトの選択
同期ポリシーを設定し、同期するオブジェクトを選択します。
テーブルをマージするための要件
[複数テーブルのマージ] が [はい] に設定されている場合:
宛先テーブルに
__dts_data_sourceという名前の列 (データ型:TEXT) を追加します。DTS はこの列を使用して、各行のソースを<データ同期インスタンス ID>:<ソースデータベース名>.<ソーススキーマ名>.<ソーステーブル名>の形式で記録します。例:dts********:dtstestdata.testschema.customer1。オブジェクト名マッピングを使用して、選択したすべてのソーステーブルの名前を AnalyticDB for PostgreSQL の宛先テーブル名に変更します。
タスクで選択されたすべてのソーステーブルは、同じ宛先テーブルにマージされます。特定のテーブルをマージから除外するには、それらのテーブル用に別の同期タスクを作成します。
設定 説明 同期の初期化 [初期スキーマ同期]、[初期完全データ同期]、[初期増分データ同期] はデフォルトで選択されています。DTS は、増分同期を開始する前にスキーマと既存のデータを同期します。 既存のターゲットテーブルでの処理モード 事前チェックとインターセプト:宛先データベースにソーステーブルと同じ名前のテーブルが存在する場合、事前チェックは失敗します。オブジェクト名マッピングを使用して、競合するテーブルの名前を変更します。エラーを無視して続行:重複するテーブル名の事前チェックをスキップします。スキーマが一致する場合、DTS は重複するプライマリキーを持つレコードをスキップします。スキーマが異なる場合、タスクが失敗するか、一部の列のみが同期される可能性があります。 複数テーブルのマージ [はい]:同じスキーマを持つ複数のソーステーブルを単一の宛先テーブルにマージします。OLTP シャーディングのシナリオで、AnalyticDB for PostgreSQL にデータを統合したい場合に便利です。下記の「テーブルをマージするための要件」をご参照ください。[いいえ] (デフォルト):各ソーステーブルは、それぞれの宛先テーブルにマッピングされます。 操作タイプの選択 ビジネス要件に基づいて同期したい操作のタイプを選択します。デフォルトでは、すべての操作タイプが選択されています。 同期するオブジェクトの選択 [利用可能] セクションからオブジェクトを選択し、[選択済み] セクションに移動します。これは異種データベースの同期であるため、テーブルのみが同期され、ビュー、トリガー、ストアドプロシージャは同期されません。オブジェクト名マッピングを使用して、宛先インスタンスのオブジェクトの名前を変更します。 ターゲットオブジェクトに引用符を追加 次のいずれかの条件が適用される場合は、[はい] を選択します:ソースデータベース環境が大文字と小文字を区別し、大文字と小文字が混在した名前を持つ場合。テーブル名が文字以外の文字で始まるか、サポートされていない文字を含む場合 (許可される特殊文字:アンダースコア _、シャープ記号#、ドル記号$)。または、オブジェクト名が宛先データベースの予約キーワードである場合。DTS がデータを同期した後、引用符付きのオブジェクトは引用符付きの名前を使用して参照します。データベースとテーブルの名前変更 オブジェクト名マッピングを使用して、宛先インスタンスのオブジェクトの名前を変更します。 接続失敗時の再試行時間 DTS は、デフォルトで 720 分 (12 時間) 接続失敗を再試行します。要件に応じて調整してください。 
ステップ 3:AnalyticDB for PostgreSQL のテーブル設定
各テーブルについて、AnalyticDB for PostgreSQL インスタンスに同期するためのテーブルタイプ、プライマリキー列、および分散キーを指定します。プライマリキー列および分布列について詳しくは、「テーブルの管理」および「テーブルのディストリビューションの定義」をご参照ください。

右下隅の [事前チェック] をクリックします。DTS は同期タスクを開始する前に事前チェックを実行します。いずれかの項目が失敗した場合:
失敗した項目の横にあるアイコンをクリックして詳細を表示します。
詳細に基づいて問題を修正し、新しい事前チェックを開始します。
問題を修正せずにスキップするには、[失敗した項目を無視] し、[新しい事前チェックを開始] します。
メッセージ [事前チェックに合格しました。] が表示されたら、[事前チェック] ダイアログを閉じます。同期タスクが自動的に開始されます。
初期同期が完了し、タスクのステータスが [同期中] に変わるまで待ちます。[同期タスク] ページでタスクのステータスを監視します。

よくある質問
同期されたテーブルは AnalyticDB for PostgreSQL インスタンスのどこに表示されますか?
スキーマ同期中に、DTS はソースデータベースと同じスキーマ構造を使用して、宛先データベースにテーブルを作成します。たとえば、dtstestdata データベースの dbo スキーマから customer テーブルと Student テーブルを同期する場合、これらのテーブルは宛先インスタンスの dbo スキーマにあります。
