このトピックでは、Data Transmission Service (DTS) を使用して AnalyticDB for PostgreSQL インスタンス間でデータを同期する方法について説明します。
前提条件
注意事項
ソースデータベースの制限事項
帯域幅:ソースデータベースをホストするサーバーには、少なくとも 100 Mbit/s のアウトバウンド帯域幅が必要です。そうでない場合、データ同期の速度に影響が出ます。
ソースの AnalyticDB for PostgreSQL インスタンスのカーネルバージョンは 7.2.1.4 以降である必要があります。
ソースデータベースのパラメーター設定:
論理解析を有効にするには、wal_level パラメーターを 設定して logical にする必要があります。
ソースの AnalyticDB for PostgreSQL インスタンスの [インスタンスエディション] が [High-availability Edition] の場合、hot_standby、hot_standby_feedback、および sync_replication_slots パラメーターを on に設定します。これにより、プライマリ/セカンダリのスイッチオーバーによって論理サブスクリプションが中断されるのを防ぎます。
同期オブジェクトの要件:
同期するデータベースの名前にハイフン (-) を含めることはできません (例:dts-testdata)。
同期対象のテーブルには、プライマリキーまたは一意制約が必要です。キーまたは制約内のフィールドは一意である必要があります。そうでない場合、重複データがターゲットデータベースに書き込まれる可能性があります。
DTS は、スキーマ間の継承を持つテーブル、一時テーブル、内部トリガー、一部の関数 (C 言語関数、PROCEDURE および FUNCTION の内部関数)、または拡張機能の同期をサポートしていません。DTS は、一部のカスタムデータ型 (COMPOSITE、ENUM、または RANGE) およびプライマリキー、UNIQUE、CHECK などの制約の同期をサポートしています。
DTS は、パーティションテーブルのスキーマの同期をサポートしていません。同期対象のテーブルがパーティションテーブルの場合、スキーマが同期されるとパーティション情報が失われます。デフォルトでは、テーブルはターゲットデータベースに非パーティションテーブルとして作成されます。
テーブルレベルでオブジェクトを同期し、テーブル名や列名のマッピングなどの編集が必要な場合、テーブル数が 5,000 を超える場合は、テーブルを複数のタスクに分割する必要があります。または、データベース全体を同期するタスクを構成することもできます。そうでない場合、タスクを送信した後にリクエストエラーが発生する可能性があります。
初期スキーマ同期および初期完全データ同期中は、データベースまたはテーブルのスキーマを変更するデータ定義言語 (DDL) 操作を実行しないでください。そうでない場合、データ同期タスクは失敗します。
説明初期完全データ同期中、DTS はソースデータベースにクエリを実行します。これによりメタデータロックが作成され、ソースデータベースでの DDL 操作がブロックされる可能性があります。
ソースデータベースに長時間トランザクションがあり、インスタンスに増分同期タスクが含まれている場合、長時間トランザクションがコミットされる前に生成された先行書き込みログ (WAL) はクリアできず、蓄積される可能性があります。これにより、ソースデータベースのディスク領域が不足する可能性があります。
その他の制限事項
1 つのデータ同期タスクで同期できるのは、1 つのデータベースのデータのみです。複数のデータベースからデータを同期するには、データベースごとに個別のデータ同期タスクを構成する必要があります。
DTS は、ソースデータベースからの DDL 操作の同期をサポートしていません。DTS タスクが開始された後、ソースデータベースで作成された新しいテーブルとその後のデータ変更は、ターゲットデータベースに同期されません。必要に応じて、新しい同期タスクを作成する必要があります。
スキーマがターゲットデータベースに同期された後、スキーマのオーナーはタスクに使用されるデータベースアカウントになります。
デフォルトでは、分散キーはスキーマ同期中に保持されます。ソーステーブルにプライマリキーがある場合、テーブルスキーマが同期されるときにプライマリキー列が保持されます。ソーステーブルにプライマリキーがない場合、テーブルスキーマが同期されるときにデフォルトで分散キーがプライマリキー列として使用されます。
同期対象のテーブルに SERIAL フィールドが含まれている場合、ソースデータベースは自動的にそのフィールドのシーケンスを作成します。したがって、ソースオブジェクト を構成する際に、同期タイプ で スキーマ同期 を選択した場合は、[シーケンス] も選択するか、スキーマ全体を同期することを推奨します。そうしないと、同期インスタンスが失敗する可能性があります。
以下の 3 つのシナリオでは、データを書き込む前に、同期対象のテーブルで
ALTER TABLE schema.table REPLICA IDENTITY FULL;コマンドを実行する必要があります。これにより、データ整合性が確保されます。このコマンドの実行中にテーブルロック操作を行わないでください。そうしないと、テーブルがロックされる可能性があります。事前チェックで関連するチェック項目をスキップした場合、DTS はインスタンスの初期化中にこのコマンドを自動的に実行します。インスタンスが初めて実行されるとき。
同期粒度がスキーマであり、同期対象のスキーマに新しいテーブルが作成されるか、RENAME コマンドを使用して同期対象のテーブルが再構築されるとき。
オブジェクトの変更機能を使用するとき。
説明コマンドで、
schemaとtableを、同期するデータが属するスキーマとテーブルの名前に置き換えてください。この操作はオフピーク時に実行してください。
DTS はデータ内容を検証しますが、シーケンスなどのメタデータは検証しません。メタデータはご自身で検証する必要があります。
ビジネスをターゲットデータベースに切り替えた後、新しいシーケンスの初期値は、ソースデータベースの対応するシーケンスの最大値から増分しません。切り替え前に、ソースデータベースのシーケンスの最大値をクエリし、それをターゲットデータベースの対応するシーケンスの初期値として設定する必要があります。次のコマンドを使用して、ソースデータベースのシーケンス値をクエリできます:
do language plpgsql $$ declare nsp name; rel name; val int8; begin for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S' loop execute format($_$select last_value from %I.%I$_$, nsp, rel) into val; raise notice '%', format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1); end loop; end; $$;説明上記のコマンドによって返される SQL 文には、ソースデータベースのすべてのシーケンスが含まれています。必要に応じて、ターゲットデータベースでこれらの文を実行できます。
表示される同期遅延の精度を確保するために、DTS はソースデータベースに dts_postgres_heartbeat という名前のハートビートテーブルを追加します。
DTS は、増分データの DDL 文、増分テーブルの構造、およびハートビート情報を取得するために、ソースデータベースに次の一時テーブルを作成します。同期中は、これらの一次テーブルを削除しないでください。そうしないと、DTS タスクが異常になります。一時テーブルは、DTS インスタンスがリリースされた後に自動的に削除されます。
public.dts_pg_class、public.dts_pg_attribute、public.dts_pg_type、public.dts_pg_enum、public.dts_postgres_heartbeat、public.dts_ddl_command、public.dts_args_session、およびpublic.aliyun_dts_instance。データ同期中、DTS はソースデータベースにプレフィックス
dts_sync_を持つレプリケーションスロットを作成してデータをレプリケーションします。DTS はこのレプリケーションスロットを使用して、15 分以内にソースデータベースから増分ログを取得します。データ同期が失敗した場合や同期インスタンスがリリースされた場合、DTS はこのレプリケーションスロットを自動的にクリアしようとします。説明データ同期中にタスクが使用するデータベースアカウントのパスワードを変更したり、ソースデータベースから DTS IP アドレスのホワイトリストを削除したりすると、レプリケーションスロットは自動的にクリアできません。この場合、ソースデータベースで手動でレプリケーションスロットをクリアして、それが蓄積されてディスク領域を占有し、ソースデータベースが利用できなくなるのを防ぐ必要があります。
ソースデータベースでフェールオーバーが発生した場合、セカンダリデータベースにログインして手動でレプリケーションスロットをクリアする必要があります。

