データ同期のソースデータベースが PostgreSQL データベース(ApsaraDB RDS for PostgreSQL インスタンスまたは自主管理 PostgreSQL データベースなど)の場合、データ同期タスクを設定する前に、本トピックの注意事項と制限事項をご確認ください。これにより、データ同期タスクが期待通りに実行されます。
PostgreSQL ソースデータベース向け同期ソリューションの概要
以下のソリューションに基づき、同期タスクの注意事項と制限事項をご参照ください。
デフォルトでは、DTS はデータを宛先データベースに同期する際に外部キー制約を無効にします。そのため、ソースデータベースで実行されるカスケード操作や削除操作は、以下の宛先データベースには同期されません。
ApsaraDB RDS for PostgreSQL
AnalyticDB for PostgreSQL
PolarDB for PostgreSQL (Oracle 互換)
ApsaraDB RDS for MySQL
PolarDB for PostgreSQL
自主管理 PostgreSQL データベースまたは ApsaraDB RDS for PostgreSQL インスタンスから AnalyticDB for PostgreSQL インスタンスへの同期
自主管理 PostgreSQL データベースから PolarDB for PostgreSQL (Oracle 互換) インスタンスへの同期
ApsaraDB RDS for PostgreSQL インスタンスから ApsaraDB RDS for MySQL インスタンスへの同期
ApsaraDB RDS for PostgreSQL インスタンスから PolarDB for PostgreSQL インスタンスへの同期
PostgreSQL データベース間の同期
ApsaraDB RDS for PostgreSQL インスタンス間の単方向同期
Type
Description
ソースデータベースの制限事項
同期対象のテーブルにはプライマリキーまたは一意制約が存在し、フィールド値が一意である必要があります。そうでない場合、宛先データベースに重複データが発生する可能性があります。
説明宛先テーブルが DTS によって作成されていない場合(つまり、同期タイプがスキーマ同期に設定されていない場合)、ソースデータベースから同期されるテーブルと同じプライマリキーまたは NULL でない一意制約を持つことを保証する必要があります。そうでない場合、宛先データベースに重複データが発生する可能性があります。
同期対象のデータベース名にハイフン (-) を含めることはできません(例:dts-testdata)。
テーブルレベルでデータを同期し、テーブル名やカラム名のマッピングなどのオブジェクト編集が必要な場合、1 つのタスクで最大 5,000 テーブルまでサポートされます。それ以上のテーブルを同期する場合は、複数のタスクに分割するか、データベース全体を同期するタスクを設定してください。そうしないと、タスク送信後にリクエストエラーが発生する可能性があります。
DTS は、ソースデータベースからの一時テーブル、内部システムトリガー、および一部の関数(C 言語関数および PROCEDURE と FUNCTION の内部関数)の同期をサポートしていません。一方で、一部のカスタムデータ型(COMPOSITE、ENUM、RANGE)および以下の制約(プライマリキー、外部キー、一意、CHECK)の同期はサポートしています。
先行書き込みログ (WAL):
WAL 機能を有効にする必要があります。wal_level パラメーターを logical に設定してください。
増分同期タスクの場合、DTS はソースデータベースの WAL ログを 24 時間以上保持することを要求します。完全同期と増分同期を含むタスクの場合、WAL ログを少なくとも 7 日間保持する必要があります。完全同期完了後は、ログ保持期間を 24 時間以上に変更できます。保持期間が要件を満たさない場合、DTS タスクは WAL ログを取得できず失敗する可能性があります。最悪の場合、データ不整合やデータ損失が発生する可能性があります。必要な保持期間よりも短い保持期間による問題は、DTS サービスレベル契約 (SLA) の適用外となります。
ソースデータベースの操作に関する制限事項
同期タスクが期待通りに実行され、フェールオーバーによる論理サブスクリプションの中断を防ぐため、ApsaraDB RDS for PostgreSQL インスタンスで Logical Replication Slot Failover を有効化する必要があります。詳細については、「Logical Replication Slot Failover」をご参照ください。
ソースデータベースの論理レプリケーションの制限により、増分変更後の同期対象データが 1 件あたり 256 MB を超える場合、同期インスタンスが失敗し、復旧できません。同期インスタンスを再設定する必要があります。
スキーマ同期および初期完全同期中は、データベースまたはテーブルのスキーマを変更するデータ定義言語 (DDL) 操作を実行しないでください。そうしないと、データ同期タスクが失敗します。
説明完全同期フェーズ中、DTS はソースデータベースをクエリし、メタデータロックを取得します。これにより、ソースデータベースでの DDL 操作がブロックされる可能性があります。
ソースインスタンスに長時間トランザクションが存在し、タスクに増分同期が含まれる場合、長時間トランザクションがコミットされる前に発生した先行書き込みログ (WAL) はクリアできません。これにより、WAL ログが蓄積し、ソースインスタンスのディスク領域を枯渇させる可能性があります。
同期インスタンスの実行中にソースデータベースでメジャーエンジンバージョンのアップグレードを実行すると、インスタンスが失敗し、復旧できません。同期インスタンスを再設定する必要があります。
その他の制限事項
1 つのデータ同期タスクでは、1 つのデータベースのみを同期できます。複数のデータベースを同期する場合は、各データベースごとに個別のタスクを設定する必要があります。
DTS は、TimescaleDB 拡張テーブル、スキーマをまたいだ継承を持つテーブル、式に基づく一意なインデックスを持つテーブルの同期をサポートしていません。
拡張機能のインストールによって作成されたスキーマはサポートされていません。タスク設定時にコンソールでこれらのスキーマの情報を検索できません。
同期対象のテーブルに SERIAL 型のフィールドが含まれる場合、ソースデータベースは自動的にそのフィールド用のシーケンスを作成します。そのため、ソースオブジェクト を設定する際、同期タイプ に スキーマ同期 を選択する場合は、シーケンス を選択するか、スキーマ全体を同期することを推奨します。そうしないと、同期インスタンスが正常に実行されない可能性があります。
以下の 3 つのシナリオでは、データ書き込み前にソースデータベースの同期対象テーブルに対して
ALTER TABLE schema.table REPLICA IDENTITY FULL;コマンドを実行する必要があります。これにより、データ整合性が確保されます。このコマンド実行中にテーブルをロックしないでください。デッドロックを防ぐためです。関連する事前チェック項目をスキップした場合、DTS はインスタンス初期化中に自動的にこのコマンドを実行します。インスタンスを初めて実行するとき。
オブジェクト選択の粒度としてスキーマを選択し、スキーマ内に新しいテーブルが作成された場合、または同期対象テーブルが RENAME コマンドを使用して再構築された場合。
同期オブジェクトを変更する機能を使用する場合。
説明コマンド内の
schemaおよびtableは、実際のスキーマ名およびテーブル名に置き換えてください。この操作はオフピーク時間帯に実行することを推奨します。
DTS はデータ内容の検証を行いますが、シーケンスなどのメタデータの検証はサポートしていません。メタデータの検証はご自身で行ってください。
業務を宛先インスタンスに切り替えた後、新しいシーケンスはソースシーケンスの最大値から増分されません。業務切り替え前に、宛先データベースのシーケンス値を更新する必要があります。詳細については、「宛先データベースのシーケンス値の更新」をご参照ください。
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_postgres_heartbeat という名前のハートビートテーブルを追加します。
データ同期中、DTS はソースデータベースに
dts_sync_プレフィックスを持つレプリケーションスロットを作成してデータをレプリケートします。このレプリケーションスロットにより、DTS は過去 15 分以内のソースデータベースからの増分ログを取得できます。データ同期が失敗した場合や同期インスタンスがリリースされた場合、DTS は自動的にレプリケーションスロットをクリアしようと試みます。説明データ同期中にタスクで使用しているソースデータベースアカウントのパスワードを変更したり、ソースデータベースのホワイトリストから DTS の IP アドレスを削除したりすると、レプリケーションスロットは自動的にクリアされません。この場合、ソースデータベースで手動でレプリケーションスロットをクリアする必要があります。これにより、スロットが継続的に蓄積してディスク領域を消費し、ソースデータベースが利用不可になることを防げます。
ソースデータベースでフェールオーバーが発生した場合、セカンダリデータベースにログインしてスロットを手動でクリアする必要があります。