初期完全データ同期中、DTS はソースデータベースとターゲットデータベースの読み取りおよび書き込みリソースを一部消費します。これにより、データベースの負荷が増加する可能性があります。データ同期を開始する前に、ソースデータベースとターゲットデータベースのパフォーマンスを評価してください。データ同期は、両方のデータベースの CPU 負荷が 30% 未満の場合など、オフピーク時に実行できます。
初期完全データ同期は同時 INSERT 操作を実行するため、ターゲットデータベースのテーブルに断片化が発生します。その結果、ターゲットデータベースのテーブルが占有するストレージ領域は、ソースデータベースよりも大きくなります。
同期インスタンスの実行中:
AnalyticDB for PostgreSQL インスタンスのエンドポイントまたはゾーンを変更しないでください。そうしないと、同期インスタンスは失敗します。
DTS 以外のデータソースがターゲットデータベースにデータを書き込むと、ソースデータベースとターゲットデータベース間でデータ不整合が発生する可能性があります。これにより、同期インスタンスが失敗することさえあります。
インスタンスが失敗した場合、DTS ヘルプデスクは 8 時間以内にインスタンスの回復を試みます。回復プロセス中に、インスタンスの再起動やパラメーターの調整などの操作が実行される場合があります。
説明パラメーターが調整される場合、DTS インスタンスのパラメーターのみが変更され、データベースのパラメーターは変更されません。変更される可能性のあるパラメーターには、「インスタンスパラメーターの変更」で説明されているものが含まれますが、これらに限定されません。
課金
| 同期タイプ | タスク設定料金 |
| スキーマ同期と完全データ同期 | 無料です。 |
| 増分データ同期 | 有料です。詳細については、「課金の概要」をご参照ください。 |
サポート対象オブジェクト
SCHEMA、TABLE
説明PRIMARY KEY、UNIQUE KEY、DATATYPE (組み込みデータ型)、および DEFAULT CONSTRAINT を含みます。
VIEW、INDEX、PROCEDURE、FUNCTION、RULE、SEQUENCE、AGGREGATE、OPERATOR、DOMAIN
サポート対象の増分 SQL 操作
操作タイプ | SQL 操作 |
DML | INSERT、UPDATE、DELETE |
データベースアカウントの権限
データベース | 必要な権限 | アカウント作成と権限付与の方法 |
ソース AnalyticDB for PostgreSQL インスタンス | 同期対象オブジェクトに対する読み取り権限と | 説明
|
宛先 AnalyticDB for PostgreSQL インスタンス | ターゲットデータベースに対する読み取りおよび書き込み権限。 | 説明 初期アカウントまたは RDS_SUPERUSER 権限を持つアカウントを使用できます。 |
操作手順
ターゲットリージョンのデータ同期タスクリストページに移動します。次のいずれかの方法を使用できます。
DTS コンソールから
DTS コンソールにログインします。
左側のナビゲーションウィンドウで、データ同期 をクリックします。
ページの左上隅で、同期インスタンスが配置されているリージョンを選択します。
DMS コンソールから
説明実際の操作は、DMS コンソールのモードとレイアウトによって異なる場合があります。詳細については、「シンプルモードコンソール」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
DMS コンソールにログインします。
上部のメニューバーから、 を選択します。
データ同期タスク の右側で、同期インスタンスのリージョンを選択します。
タスクの作成 をクリックします。タスク設定ページが開きます。
ソースデータベースとターゲットデータベースを構成します。
カテゴリ
構成
説明
なし
タスク名
DTS は自動的にタスク名を生成します。識別しやすいように、わかりやすい名前を指定することを推奨します。名前は一意である必要はありません。
移行元データベース
既存の接続情報の選択
システムに登録されているデータベースインスタンス (新規作成または保存済み) を使用するには、ドロップダウンリストから目的のデータベースインスタンスを選択します。以下のデータベース情報は自動的に構成されます。
説明DMS コンソールでは、この設定項目は DMS データベースインスタンスの選択 です。
データベースインスタンスをシステムに登録していない場合、または登録済みのインスタンスを使用する必要がない場合は、以下のデータベース情報を手動で構成します。
データベースタイプ
AnalyticDB for PostgreSQL を選択します。
アクセス方法
Alibaba Cloud インスタンス を選択します。
インスタンスのリージョン
ソースの AnalyticDB for PostgreSQL インスタンスが存在するリージョンを選択します。
Alibaba Cloud アカウント間でデータを複製
この例では、現在の Alibaba Cloud アカウント下のデータベースインスタンスを使用します。× を選択します。
インスタンス ID
ソースの AnalyticDB for PostgreSQL インスタンスの ID を選択します。
データベース名
ソースの AnalyticDB for PostgreSQL インスタンスで同期するデータを含むデータベースの名前を入力します。
データベースアカウント
ソースの AnalyticDB for PostgreSQL インスタンスのデータベースアカウントを入力します。
データベースのパスワード
データベースアカウントに対応するパスワードを入力します。
移行先データベース
既存の接続情報の選択
システムに登録されているデータベースインスタンス (新規作成または保存済み) を使用するには、ドロップダウンリストから目的のデータベースインスタンスを選択します。以下のデータベース情報は自動的に構成されます。
説明DMS コンソールでは、この設定項目は DMS データベースインスタンスの選択 です。
データベースインスタンスをシステムに登録していない場合、または登録済みのインスタンスを使用する必要がない場合は、以下のデータベース情報を手動で構成します。
データベースタイプ
AnalyticDB for PostgreSQL を選択します。
アクセス方法
Alibaba Cloud インスタンス を選択します。
インスタンスのリージョン
宛先の AnalyticDB for PostgreSQL インスタンスが存在するリージョンを選択します。
インスタンス ID
宛先の AnalyticDB for PostgreSQL インスタンスの ID を選択します。
データベース名
宛先の AnalyticDB for PostgreSQL インスタンスで同期データを受け取るために使用されるデータベースの名前を入力します。
データベースアカウント
宛先の AnalyticDB for PostgreSQL インスタンスのデータベースアカウントを入力します。
データベースのパスワード
データベースアカウントに対応するパスワードを入力します。
構成が完了したら、ページ下部の 接続をテストして続行 をクリックします。
説明DTS サーバーからのアクセスを許可するために、DTS サービスの IP アドレスブロックがソースデータベースとターゲットデータベースのセキュリティ設定に自動または手動で追加されていることを確認してください。詳細については、「DTS サーバーの IP アドレスホワイトリストを追加する」をご参照ください。
タスクオブジェクトを構成します。
オブジェクト設定 ページで、同期するオブジェクトを構成できます。
構成
説明
同期タイプ
デフォルトで [増分同期] が選択されています。また、[スキーマ同期] と [完全データ同期] を選択する必要があります。事前チェックが完了すると、DTS はソースインスタンスの完全データでターゲットクラスターの同期オブジェクトを初期化します。このデータは、後続の増分同期のベースラインとして機能します。
同期する DDL および DML 操作
必要に応じて、インスタンスレベルで増分 SQL 操作を選択します。
説明スキーマまたはテーブルレベルで増分同期の SQL 操作を選択するには、選択中のオブジェクト リストで同期オブジェクトを右クリックし、ショートカットメニューから目的の操作を選択します。
競合するテーブルの処理モード
エラーの事前チェックと報告:ターゲットデータベースに同じ名前のテーブルがあるかチェックします。同じ名前のテーブルが見つかった場合、事前チェック中にエラーが報告され、データ同期タスクは開始されません。それ以外の場合、事前チェックは成功します。
説明ターゲットデータベースで同じ名前のテーブルを削除または名前変更できない場合は、オブジェクト名マッピング機能を使用してターゲットデータベースのテーブル名を変更できます。詳細については、「オブジェクト名のマッピング」をご参照ください。
エラーを無視して続行:ターゲットデータベースでの名前の衝突チェックをスキップします。
警告エラーを無視して続行 を選択すると、データ不整合が発生し、ビジネスにリスクをもたらす可能性があります。例:
テーブルスキーマが一致し、ターゲットデータベースのレコードがソースデータベースのレコードと同じプライマリキーまたは一意キーの値を持つ場合:
完全データ同期中、DTS はターゲットクラスターのレコードを保持します。ソースデータベースの対応するレコードは同期されません。
増分同期中、ソースデータベースのレコードがターゲットデータベースのレコードを上書きします。
テーブルスキーマが一致しない場合、データ初期化が失敗する可能性があります。これにより、一部の列のみが同期されるか、同期が完全に失敗する可能性があります。注意して進めてください。
ストレージエンジンタイプ
移行先インスタンスでのオブジェクト名の大文字化
宛先インスタンスのデータベース、テーブル、および列オブジェクトの名前の大文字/小文字ポリシーを構成できます。デフォルトでは、[DTS デフォルトポリシー] が選択されています。ソースまたは宛先データベースのデフォルトポリシーを使用することも選択できます。詳細については、「宛先オブジェクト名の大文字/小文字ポリシー」をご参照ください。
ソースオブジェクト
ソースオブジェクト ボックスでオブジェクトをクリックし、
をクリックして 選択中のオブジェクト ボックスに移動します。説明スキーマまたはテーブルレベルで同期するオブジェクトを選択できます。
選択中のオブジェクト
宛先インスタンスで同期オブジェクトの名前を設定するには、選択中のオブジェクト ボックスでオブジェクトを右クリックして変更します。詳細については、「オブジェクト名のマッピング」をご参照ください。
同期オブジェクトを削除するには、選択中のオブジェクト ボックスでオブジェクトをクリックし、
をクリックして ソースオブジェクト ボックスに移動します。
説明オブジェクト名マッピング機能を使用すると、マッピングされたオブジェクトに依存する他のオブジェクトの同期が失敗する可能性があります。
テーブルのデータをフィルタリングするための WHERE 条件を設定するには、選択中のオブジェクト ボックスでテーブルを右クリックし、表示されるダイアログボックスでフィルター条件を設定します。詳細については、「フィルター条件の設定」をご参照ください。
増分同期の SQL 操作を選択するには、選択中のオブジェクト ボックスで同期オブジェクトを右クリックし、ダイアログボックスから目的の操作を選択します。
詳細設定へ をクリックします。
構成
説明
タスクのスケジュールに使用する専用クラスターの選択
デフォルトでは、DTS は共有クラスターでタスクをスケジュールするため、選択する必要はありません。タスクの安定性を高めるために、DTS 同期タスクを実行するための専用クラスターを購入できます。詳細については、「DTS 専用クラスターとは」をご参照ください。
失敗した接続の再試行時間
同期タスクの開始後にソースまたはターゲットデータベースへの接続が失敗した場合、DTS はエラーを報告し、直ちに接続のリトライを開始します。デフォルトのリトライ時間は 720 分です。リトライ時間は 10 分から 1,440 分の間でカスタマイズできます。30 分以上の設定を推奨します。指定されたリトライ時間内に DTS が再接続した場合、タスクは自動的に再開されます。それ以外の場合、タスクは失敗します。
説明同じソースまたは宛先を持つ複数の DTS インスタンス (DTS インスタンス A と DTS インスタンス B など) で、ネットワークリトライ時間が A で 30 分、B で 60 分に設定されている場合、短い方の 30 分が適用されます。
DTS は接続リトライ中のタスク実行時間に対して課金するため、ビジネスニーズに基づいてリトライ時間をカスタマイズするか、ソースおよびターゲットデータベースインスタンスがリリースされた後、できるだけ早く DTS インスタンスをリリースすることを推奨します。
移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。
同期タスクの開始後、ソースまたはターゲットデータベースで接続以外の問題 (DDL または DML の実行エラーなど) が発生した場合、DTS はエラーを報告し、直ちに連続的なリトライ操作を開始します。デフォルトのリトライ時間は 10 分です。リトライ時間は 1 分から 1,440 分の間でカスタマイズすることもできます。10 分以上の設定を推奨します。設定されたリトライ時間内に関連操作が成功した場合、同期タスクは自動的に再開されます。それ以外の場合、タスクは失敗します。
重要移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。 の値は、失敗した接続の再試行時間 の値より小さくする必要があります。
完全同期レートを制限するかどうか
完全データ同期フェーズ中、DTS はソースおよびターゲットデータベースの読み取りおよび書き込みリソースを消費し、負荷を増加させる可能性があります。1 秒あたりのソースデータベースのクエリ率 QPS、1 秒あたりの完全移行の行数 RPS、および 1 秒あたりの完全移行データ量 (MB) BPS を構成することで、完全データ同期タスクのレート制限を設定し、ターゲットデータベースへの圧力を軽減できます。
説明この設定項目は、同期タイプ が 完全データ同期 に設定されている場合にのみ利用可能です。
同期インスタンスの実行後に、完全データ同期のレートを調整することもできます。
増分同期率を制限するかどうか
1 秒あたりの増分同期の行数 RPS と 1 秒あたりの増分同期データ量 (MB) BPS を設定することで、増分同期タスクのレート制限を設定し、ターゲットデータベースへの圧力を軽減することもできます。
環境タグ
必要に応じて環境タグを選択してインスタンスを識別できます。この例では必須ではありません。
ETL 機能の設定
抽出、変換、ロード (ETL) 機能を有効にするかどうかを指定します。詳細については、「ETL とは」をご参照ください。有効な値:
[はい]:ETL 機能を構成します。コードエディタにデータ処理文を入力できます。詳細については、「データ移行またはデータ同期タスクで ETL を構成する」をご参照ください。
[いいえ]:ETL 機能を構成しません。
監視アラート
アラートを構成するかどうかを指定します。同期が失敗した場合や遅延が指定されたしきい値を超えた場合、アラート連絡先に通知が送信されます。
[設定しない]:アラートは設定されません。
[設定]:アラートを構成します。アラートのしきい値とアラート通知も設定する必要があります。詳細については、「タスク構成中のモニタリングとアラートの構成」をご参照ください。
任意:前の構成を完了した後、次:データベースおよびテーブルのフィールド設定 をクリックして、AnalyticDB for PostgreSQL の宛先テーブルの タイプ、プライマリキー列の追加、および 配布キー を構成します。
タスクを保存して事前チェックを実行します。
API 操作でこのインスタンスを構成するためのパラメーターを表示するには、次:タスク設定の保存と事前チェック ボタンにマウスを移動し、ツールチップの OpenAPI パラメーターのプレビュー をクリックします。
API パラメーターの表示が完了したら、ページ下部の 次:タスク設定の保存と事前チェック をクリックします。
説明同期ジョブが開始される前に、事前チェックが実行されます。ジョブは事前チェックに合格した後にのみ開始できます。
事前チェックが失敗した場合、失敗した項目の横にある 詳細を表示 をクリックし、プロンプトに従って問題を解決してから、事前チェックを再実行します。
事前チェック中に警告が生成された場合:
チェック項目が失敗し、無視できない場合は、項目の横にある 詳細を表示 をクリックします。その後、指示に従って問題を修正し、事前チェックを再度実行します。
無視できるチェック項目については、アラートの詳細を確認、無視、OK、再度事前チェックを実行 の順にクリックして警告をスキップし、事前チェックを再度実行します。チェック項目の警告を無視すると、データ不整合などの問題が発生し、ビジネスにリスクをもたらす可能性があります。
インスタンスを購入します。
成功率 が 100% になったら、次:インスタンスの購入 をクリックします。
購入 ページで、データ同期インスタンスの課金方法とリンク仕様を選択します。詳細については、次の表をご参照ください。
カテゴリ
パラメーター
説明
新しいインスタンスクラス
課金方法
サブスクリプション:インスタンス作成時にお支払いいただきます。長期的なニーズに適しており、従量課金よりも手頃で、サブスクリプション期間が長いほど割引率が高くなります。
従量課金:時間単位で課金されます。短期的なニーズに適しています。使用後すぐにインスタンスをリリースしてコストを節約できます。
リソースグループ構成
インスタンスが属するリソースグループ。デフォルトは [デフォルトリソースグループ] です。詳細については、「Resource Management とは」をご参照ください。
リンク仕様
DTS は、異なるパフォーマンスレベルの同期仕様を提供します。リンク仕様は同期レートに影響します。ビジネスシナリオに基づいて選択できます。詳細については、「データ同期リンク仕様」をご参照ください。
サブスクリプション期間
サブスクリプションモードでは、サブスクリプションインスタンスの期間と数量を選択します。月次サブスクリプションの場合は 1〜9 か月、年次サブスクリプションの場合は 1、2、3、または 5 年から選択できます。
説明このオプションは、課金方法が サブスクリプション の場合にのみ表示されます。
構成が完了したら、Data Transmission Service (従量課金) 利用規約 を読んで選択します。
購入して起動 をクリックし、OK ダイアログボックスで [OK] をクリックします。
データ同期ページでタスクの進捗状況を確認できます。