データ同期前に、ソースおよび宛先データベースのパフォーマンスを評価してください。オフピーク時間帯にデータを同期することを推奨します。そうしないと、初期完全同期がソースおよび宛先データベースの読み取り・書き込みリソースを消費し、データベース負荷が増加する可能性があります。
初期完全同期は同時 INSERT 操作を実行します。これにより、宛先データベースでテーブルの断片化が発生します。その結果、初期完全同期完了後、宛先インスタンスの表領域がソースインスタンスよりも大きくなります。
テーブルレベルのデータ同期で、DTS 以外のデータが宛先データベースに書き込まれていない場合、Data Management (DMS) を使用してオンライン DDL 操作を実行できます。詳細については、「テーブルロックなしでスキーマ変更を実行する」をご参照ください。
DTS 同期中は、他のソースから宛先データベースにデータを書き込まないでください。これにより、ソースおよび宛先データベース間でデータ不整合が発生する可能性があります。例えば、他のソースからのデータが宛先データベースに書き込まれている間に DMS を使用してオンライン DDL 操作を実行すると、宛先データベースでデータ損失が発生する可能性があります。
完全同期または増分同期タスクにおいて、ソースデータベースの同期対象テーブルに外部キー、トリガー、イベントトリガーが含まれる場合、宛先データベースアカウントが特権アカウントまたはスーパーユーザ権限を持つ場合、DTS はセッションレベルで一時的に `session_replication_role` パラメーターを `replica` に設定します。宛先データベースアカウントにこれらの権限がない場合は、宛先データベースで手動で `session_replication_role` パラメーターを `replica` に設定する必要があります。この期間中(`session_replication_role` が `replica` に設定されている間)、ソースデータベースでカスケード更新または削除操作が発生すると、データ不整合が発生する可能性があります。DTS タスクのリリース後は、`session_replication_role` パラメーターを `origin` に戻すことができます。
タスクが失敗した場合、DTS テクニカルサポートは 8 時間以内に復旧を試みます。復旧プロセス中、タスクの再起動やパラメーター調整などの操作が実行される可能性があります。
説明パラメーターが調整される場合、DTS タスクパラメーターのみが変更され、データベースパラメーターは変更されません。変更される可能性のあるパラメーターには、インスタンスパラメーターの変更 に記載されているものが含まれますが、これらに限定されません。
パーティションテーブルを同期する場合、親テーブルとその子パーティションの両方を同期オブジェクトに含める必要があります。そうしないと、パーティションテーブルでデータ不整合が発生する可能性があります。
説明PostgreSQL パーティションテーブルの親テーブルは直接データを格納しません。すべてのデータは子パーティションに格納されます。同期タスクには親テーブルとすべての子パーティションを含める必要があります。そうしないと、子パーティションのデータが同期されず、ソースと宛先の間でデータ不整合が発生する可能性があります。
特殊ケース
ソースインスタンスが ApsaraDB RDS for PostgreSQL インスタンスの場合
同期中は、ApsaraDB RDS for PostgreSQL インスタンスのエンドポイントまたはゾーンを変更しないでください。そうしないと、同期が失敗します。
ソースインスタンスが自主管理 PostgreSQL データベースの場合
`max_wal_senders` および `max_replication_slots` パラメーターの値が、現在使用中のレプリケーションスロット数とこの自主管理 PostgreSQL データベースをソースとする作成予定の DTS インスタンス数の合計より大きいことを確認してください。
ソースインスタンスが Google Cloud Platform Cloud SQL for PostgreSQL の場合、ソースデータベースの データベースアカウント に `cloudsqlsuperuser` 権限を持つアカウントを指定する必要があります。同期オブジェクトを選択する際は、このアカウントが管理権限を持つオブジェクトを選択するか、同期対象オブジェクトについてこのアカウントにオーナー権限を付与してください(例:同期対象オブジェクトのオーナーとして関連操作を実行できるようにするため、
GRANT <owner_of_the_object_to_be_synced> TO <source_database_account_for_the_task>コマンドを実行)。説明`cloudsqlsuperuser` 権限を持つアカウントは、別の `cloudsqlsuperuser` 権限を持つアカウントが所有するデータを管理できません。
自主管理 PostgreSQL データベースから ApsaraDB RDS for PostgreSQL インスタンスへの同期
Type
Description
ソースデータベースの制限事項
同期対象のテーブルにはプライマリキーまたは一意制約が存在し、フィールド値が一意である必要があります。そうでない場合、宛先データベースに重複データが発生する可能性があります。
説明宛先テーブルが DTS によって作成されていない場合(つまり、同期タイプがスキーマ同期に設定されていない場合)、ソースデータベースから同期されるテーブルと同じプライマリキーまたは NULL でない一意制約を持つことを保証する必要があります。そうでない場合、宛先データベースに重複データが発生する可能性があります。
同期対象のデータベース名にハイフン (-) を含めることはできません(例:dts-testdata)。
テーブルレベルでデータを同期し、テーブル名やカラム名のマッピングなどのオブジェクト編集が必要な場合、1 つのタスクで最大 5,000 テーブルまでサポートされます。それ以上のテーブルを同期する場合は、複数のタスクに分割するか、データベース全体を同期するタスクを設定してください。そうしないと、タスク送信後にリクエストエラーが発生する可能性があります。
DTS は、ソースデータベースからの一時テーブル、内部システムトリガー、および一部の関数(C 言語関数および PROCEDURE と FUNCTION の内部関数)の同期をサポートしていません。一方で、一部のカスタムデータ型(COMPOSITE、ENUM、RANGE)および以下の制約(プライマリキー、外部キー、一意、CHECK)の同期はサポートしています。
先行書き込みログ (WAL):
WAL 機能を有効にする必要があります。wal_level パラメーターを logical に設定してください。
増分同期タスクの場合、DTS はソースデータベースの WAL ログを 24 時間以上保持することを要求します。完全同期と増分同期を含むタスクの場合、WAL ログを少なくとも 7 日間保持する必要があります。完全同期完了後は、ログ保持期間を 24 時間以上に変更できます。保持期間が要件を満たさない場合、DTS タスクは WAL ログを取得できず失敗する可能性があります。最悪の場合、データ不整合やデータ損失が発生する可能性があります。必要な保持期間よりも短い保持期間による問題は、DTS サービスレベル契約 (SLA) の適用外となります。
自主管理 PostgreSQL データベースでフェールオーバーが発生した場合、同期は失敗します。
`max_wal_senders` および `max_replication_slots` パラメーターの値が、現在使用中のレプリケーションスロット数とこの自主管理 PostgreSQL データベースをソースとする作成予定の DTS インスタンス数の合計より大きいことを確認してください。
ソースインスタンスに長時間トランザクションが存在し、タスクに増分同期が含まれる場合、長時間トランザクションがコミットされる前に発生した先行書き込みログ (WAL) はクリアできません。これにより、WAL ログが蓄積し、ソースインスタンスのディスク領域を枯渇させる可能性があります。
ソースインスタンスが Google Cloud Platform Cloud SQL for PostgreSQL の場合、ソースデータベースの データベースアカウント に `cloudsqlsuperuser` 権限を持つアカウントを指定する必要があります。同期オブジェクトを選択する際は、このアカウントが管理権限を持つオブジェクトを選択するか、同期対象オブジェクトについてこのアカウントにオーナー権限を付与してください(例:同期対象オブジェクトのオーナーとして関連操作を実行できるようにするため、
GRANT <owner_of_the_object_to_be_synced> TO <source_database_account_for_the_task>コマンドを実行)。説明`cloudsqlsuperuser` 権限を持つアカウントは、別の `cloudsqlsuperuser` 権限を持つアカウントが所有するデータを管理できません。
ソースデータベースの論理レプリケーションの制限により、増分変更後の同期対象データが 1 件あたり 256 MB を超える場合、同期インスタンスが失敗し、復旧できません。同期インスタンスを再設定する必要があります。
スキーマ同期および初期完全同期中は、データベースまたはテーブルのスキーマを変更するデータ定義言語 (DDL) 操作を実行しないでください。そうしないと、データ同期タスクが失敗します。
説明完全同期フェーズ中、DTS はソースデータベースをクエリし、メタデータロックを取得します。これにより、ソースデータベースでの DDL 操作がブロックされる可能性があります。
同期インスタンスの実行中にソースデータベースでメジャーエンジンバージョンのアップグレードを実行すると、インスタンスが失敗し、復旧できません。同期インスタンスを再設定する必要があります。
その他の制限事項
1 つのデータ同期タスクでは、1 つのデータベースのみを同期できます。複数のデータベースを同期する場合は、各データベースごとに個別のタスクを設定する必要があります。
DTS は、TimescaleDB 拡張テーブル、スキーマをまたいだ継承を持つテーブル、式に基づく一意なインデックスを持つテーブルの同期をサポートしていません。
拡張機能のインストールによって作成されたスキーマはサポートされていません。タスク設定時にコンソールでこれらのスキーマの情報を検索できません。
同期対象のテーブルに SERIAL 型のフィールドが含まれる場合、ソースデータベースは自動的にそのフィールド用のシーケンスを作成します。そのため、ソースオブジェクト を設定する際、同期タイプ に スキーマ同期 を選択する場合は、シーケンス を選択するか、スキーマ全体を同期することを推奨します。そうしないと、同期インスタンスが正常に実行されない可能性があります。
以下の 3 つのシナリオでは、データ書き込み前にソースデータベースの同期対象テーブルに対して
ALTER TABLE schema.table REPLICA IDENTITY FULL;コマンドを実行する必要があります。これにより、データ整合性が確保されます。このコマンド実行中にテーブルをロックしないでください。デッドロックを防ぐためです。関連する事前チェック項目をスキップした場合、DTS はインスタンス初期化中に自動的にこのコマンドを実行します。インスタンスを初めて実行するとき。
オブジェクト選択の粒度としてスキーマを選択し、スキーマ内に新しいテーブルが作成された場合、または同期対象テーブルが RENAME コマンドを使用して再構築された場合。
同期オブジェクトを変更する機能を使用する場合。
説明コマンド内の
schemaおよびtableは、実際のスキーマ名およびテーブル名に置き換えてください。この操作はオフピーク時間帯に実行することを推奨します。
DTS はデータ内容の検証を行いますが、シーケンスなどのメタデータの検証はサポートしていません。メタデータの検証はご自身で行ってください。
業務を宛先インスタンスに切り替えた後、新しいシーケンスはソースシーケンスの最大値から増分されません。業務切り替え前に、宛先データベースのシーケンス値を更新する必要があります。詳細については、「宛先データベースのシーケンス値の更新」をご参照ください。
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_postgres_heartbeat という名前のハートビートテーブルを追加します。
データ同期中、DTS はソースデータベースに
dts_sync_プレフィックスを持つレプリケーションスロットを作成してデータをレプリケートします。このレプリケーションスロットにより、DTS は過去 15 分以内のソースデータベースからの増分ログを取得できます。データ同期が失敗した場合や同期インスタンスがリリースされた場合、DTS は自動的にレプリケーションスロットをクリアしようと試みます。説明データ同期中にタスクで使用しているソースデータベースアカウントのパスワードを変更したり、ソースデータベースのホワイトリストから DTS の IP アドレスを削除したりすると、レプリケーションスロットは自動的にクリアされません。この場合、ソースデータベースで手動でレプリケーションスロットをクリアする必要があります。これにより、スロットが継続的に蓄積してディスク領域を消費し、ソースデータベースが利用不可になることを防げます。
ソースデータベースでフェールオーバーが発生した場合、セカンダリデータベースにログインしてスロットを手動でクリアする必要があります。

データ同期前に、ソースおよび宛先データベースのパフォーマンスを評価してください。オフピーク時間帯にデータを同期することを推奨します。そうしないと、初期完全同期がソースおよび宛先データベースの読み取り・書き込みリソースを消費し、データベース負荷が増加する可能性があります。
初期完全同期は同時 INSERT 操作を実行します。これにより、宛先データベースでテーブルの断片化が発生します。その結果、初期完全同期完了後、宛先インスタンスの表領域がソースインスタンスよりも大きくなります。
テーブルレベルのデータ同期で、DTS 以外のデータが宛先データベースに書き込まれていない場合、Data Management (DMS) を使用してオンライン DDL 操作を実行できます。詳細については、「テーブルロックなしでスキーマ変更を実行する」をご参照ください。
DTS 同期中は、他のソースから宛先データベースにデータを書き込まないでください。これにより、ソースおよび宛先データベース間でデータ不整合が発生する可能性があります。例えば、他のソースからのデータが宛先データベースに書き込まれている間に DMS を使用してオンライン DDL 操作を実行すると、宛先データベースでデータ損失が発生する可能性があります。
完全同期または増分同期タスクにおいて、ソースデータベースの同期対象テーブルに外部キー、トリガー、イベントトリガーが含まれる場合、宛先データベースアカウントが特権アカウントまたはスーパーユーザ権限を持つ場合、DTS はセッションレベルで一時的に `session_replication_role` パラメーターを `replica` に設定します。宛先データベースアカウントにこれらの権限がない場合は、宛先データベースで手動で `session_replication_role` パラメーターを `replica` に設定する必要があります。この期間中(`session_replication_role` が `replica` に設定されている間)、ソースデータベースでカスケード更新または削除操作が発生すると、データ不整合が発生する可能性があります。DTS タスクのリリース後は、`session_replication_role` パラメーターを `origin` に戻すことができます。
タスクが失敗した場合、DTS テクニカルサポートは 8 時間以内に復旧を試みます。復旧プロセス中、タスクの再起動やパラメーター調整などの操作が実行される可能性があります。
説明パラメーターが調整される場合、DTS タスクパラメーターのみが変更され、データベースパラメーターは変更されません。変更される可能性のあるパラメーターには、インスタンスパラメーターの変更 に記載されているものが含まれますが、これらに限定されません。
パーティションテーブルを同期する場合、親テーブルとその子パーティションの両方を同期オブジェクトに含める必要があります。そうしないと、パーティションテーブルでデータ不整合が発生する可能性があります。
説明PostgreSQL パーティションテーブルの親テーブルは直接データを格納しません。すべてのデータは子パーティションに格納されます。同期タスクには親テーブルとすべての子パーティションを含める必要があります。そうしないと、子パーティションのデータが同期されず、ソースと宛先の間でデータ不整合が発生する可能性があります。
ApsaraDB RDS for PostgreSQL インスタンス間の双方向同期
Type
Description
ソースおよび宛先データベースの制限事項
同期対象のテーブルにプライマリキーまたは一意制約がない場合、タスク設定時に Exactly-Once 書き込み機能を有効化する必要があります。そうしないと、宛先データベースに重複データが発生する可能性があります。詳細については、「プライマリキーまたは一意制約のないテーブルの同期」をご参照ください。
同期対象のデータベース名にハイフン (-) を含めることはできません(例:dts-testdata)。
テーブルレベルでデータを同期し、テーブル名やカラム名のマッピングなどのオブジェクト編集が必要な場合、1 つのタスクで最大 5,000 テーブルまでサポートされます。それ以上のテーブルを同期する場合は、複数のタスクに分割するか、データベース全体を同期するタスクを設定してください。そうしないと、タスク送信後にリクエストエラーが発生する可能性があります。
DTS は、ソースデータベースからの一時テーブル、内部システムトリガー、および一部の関数(C 言語関数および PROCEDURE と FUNCTION の内部関数)の同期をサポートしていません。一方で、一部のカスタムデータ型(COMPOSITE、ENUM、RANGE)および以下の制約(プライマリキー、外部キー、一意、CHECK)の同期はサポートしています。
先行書き込みログ (WAL):
WAL 機能を有効にする必要があります。wal_level パラメーターを logical に設定してください。
増分同期タスクの場合、DTS はソースデータベースの WAL ログを 24 時間以上保持することを要求します。完全同期と増分同期を含むタスクの場合、WAL ログを少なくとも 7 日間保持する必要があります。完全同期完了後は、ログ保持期間を 24 時間以上に変更できます。保持期間が要件を満たさない場合、DTS タスクは WAL ログを取得できず失敗する可能性があります。最悪の場合、データ不整合やデータ損失が発生する可能性があります。必要な保持期間よりも短い保持期間による問題は、DTS サービスレベル契約 (SLA) の適用外となります。
ソースデータベースの操作に関する制限事項
同期タスクが期待通りに実行され、フェールオーバーによる論理サブスクリプションの中断を防ぐため、ApsaraDB RDS for PostgreSQL インスタンスで Logical Replication Slot Failover を有効化する必要があります。詳細については、「Logical Replication Slot Failover」をご参照ください。
ソースデータベースの論理レプリケーションの制限により、増分変更後の同期対象データが 1 件あたり 256 MB を超える場合、同期インスタンスが失敗し、復旧できません。同期インスタンスを再設定する必要があります。
スキーマ同期および初期完全同期中は、データベースまたはテーブルのスキーマを変更するデータ定義言語 (DDL) 操作を実行しないでください。そうしないと、データ同期タスクが失敗します。
説明完全同期フェーズ中、DTS はソースデータベースをクエリし、メタデータロックを取得します。これにより、ソースデータベースでの DDL 操作がブロックされる可能性があります。
ソースインスタンスに長時間トランザクションが存在し、タスクに増分同期が含まれる場合、長時間トランザクションがコミットされる前に発生した先行書き込みログ (WAL) はクリアできません。これにより、WAL ログが蓄積し、ソースインスタンスのディスク領域を枯渇させる可能性があります。
同期インスタンスの実行中にソースデータベースでメジャーエンジンバージョンのアップグレードを実行すると、インスタンスが失敗し、復旧できません。同期インスタンスを再設定する必要があります。
その他の制限事項
1 つのデータ同期タスクでは、1 つのデータベースのみを同期できます。複数のデータベースを同期する場合は、各データベースごとに個別のタスクを設定する必要があります。
DTS は、TimescaleDB 拡張テーブル、スキーマをまたいだ継承を持つテーブル、式に基づく一意なインデックスを持つテーブルの同期をサポートしていません。
拡張機能のインストールによって作成されたスキーマはサポートされていません。タスク設定時にコンソールでこれらのスキーマの情報を検索できません。
同期対象のテーブルに 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 文には、ソースデータベースのすべてのシーケンスが含まれます。必要に応じて、これらの SQL 文を宛先データベースで実行してください。
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_postgres_heartbeat という名前のハートビートテーブルを追加します。
データ同期中、DTS はソースデータベースに
dts_sync_プレフィックスを持つレプリケーションスロットを作成してデータをレプリケートします。このレプリケーションスロットにより、DTS は過去 15 分以内のソースデータベースからの増分ログを取得できます。データ同期が失敗した場合や同期インスタンスがリリースされた場合、DTS は自動的にレプリケーションスロットをクリアしようと試みます。説明データ同期中にタスクで使用しているソースデータベースアカウントのパスワードを変更したり、ソースデータベースのホワイトリストから DTS の IP アドレスを削除したりすると、レプリケーションスロットは自動的にクリアされません。この場合、ソースデータベースで手動でレプリケーションスロットをクリアする必要があります。これにより、スロットが継続的に蓄積してディスク領域を消費し、ソースデータベースが利用不可になることを防げます。
ソースデータベースでフェールオーバーが発生した場合、セカンダリデータベースにログインしてスロットを手動でクリアする必要があります。

データ同期前に、ソースおよび宛先データベースのパフォーマンスを評価してください。オフピーク時間帯にデータを同期することを推奨します。そうしないと、初期完全同期がソースおよび宛先データベースの読み取り・書き込みリソースを消費し、データベース負荷が増加する可能性があります。
初期完全同期は同時 INSERT 操作を実行します。これにより、宛先データベースでテーブルの断片化が発生します。その結果、初期完全同期完了後、宛先インスタンスの表領域がソースインスタンスよりも大きくなります。
テーブルレベルのデータ同期で、DTS 以外のデータが宛先データベースに書き込まれていない場合、Data Management (DMS) を使用してオンライン DDL 操作を実行できます。詳細については、「テーブルロックなしでスキーマ変更を実行する」をご参照ください。
DTS 同期中は、他のソースから宛先データベースにデータを書き込まないでください。これにより、ソースおよび宛先データベース間でデータ不整合が発生する可能性があります。例えば、他のソースからのデータが宛先データベースに書き込まれている間に DMS を使用してオンライン DDL 操作を実行すると、宛先データベースでデータ損失が発生する可能性があります。
完全同期または増分同期タスクにおいて、ソースデータベースの同期対象テーブルに外部キー、トリガー、イベントトリガーが含まれる場合、宛先データベースアカウントが特権アカウントまたはスーパーユーザ権限を持つ場合、DTS はセッションレベルで一時的に `session_replication_role` パラメーターを `replica` に設定します。宛先データベースアカウントにこれらの権限がない場合は、宛先データベースで手動で `session_replication_role` パラメーターを `replica` に設定する必要があります。この期間中(`session_replication_role` が `replica` に設定されている間)、ソースデータベースでカスケード更新または削除操作が発生すると、データ不整合が発生する可能性があります。DTS タスクのリリース後は、`session_replication_role` パラメーターを `origin` に戻すことができます。
双方向同期インスタンスには、転送タスクと逆タスクが含まれます。双方向同期インスタンスを設定またはリセットする際、あるタスクの宛先オブジェクトが別のタスクのソースオブジェクトである場合:
1 つのタスクのみが完全同期と増分同期を実行できます。もう一方のタスクは増分同期のみを実行できます。
現在のタスクのソースデータは、現在のタスクの宛先にのみ同期されます。同期されたデータは、別のタスクのソースデータとしては使用されません。
タスクが失敗した場合、DTS テクニカルサポートは 8 時間以内に復旧を試みます。復旧プロセス中、タスクの再起動やパラメーター調整などの操作が実行される可能性があります。
説明パラメーターが調整される場合、DTS タスクパラメーターのみが変更され、データベースパラメーターは変更されません。変更される可能性のあるパラメーターには、インスタンスパラメーターの変更 に記載されているものが含まれますが、これらに限定されません。
パーティションテーブルを同期する場合、親テーブルとその子パーティションの両方を同期オブジェクトに含める必要があります。そうしないと、パーティションテーブルでデータ不整合が発生する可能性があります。
説明PostgreSQL パーティションテーブルの親テーブルは直接データを格納しません。すべてのデータは子パーティションに格納されます。同期タスクには親テーブルとすべての子パーティションを含める必要があります。そうしないと、子パーティションのデータが同期されず、ソースと宛先の間でデータ不整合が発生する可能性があります。
特殊ケース
ソースインスタンスが ApsaraDB RDS for PostgreSQL インスタンスの場合
同期中は、ApsaraDB RDS for PostgreSQL インスタンスのエンドポイントまたはゾーンを変更しないでください。そうしないと、同期が失敗します。
ソースインスタンスが自主管理 PostgreSQL データベースの場合
`max_wal_senders` および `max_replication_slots` パラメーターの値が、現在使用中のレプリケーションスロット数とこの自主管理 PostgreSQL データベースをソースとする作成予定の DTS インスタンス数の合計より大きいことを確認してください。
ソースインスタンスが Google Cloud Platform Cloud SQL for PostgreSQL の場合、ソースデータベースの データベースアカウント に `cloudsqlsuperuser` 権限を持つアカウントを指定する必要があります。同期オブジェクトを選択する際は、このアカウントが管理権限を持つオブジェクトを選択するか、同期対象オブジェクトについてこのアカウントにオーナー権限を付与してください(例:同期対象オブジェクトのオーナーとして関連操作を実行できるようにするため、
GRANT <owner_of_the_object_to_be_synced> TO <source_database_account_for_the_task>コマンドを実行)。説明`cloudsqlsuperuser` 権限を持つアカウントは、別の `cloudsqlsuperuser` 権限を持つアカウントが所有するデータを管理できません。
自主管理 PostgreSQL データベースまたは ApsaraDB RDS for PostgreSQL インスタンスから AnalyticDB for PostgreSQL インスタンスへの同期
Type | Description |
ソースデータベースの制限事項 |
|
その他の制限事項 |
|
特殊ケース |
|
自主管理 PostgreSQL データベースから PolarDB for PostgreSQL (Oracle 互換) インスタンスへの同期
Type | Description |
ソースデータベースの制限事項 |
|
その他の制限事項 |
|
ApsaraDB RDS for PostgreSQL インスタンスから ApsaraDB RDS for MySQL インスタンスへの同期
Type | Description |
ソースデータベースの制限事項 |
|
その他の制限事項 |
|
特殊ケース |
|
ApsaraDB RDS for PostgreSQL インスタンスから PolarDB for PostgreSQL インスタンスへの同期
単方向同期
Type
Description
ソースデータベースの制限事項
同期対象のテーブルにはプライマリキーまたは一意制約が存在し、フィールド値が一意である必要があります。そうでない場合、宛先データベースに重複データが発生する可能性があります。
説明宛先テーブルが DTS によって作成されていない場合(つまり、同期タイプがスキーマ同期に設定されていない場合)、ソースデータベースから同期されるテーブルと同じプライマリキーまたは NULL でない一意制約を持つことを保証する必要があります。そうでない場合、宛先データベースに重複データが発生する可能性があります。
同期対象のデータベース名にハイフン (-) を含めることはできません(例:dts-testdata)。
テーブルレベルでデータを同期し、テーブル名やカラム名のマッピングなどのオブジェクト編集が必要な場合、1 つのタスクで最大 5,000 テーブルまでサポートされます。それ以上のテーブルを同期する場合は、複数のタスクに分割するか、データベース全体を同期するタスクを設定してください。そうしないと、タスク送信後にリクエストエラーが発生する可能性があります。
先行書き込みログ (WAL):
WAL 機能を有効にする必要があります。wal_level パラメーターを logical に設定してください。
増分同期タスクの場合、DTS はソースデータベースの WAL ログを 24 時間以上保持することを要求します。完全同期と増分同期を含むタスクの場合、WAL ログを少なくとも 7 日間保持する必要があります。完全同期完了後は、ログ保持期間を 24 時間以上に変更できます。保持期間が要件を満たさない場合、DTS タスクは WAL ログを取得できず失敗する可能性があります。最悪の場合、データ不整合やデータ損失が発生する可能性があります。必要な保持期間よりも短い保持期間による問題は、DTS サービスレベル契約 (SLA) の適用外となります。
ソースインスタンスに長時間トランザクションが存在し、タスクに増分同期が含まれる場合、長時間トランザクションがコミットされる前に発生した先行書き込みログ (WAL) はクリアできません。これにより、WAL ログが蓄積し、ソースインスタンスのディスク領域を枯渇させる可能性があります。
ソースデータベースの論理レプリケーションの制限により、増分変更後の同期対象データが 1 件あたり 256 MB を超える場合、同期インスタンスが失敗し、復旧できません。同期インスタンスを再設定する必要があります。
スキーマ同期および初期完全同期中は、データベースまたはテーブルのスキーマを変更するデータ定義言語 (DDL) 操作を実行しないでください。そうしないと、データ同期タスクが失敗します。
説明完全同期フェーズ中、DTS はソースデータベースをクエリし、メタデータロックを取得します。これにより、ソースデータベースでの DDL 操作がブロックされる可能性があります。
同期インスタンスの実行中にソースデータベースでメジャーエンジンバージョンのアップグレードを実行すると、インスタンスが失敗し、復旧できません。同期インスタンスを再設定する必要があります。
その他の制限事項
1 つのデータ同期タスクでは、1 つのデータベースのみを同期できます。複数のデータベースを同期する場合は、各データベースごとに個別のタスクを設定する必要があります。
DTS は、TimescaleDB 拡張テーブル、スキーマをまたいだ継承を持つテーブル、式に基づく一意なインデックスを持つテーブルの同期をサポートしていません。
拡張機能のインストールによって作成されたスキーマはサポートされていません。タスク設定時にコンソールでこれらのスキーマの情報を検索できません。
同期対象のテーブルに SERIAL 型のフィールドが含まれる場合、ソースデータベースは自動的にそのフィールド用のシーケンスを作成します。そのため、ソースオブジェクト を設定する際、同期タイプ に スキーマ同期 を選択する場合は、シーケンス を選択するか、スキーマ全体を同期することを推奨します。そうしないと、同期インスタンスが正常に実行されない可能性があります。
タスクが完全同期または増分同期であり、ソースデータベースの同期対象テーブルに外部キー、トリガー、イベントトリガーが含まれる場合、宛先データベースアカウントが特権アカウントである場合、DTS は完全同期または増分同期中にセッションレベルで一時的に
session_replication_roleパラメーターをreplicaに設定します。宛先データベースアカウントにこの権限がない場合は、宛先データベースで手動でsession_replication_roleパラメーターをreplicaに設定する必要があります。この期間中—完全同期または増分同期中にsession_replication_roleパラメーターがreplicaに設定されている間—ソースデータベースでカスケード更新または削除操作が発生すると、データ不整合が発生する可能性があります。DTS 同期タスクのリリース後は、session_replication_roleパラメーターをoriginに戻すことができます。以下の 3 つのシナリオでは、データ書き込み前にソースデータベースの同期対象テーブルに対して
ALTER TABLE schema.table REPLICA IDENTITY FULL;コマンドを実行する必要があります。これにより、データ整合性が確保されます。このコマンド実行中にテーブルをロックしないでください。デッドロックを防ぐためです。関連する事前チェック項目をスキップした場合、DTS はインスタンス初期化中に自動的にこのコマンドを実行します。インスタンスを初めて実行するとき。
オブジェクト選択の粒度としてスキーマを選択し、スキーマ内に新しいテーブルが作成された場合、または同期対象テーブルが RENAME コマンドを使用して再構築された場合。
同期オブジェクトを変更する機能を使用する場合。
説明コマンド内の
schemaおよびtableは、実際のスキーマ名およびテーブル名に置き換えてください。この操作はオフピーク時間帯に実行することを推奨します。
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_postgres_heartbeat という名前のハートビートテーブルを追加します。
データ同期中、DTS はソースデータベースに
dts_sync_プレフィックスを持つレプリケーションスロットを作成してデータをレプリケートします。このレプリケーションスロットにより、DTS は過去 15 分以内のソースデータベースからの増分ログを取得できます。データ同期が失敗した場合や同期インスタンスがリリースされた場合、DTS は自動的にレプリケーションスロットをクリアしようと試みます。説明データ同期中にタスクで使用しているソースデータベースアカウントのパスワードを変更したり、ソースデータベースのホワイトリストから DTS の IP アドレスを削除したりすると、レプリケーションスロットは自動的にクリアされません。この場合、ソースデータベースで手動でレプリケーションスロットをクリアする必要があります。これにより、スロットが継続的に蓄積してディスク領域を消費し、ソースデータベースが利用不可になることを防げます。
ソースデータベースでフェールオーバーが発生した場合、セカンダリデータベースにログインしてスロットを手動でクリアする必要があります。

データ同期前に、ソースおよび宛先データベースのパフォーマンスを評価してください。オフピーク時間帯にデータを同期することを推奨します。そうしないと、初期完全同期がソースおよび宛先データベースの読み取り・書き込みリソースを消費し、データベース負荷が増加する可能性があります。
初期完全同期は同時 INSERT 操作を実行します。これにより、宛先データベースでテーブルの断片化が発生します。その結果、初期完全同期完了後、宛先インスタンスの表領域がソースインスタンスよりも大きくなります。
テーブルレベルのデータ同期で、DTS 以外のデータが宛先データベースに書き込まれていない場合、Data Management (DMS) を使用してオンライン DDL 操作を実行できます。詳細については、「テーブルロックなしでスキーマ変更を実行する」をご参照ください。
DTS 同期中は、他のソースから宛先データベースにデータを書き込まないでください。これにより、ソースおよび宛先データベース間でデータ不整合が発生する可能性があります。例えば、他のソースからのデータが宛先データベースに書き込まれている間に DMS を使用してオンライン DDL 操作を実行すると、宛先データベースでデータ損失が発生する可能性があります。
DTS はデータ内容の検証を行いますが、シーケンスなどのメタデータの検証はサポートしていません。メタデータの検証はご自身で行ってください。
業務を宛先インスタンスに切り替えた後、新しいシーケンスはソースシーケンスの最大値から増分されません。業務切り替え前に、宛先データベースのシーケンス値を更新する必要があります。詳細については、「宛先データベースのシーケンス値の更新」をご参照ください。
タスクが失敗した場合、DTS テクニカルサポートは 8 時間以内に復旧を試みます。復旧プロセス中、タスクの再起動やパラメーター調整などの操作が実行される可能性があります。
説明パラメーターが調整される場合、DTS タスクパラメーターのみが変更され、データベースパラメーターは変更されません。変更される可能性のあるパラメーターには、インスタンスパラメーターの変更 に記載されているものが含まれますが、これらに限定されません。
パーティションテーブルを同期する場合、親テーブルとその子パーティションの両方を同期オブジェクトに含める必要があります。そうしないと、パーティションテーブルでデータ不整合が発生する可能性があります。
説明PostgreSQL パーティションテーブルの親テーブルは直接データを格納しません。すべてのデータは子パーティションに格納されます。同期タスクには親テーブルとすべての子パーティションを含める必要があります。そうしないと、子パーティションのデータが同期されず、ソースと宛先の間でデータ不整合が発生する可能性があります。
特殊ケース
ソースインスタンスが ApsaraDB RDS for PostgreSQL インスタンスの場合
同期中は、ApsaraDB RDS for PostgreSQL インスタンスのエンドポイントまたはゾーンを変更しないでください。そうしないと、同期が失敗します。
ソースインスタンスが自主管理 PostgreSQL データベースの場合
`max_wal_senders` および `max_replication_slots` パラメーターの値が、現在使用中のレプリケーションスロット数とこの自主管理 PostgreSQL データベースをソースとする作成予定の DTS インスタンス数の合計より大きいことを確認してください。
ソースインスタンスが Google Cloud Platform Cloud SQL for PostgreSQL の場合、ソースデータベースの データベースアカウント に `cloudsqlsuperuser` 権限を持つアカウントを指定する必要があります。同期オブジェクトを選択する際は、このアカウントが管理権限を持つオブジェクトを選択するか、同期対象オブジェクトについてこのアカウントにオーナー権限を付与してください(例:同期対象オブジェクトのオーナーとして関連操作を実行できるようにするため、
GRANT <owner_of_the_object_to_be_synced> TO <source_database_account_for_the_task>コマンドを実行)。説明`cloudsqlsuperuser` 権限を持つアカウントは、別の `cloudsqlsuperuser` 権限を持つアカウントが所有するデータを管理できません。
双方向同期
Type
Description
ソースデータベースの制限事項
同期対象のテーブルにはプライマリキーまたは一意制約が存在し、フィールド値が一意である必要があります。そうでない場合、宛先データベースに重複データが発生する可能性があります。
説明宛先テーブルが DTS によって作成されていない場合(つまり、同期タイプがスキーマ同期に設定されていない場合)、ソースデータベースから同期されるテーブルと同じプライマリキーまたは NULL でない一意制約を持つことを保証する必要があります。そうでない場合、宛先データベースに重複データが発生する可能性があります。
同期対象のデータベース名にハイフン (-) を含めることはできません(例:dts-testdata)。
テーブルレベルでデータを同期し、テーブル名やカラム名のマッピングなどのオブジェクト編集が必要な場合、1 つのタスクで最大 5,000 テーブルまでサポートされます。それ以上のテーブルを同期する場合は、複数のタスクに分割するか、データベース全体を同期するタスクを設定してください。そうしないと、タスク送信後にリクエストエラーが発生する可能性があります。
先行書き込みログ (WAL):
WAL 機能を有効にする必要があります。wal_level パラメーターを logical に設定してください。
増分同期タスクの場合、DTS はソースデータベースの WAL ログを 24 時間以上保持することを要求します。完全同期と増分同期を含むタスクの場合、WAL ログを少なくとも 7 日間保持する必要があります。完全同期完了後は、ログ保持期間を 24 時間以上に変更できます。保持期間が要件を満たさない場合、DTS タスクは WAL ログを取得できず失敗する可能性があります。最悪の場合、データ不整合やデータ損失が発生する可能性があります。必要な保持期間よりも短い保持期間による問題は、DTS サービスレベル契約 (SLA) の適用外となります。
ソースインスタンスに長時間トランザクションが存在し、タスクに増分同期が含まれる場合、長時間トランザクションがコミットされる前に発生した先行書き込みログ (WAL) はクリアできません。これにより、WAL ログが蓄積し、ソースインスタンスのディスク領域を枯渇させる可能性があります。
ソースデータベースの論理レプリケーションの制限により、増分変更後の同期対象データが 1 件あたり 256 MB を超える場合、同期インスタンスが失敗し、復旧できません。同期インスタンスを再設定する必要があります。
スキーマ同期および初期完全同期中は、データベースまたはテーブルのスキーマを変更するデータ定義言語 (DDL) 操作を実行しないでください。そうしないと、データ同期タスクが失敗します。
説明完全同期フェーズ中、DTS はソースデータベースをクエリし、メタデータロックを取得します。これにより、ソースデータベースでの DDL 操作がブロックされる可能性があります。
同期インスタンスの実行中にソースデータベースでメジャーエンジンバージョンのアップグレードを実行すると、インスタンスが失敗し、復旧できません。同期インスタンスを再設定する必要があります。
その他の制限事項
1 つのデータ同期タスクでは、1 つのデータベースのみを同期できます。複数のデータベースを同期する場合は、各データベースごとに個別のタスクを設定する必要があります。
DTS は、TimescaleDB 拡張テーブル、スキーマをまたいだ継承を持つテーブル、式に基づく一意なインデックスを持つテーブルの同期をサポートしていません。
拡張機能のインストールによって作成されたスキーマはサポートされていません。タスク設定時にコンソールでこれらのスキーマの情報を検索できません。
同期対象のテーブルに SERIAL 型のフィールドが含まれる場合、ソースデータベースは自動的にそのフィールド用のシーケンスを作成します。そのため、ソースオブジェクト を設定する際、同期タイプ に スキーマ同期 を選択する場合は、シーケンス を選択するか、スキーマ全体を同期することを推奨します。そうしないと、同期インスタンスが正常に実行されない可能性があります。
タスクが完全同期または増分同期であり、ソースデータベースの同期対象テーブルに外部キー、トリガー、イベントトリガーが含まれる場合、宛先データベースアカウントが特権アカウントである場合、DTS は完全同期または増分同期中にセッションレベルで一時的に
session_replication_roleパラメーターをreplicaに設定します。宛先データベースアカウントにこの権限がない場合は、宛先データベースで手動でsession_replication_roleパラメーターをreplicaに設定する必要があります。この期間中—完全同期または増分同期中にsession_replication_roleパラメーターがreplicaに設定されている間—ソースデータベースでカスケード更新または削除操作が発生すると、データ不整合が発生する可能性があります。DTS 同期タスクのリリース後は、session_replication_roleパラメーターをoriginに戻すことができます。以下の 3 つのシナリオでは、データ書き込み前にソースデータベースの同期対象テーブルに対して
ALTER TABLE schema.table REPLICA IDENTITY FULL;コマンドを実行する必要があります。これにより、データ整合性が確保されます。このコマンド実行中にテーブルをロックしないでください。デッドロックを防ぐためです。関連する事前チェック項目をスキップした場合、DTS はインスタンス初期化中に自動的にこのコマンドを実行します。インスタンスを初めて実行するとき。
オブジェクト選択の粒度としてスキーマを選択し、スキーマ内に新しいテーブルが作成された場合、または同期対象テーブルが RENAME コマンドを使用して再構築された場合。
同期オブジェクトを変更する機能を使用する場合。
説明コマンド内の
schemaおよびtableは、実際のスキーマ名およびテーブル名に置き換えてください。この操作はオフピーク時間帯に実行することを推奨します。
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_postgres_heartbeat という名前のハートビートテーブルを追加します。
データ同期中、DTS はソースデータベースに
dts_sync_プレフィックスを持つレプリケーションスロットを作成してデータをレプリケートします。このレプリケーションスロットにより、DTS は過去 15 分以内のソースデータベースからの増分ログを取得できます。データ同期が失敗した場合や同期インスタンスがリリースされた場合、DTS は自動的にレプリケーションスロットをクリアしようと試みます。説明データ同期中にタスクで使用しているソースデータベースアカウントのパスワードを変更したり、ソースデータベースのホワイトリストから DTS の IP アドレスを削除したりすると、レプリケーションスロットは自動的にクリアされません。この場合、ソースデータベースで手動でレプリケーションスロットをクリアする必要があります。これにより、スロットが継続的に蓄積してディスク領域を消費し、ソースデータベースが利用不可になることを防げます。
ソースデータベースでフェールオーバーが発生した場合、セカンダリデータベースにログインしてスロットを手動でクリアする必要があります。

データ同期前に、ソースおよび宛先データベースのパフォーマンスを評価してください。オフピーク時間帯にデータを同期することを推奨します。そうしないと、初期完全同期がソースおよび宛先データベースの読み取り・書き込みリソースを消費し、データベース負荷が増加する可能性があります。
初期完全同期は同時 INSERT 操作を実行します。これにより、宛先データベースでテーブルの断片化が発生します。その結果、初期完全同期完了後、宛先インスタンスの表領域がソースインスタンスよりも大きくなります。
テーブルレベルのデータ同期で、DTS 以外のデータが宛先データベースに書き込まれていない場合、Data Management (DMS) を使用してオンライン DDL 操作を実行できます。詳細については、「テーブルロックなしでスキーマ変更を実行する」をご参照ください。
DTS 同期中は、他のソースから宛先データベースにデータを書き込まないでください。これにより、ソースおよび宛先データベース間でデータ不整合が発生する可能性があります。例えば、他のソースからのデータが宛先データベースに書き込まれている間に DMS を使用してオンライン DDL 操作を実行すると、宛先データベースでデータ損失が発生する可能性があります。
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 文には、ソースデータベースのすべてのシーケンスが含まれます。必要に応じて、これらの SQL 文を宛先データベースで実行してください。
双方向同期インスタンスの実行中、DTS はデータループを防ぐためにソースおよび宛先データベースに
dtsという名前のスキーマを作成します。インスタンス実行中は、このスキーマを変更しないでください。双方向同期インスタンスには、転送タスクと逆タスクが含まれます。双方向同期インスタンスを設定またはリセットする際、あるタスクの宛先オブジェクトが別のタスクのソースオブジェクトである場合:
1 つのタスクのみが完全同期と増分同期を実行できます。もう一方のタスクは増分同期のみを実行できます。
現在のタスクのソースデータは、現在のタスクの宛先にのみ同期されます。同期されたデータは、別のタスクのソースデータとしては使用されません。
タスクが失敗した場合、DTS テクニカルサポートは 8 時間以内に復旧を試みます。復旧プロセス中、タスクの再起動やパラメーター調整などの操作が実行される可能性があります。
説明パラメーターが調整される場合、DTS タスクパラメーターのみが変更され、データベースパラメーターは変更されません。変更される可能性のあるパラメーターには、インスタンスパラメーターの変更 に記載されているものが含まれますが、これらに限定されません。
パーティションテーブルを同期する場合、親テーブルとその子パーティションの両方を同期オブジェクトに含める必要があります。そうしないと、パーティションテーブルでデータ不整合が発生する可能性があります。
説明PostgreSQL パーティションテーブルの親テーブルは直接データを格納しません。すべてのデータは子パーティションに格納されます。同期タスクには親テーブルとすべての子パーティションを含める必要があります。そうしないと、子パーティションのデータが同期されず、ソースと宛先の間でデータ不整合が発生する可能性があります。
特殊ケース
ソースインスタンスが ApsaraDB RDS for PostgreSQL インスタンスの場合
同期中は、ApsaraDB RDS for PostgreSQL インスタンスのエンドポイントまたはゾーンを変更しないでください。そうしないと、同期が失敗します。
ソースインスタンスが自主管理 PostgreSQL データベースの場合
`max_wal_senders` および `max_replication_slots` パラメーターの値が、現在使用中のレプリケーションスロット数とこの自主管理 PostgreSQL データベースをソースとする作成予定の DTS インスタンス数の合計より大きいことを確認してください。
ソースインスタンスが Google Cloud Platform Cloud SQL for PostgreSQL の場合、ソースデータベースの データベースアカウント に `cloudsqlsuperuser` 権限を持つアカウントを指定する必要があります。同期オブジェクトを選択する際は、このアカウントが管理権限を持つオブジェクトを選択するか、同期対象オブジェクトについてこのアカウントにオーナー権限を付与してください(例:同期対象オブジェクトのオーナーとして関連操作を実行できるようにするため、
GRANT <owner_of_the_object_to_be_synced> TO <source_database_account_for_the_task>コマンドを実行)。説明`cloudsqlsuperuser` 権限を持つアカウントは、別の `cloudsqlsuperuser` 権限を持つアカウントが所有するデータを管理できません。