すべてのプロダクト
Search
ドキュメントセンター

Data Transmission Service:自主管理 PostgreSQL データベースから PolarDB for PostgreSQL (Compatible with Oracle) クラスターへのデータ移行

最終更新日:Mar 29, 2026

Data Transmission Service (DTS) を使用して、自主管理 PostgreSQL データベースから PolarDB for PostgreSQL (Compatible with Oracle) クラスターへデータを移行します。完全なデータ移行と増分データ移行を組み合わせることで、移行中もアプリケーションを継続して実行でき、ダウンタイムを最小限に抑えることができます。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • PolarDB for PostgreSQL (Compatible with Oracle) クラスター。詳細については、「PolarDB for PostgreSQL (Compatible with Oracle) クラスターの作成」をご参照ください。

  • 宛先クラスターに十分な空きストレージ容量があること(ソースデータベースの合計データサイズを超える必要があります)

  • 必要なデータベースアカウントおよび権限(「必要な権限」を参照)

移行タイプの選択

ダウンタイムの許容範囲に基づいて、移行タイプを選択してください。

移行タイプDTS の処理内容必要なダウンタイムコスト
完全なデータ移行特定時点における既存データを移行しますあり — 移行前にソースへのすべての書き込みを停止する必要があります無料
完全なデータ移行 + 増分データ移行既存データを移行した後、切り替え完了まで変更を継続的に同期します最小限 — 移行中もサービスを継続できます増分フェーズに対して課金されます

推奨: 移行中にアプリケーションを継続して実行するには、完全データ移行増分データ移行 の両方を選択してください。完全移行のみを選択する場合は、開始前にソースデータベースへのすべての書き込みを停止してください。そうしないと、データの不整合が発生します。

必要な権限

データベーススキーマ移行完全なデータ移行増分データ移行
自主管理 PostgreSQLUSAGE on pg_catalogSELECT 移行対象のオブジェクトに対するsuperuser
PolarDB for PostgreSQL (Compatible with Oracle)データベース所有者データベース所有者データベース所有者
ターゲットデータベースを作成する際に、データベース所有者を指定してください。

アカウントの作成および権限付与手順については、以下をご参照ください。

課金

移行タイプインスタンス構成料金インターネットトラフィック料金
フルデータ移行無料Alibaba Cloud からインターネット経由でデータが移行される場合のみ有料です。詳細については、「課金概要」をご参照ください。
増分データ移行有料です。詳細については、「課金概要」をご参照ください。

増分移行でサポートされる SQL 操作

操作タイプSQL ステートメント
DMLINSERT、UPDATE、DELETE
DDLCREATE TABLE、DROP TABLE、ALTER TABLE(RENAME TABLE、ADD COLUMN、ADD COLUMN DEFAULT、ALTER COLUMN TYPE、DROP COLUMN、ADD CONSTRAINT、ADD CONSTRAINT CHECK、ALTER COLUMN DROP DEFAULT)、TRUNCATE TABLE(PostgreSQL 11 以降)、CREATE INDEX ON TABLE — ソースデータベースアカウントが特権アカウントである場合にのみ利用可能
重要
  • DDL 移行は、2020 年 10 月 1 日以降に作成されたタスクでのみサポートされます。

  • 2023年5月12日以前に作成されたタスクの場合:タスクの設定前に、ソースデータベースでトリガーと関数を作成します。詳細については、「PostgreSQL データベース向けの増分 DDL 移行を実装するためのトリガーおよび関数の使用方法」をご参照ください。

  • 増分データ移行では BIT データ型はサポートされません。

  • DDL ステートメントには CASCADE または RESTRICT を含めることはできません。

  • SET session_replication_role = replica を実行したセッションからの DDL ステートメントは移行されません。

  • ソースデータベースに送信されたバッチに DML および DDL ステートメントが混在している場合、DTS は DDL ステートメントをスキップします。

  • 移行対象として選択されていないオブジェクトに対する DDL ステートメントはスキップされます。

  • CREATE SEQUENCE ステートメントはサポートされていません。

注意事項

スキーマ移行中、DTS はソースデータベースからターゲットデータベースへ外部キーを移行します。
完全および増分データ移行中、DTS はセッションレベルで一時的に外部キー制約チェックおよびカスケード操作を無効化します。移行中にソースデータベースで CASCADE または DELETE 操作を実行すると、データの不整合が発生する可能性があります。

ソースデータベースの制限事項

制限事項詳細影響および回避策
帯域幅ソースデータベースサーバーには十分なアウトバウンド帯域幅が必要です。帯域幅が不足していると、移行速度が低下します。
プライマリキーまたは一意制約移行対象テーブルには、すべてのフィールドが一意であるプライマリキーまたは一意制約(UNIQUE constraint)が必要です。これらの制約がないテーブルは、ターゲットデータベースで重複レコードを生成する可能性があります。回避策: 移行前にテーブルにプライマリキーまたは一意制約を追加するか、そのテーブルを移行対象から除外してください。
データベース名ソースデータベース名にはハイフン(-)を含めることはできません。無効な名前の例:dts-testdata名前にハイフンが含まれていると、移行タスクの開始に失敗します。移行前にデータベース名を変更してください。
テーブル数の制限(オブジェクト編集時)テーブルを選択し、テーブルまたはカラムの名前を変更する必要がある場合、単一のタスクでは最大 1,000 個のテーブルをサポートします。この上限を超えると、リクエストエラーが発生します。回避策: 移行を複数のタスクに分割するか、個別のテーブルではなくデータベース単位で移行してください。
wal_level パラメーター増分移行の場合、wal_levellogical に設定し、postgresql.conf に反映してください。wal_level の設定が正しくないと、DTS が増分変更を読み取れなくなります。「ソースデータベースの準備」をご参照ください。
WAL ログ保持期間増分移行のみ:WAL ログを最低 24 時間保持してください。完全+増分移行:WAL ログを最低 7 日間保持してください。完全移行完了後は、24 時間の最低保持期間が適用されます。DTS が WAL ログを取得できない場合、タスクが失敗し、データの不整合が発生する可能性があります。
プライマリ/セカンダリ スイッチオーバー移行中にソースデータベースでプライマリ/セカンダリ スイッチオーバーを実行しないでください。スイッチオーバーにより、移行タスクが失敗します。
完全移行中の DDL 操作完全データ移行中に DDL 操作を実行しないでください。完全移行中の DDL 操作により、タスクが失敗します。
長時間トランザクション増分移行中にソースデータベースに長時間トランザクションが存在する場合、そのトランザクションがコミットされる前に生成された WAL ログはクリアされません。未コミットのトランザクションにより WAL ログが蓄積し、ソースデータベースのストレージが枯渇する可能性があります。移行中に長時間トランザクションを監視し、コミットまたはロールバックしてください。

その他の制限事項

制限事項詳細
データベースおよびテーブルの事前作成移行タスクの設定前に、宛先クラスターにターゲットデータベースおよびテーブルを作成してください。
増分移行中の新規作成または名前変更されたテーブル移行対象スキーマ内でテーブルを作成または RENAME を実行する場合、そのテーブルにデータを書き込む前に、ALTER TABLE schema.table REPLICA IDENTITY FULL; を実行してください。schema および table は、実際の名前に置き換えてください。
ソースデータベース内の一時テーブルDTS はソースデータベース内に一時テーブルを作成します:public.dts_pg_classpublic.dts_pg_attributepublic.dts_pg_typepublic.dts_pg_enumpublic.dts_postgres_heartbeatpublic.dts_ddl_command、および public.dts_args_session。移行中はこれらのテーブルを削除しないでください。DTS インスタンスがリリースされると、自動的に削除されます。
ハートビートテーブルDTS は、増分移行の遅延を追跡するために、ソースデータベース内に dts_postgres_heartbeat という名前のハートビートテーブルを作成します。
レプリケーションスロットDTS はソースデータベース内に、dts_sync_ で始まるプレフィックスを持つレプリケーションスロットを作成し、増分ログを最大 15 分間保持します。タスクがリリースまたは失敗すると、スロットは自動的にクリアされます。ソース ApsaraDB for PostgreSQL インスタンスでプライマリ/セカンダリ スイッチオーバーが発生した場合、セカンダリインスタンスにログインして、手動でレプリケーションスロットをクリアしてください。Amazon slot查询信息
1 タスクあたり 1 データベース単一の移行タスクでは、1 つのデータベースからのみデータを移行できます。複数のデータベースを移行するには、それぞれのデータベースごとに別々のタスクを作成してください。
パフォーマンスへの影響完全データ移行では、ソースおよびターゲットデータベースの読み取り・書き込みリソースが使用され、サーバー負荷が増加します。非ピーク時間帯に移行を実行してください。
表領域の増加完全移行中の同時 INSERT 操作により、ターゲットデータベースでテーブルの断片化が発生します。移行後のターゲット表領域は、ソースよりも大きくなることが予想されます。
FLOAT/DOUBLE の精度DTS は FLOAT および DOUBLE 値を ROUND(COLUMN, PRECISION) を使用して取得します。デフォルト精度:FLOAT は 38 桁、DOUBLE は 308 桁です。これらのデフォルト値が要件を満たすかどうかを確認し、必要に応じて調整してください。
失敗したタスクの再試行DTS は失敗したタスクを最大 7 日間再試行します。ワークロードをターゲットデータベースに切り替える前に、失敗したタスクを停止またはリリースしてください。あるいは、ターゲットデータベースに対する DTS の書き込み権限を REVOKE で削除してください。そうしないと、失敗したタスクが再開された際に、ソースデータがターゲットデータを上書きする可能性があります。
シーケンスのメタデータDTS はシーケンスのメタデータを検証しません。ワークロードを切り替えた後、ターゲットデータベースのシーケンスはソースの最大値から自動的に継続しません。切り替え前に、ソースデータベースの現在の最大シーケンス値をクエリし、それをターゲットデータベースの開始値として設定してください。次の SQL を使用して setval ステートメントを取得できます:
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;
$$;

ソースデータベースの準備

ご利用の PostgreSQL バージョンに応じた手順に従ってください。

PostgreSQL 10.1 以降

以下の手順は Linux を前提としています。
  1. ソース PostgreSQL データベースが実行されているサーバーにログインします。

  2. wal_levellogical に設定し、postgresql.conf に反映します。

    postgresql.conf の編集後、変更を有効にするには SELECT pg_reload_conf(); を実行するか、PostgreSQL を再起動してください。

    设置wal_level

  3. DTS サーバーの CIDR ブロックを pg_hba.conf に追加します。ターゲットデータベースが配置されているリージョンの CIDR ブロックのみを追加します。CIDR ブロックリストについては、「DTS サーバーの CIDR ブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。

    pg_hba.conf の構文については、「pg_hba.conf ファイル」をご参照ください。0.0.0.0/0 に IP アドレスを設定済みの場合は、このステップはスキップできます。

    IP

  4. 移行予定のオブジェクトに一致するように、宛先クラスターに該当するデータベースおよびスキーマを作成します。

PostgreSQL 9.4.8 ~ 10.0

  1. PostgreSQL のソースコードをダウンロードしてインストールします。

    1. PostgreSQL 公式サイトから、ご利用の PostgreSQL バージョンに対応するソースコードをダウンロードします。

    2. 以下のコマンドを順次実行して、設定・コンパイル・インストールを行います。

      sudo ./configure
      sudo make
      sudo make install
    重要

    - PostgreSQL のソースコードは、オペレーティングシステムのバージョンと一致する GCC バージョンでコンパイルする必要があります。 - sudo ./configure が失敗した場合、エラー内容に応じてコマンドを調整してください。たとえば、readline library not found というエラーが出た場合は、sudo ./configure --without-readline を実行してください。 - 他の方法で PostgreSQL をインストール済みの場合は、同じ OS バージョンおよび GCC バージョンのテスト環境で ali_decoding プラグインをコンパイルしてください。

  2. DTS が提供する ali_decoding プラグインをダウンロード、コンパイル、インストールします。

    1. ali_decoding をダウンロードします。

    2. ali_decoding ディレクトリを、PostgreSQL インストール先の contrib ディレクトリにコピーします。contrib目录

    3. ali_decoding ディレクトリ内で、Makefile の内容を以下の内容に置き換えます。

      # contrib/ali_decoding/Makefile
      MODULE_big = ali_decoding
      MODULES = ali_decoding
      OBJS    = ali_decoding.o
      
      DATA = ali_decoding--0.0.1.sql ali_decoding--unpackaged--0.0.1.sql
      
      EXTENSION = ali_decoding
      
      NAME = ali_decoding
      
      #subdir = contrib/ali_decoding
      #top_builddir = ../..
      #include $(top_builddir)/src/Makefile.global
      #include $(top_srcdir)/contrib/contrib-global.mk
      
      #PG_CONFIG = /usr/pgsql-9.6/bin/pg_config
      #pgsql_lib_dir := $(shell $(PG_CONFIG) --libdir)
      #PGXS := $(shell $(PG_CONFIG) --pgxs)
      #include $(PGXS)
      
      # Run the following commands to install the source code:
      ifdef USE_PGXS
      PG_CONFIG = pg_config
      PGXS := $(shell $(PG_CONFIG) --pgxs)
      include $(PGXS)
      else
      subdir = contrib/ali_decoding
      top_builddir = ../..
      include $(top_builddir)/src/Makefile.global
      include $(top_srcdir)/contrib/contrib-global.mk
      endif
    4. ali_decoding ディレクトリ内で、プラグインをコンパイルおよびインストールします。

      sudo make
      sudo make install
    5. 出力ファイルを必要な場所にコピーします。指定位置

  3. 移行予定のオブジェクトに一致するように、宛先クラスターに該当するデータベースおよびスキーマを作成します。

移行タスクの設定

  1. データ移行タスク ページに移動します。

    1. Data Management (DMS) コンソール にログインします。

    2. トップナビゲーションバーで、DTS をクリックします。

    3. 左側のナビゲーションウィンドウで、DTS (DTS) > データ移行 を選択します。

    - ナビゲーションは、DMS コンソールのモードによって異なります。『簡易モード』および『DMS コンソールのレイアウトとスタイルをカスタマイズする』をご参照ください。 - または、直接『新しい DTS コンソールのデータ移行タスクページ』にアクセスしてください。
  2. データ移行タスク の横にあるドロップダウンリストから、データ移行インスタンスが配置されているリージョンを選択します。

    新しい DTS コンソールでは、左上隅のリージョンを選択します。
  3. タスクの作成 をクリックし、以下のパラメーターを使用してソースおよび宛先データベースを設定します。

    警告

    ソースおよび宛先インスタンスを選択した後、進む前にページ上部に表示される 制限事項 を必ずご確認ください。

    ソースデータベース

    パラメーター説明
    データベースタイプPostgreSQL を選択します。
    アクセス方法Express Connect、VPN Gateway、または Smart Access Gateway を選択します。ネットワークの準備については、「事前準備の概要」をご参照ください。
    インスタンス リージョンソースデータベースが配置されているリージョン。
    Alibaba Cloud アカウント間でのデータ複製本シナリオでは、いいえ を選択します。
    接続済み VPCソースデータベースに接続されている仮想プライベートクラウド(VPC)。
    IP アドレスソースデータベースサーバーの IP アドレス。
    ポート番号ソースデータベースのサービスポート。デフォルト:5432
    データベース名ソースデータベースの名前。
    データベースアカウントソースデータベースのアカウント。詳細については、「必要な権限」をご参照ください。
    データベースパスワードデータベースアカウントのパスワード。

    宛先データベース

    パラメーター説明
    データベースタイプPolarDB (Compatible with Oracle) を選択します。
    アクセス方法Express Connect、VPN Gateway、または Smart Access Gateway を選択します。
    インスタンスリージョン宛先 PolarDB クラスターが配置されているリージョン。
    接続済み VPC宛先クラスターに接続されている VPC。VPC ID は、クラスターの [概要] ページで確認できます。
    ドメイン名または IP アドレス宛先クラスターのプライマリノードの IP アドレス。クラスターエンドポイントに対して ping を実行して、IP アドレスを取得します。
    ポート番号宛先データベースのサービスポート。デフォルト:1521
    データベース名宛先クラスター内のデータベースの名前。
    データベースアカウント宛先クラスターのアカウント。詳細については、「必要な権限」をご参照ください。
    データベースパスワードデータベースアカウントのパスワード。
  4. ソースデータベースに IP アドレスホワイトリストが設定されている場合、DTS サーバーの CIDR ブロックを追加してください。その後、接続性のテストと続行 をクリックします。

    警告

    DTS サーバーの CIDR ブロックをデータベースのホワイトリストまたは ECS セキュリティグループに追加すると、セキュリティリスクが発生します。続行する前に、以下の予防措置を講じてください:アカウントパスワードの強化、公開ポートの制限、API 呼び出しの認証、IP ホワイトリストおよびセキュリティグループルールの定期的な監査、不正な CIDR ブロックの削除。可能な限り、Express Connect、VPN Gateway、または Smart Access Gateway を使用して、データベースと DTS を接続してください。

  5. 移行対象オブジェクトおよび高度な設定を構成します。

    移行タイプおよび対象オブジェクト

    パラメーター説明
    移行タイプダウンタイムを伴うワンタイム移行の場合は、完全データ移行 を選択します。ダウンタイムを最小限に抑えるには、完全データ移行増分データ移行 の両方を選択します。もし 増分データ移行 を選択しない場合は、データ整合性を確保するために、移行中にソースデータベースへの書き込みを停止してください。
    競合テーブルの処理モード事前チェックおよびエラー報告:宛先にソースと同じ名前のテーブルが存在するかどうかをチェックします。同一の名前が存在する場合、事前チェックは失敗し、タスクを開始できません。必要に応じて、「オブジェクト名マッピング」を使用して宛先テーブルの名前を変更してください。エラーを無視して続行:重複名チェックをスキップします。
    警告

    これによりデータの不整合が発生する可能性があります。同一のプライマリキー値を持つレコードは移行されず、スキーマの違いにより部分的な移行やタスクの失敗が発生する可能性があります。

    ソースオブジェクトソースオブジェクト セクションからオブジェクトを選択し、矢印アイコンをクリックして 選択済みオブジェクト に移動します。選択可能な粒度:カラム、テーブル、またはスキーマ。テーブルまたはカラムを選択すると、ビュー、トリガー、ストアドプロシージャは除外されます。
    選択済みオブジェクト宛先で単一のオブジェクトの名前を変更するには、選択済みオブジェクト 内で右クリックします。「単一オブジェクトの名前マッピング」をご参照ください。複数のオブジェクトを一度に名前変更するには、一括編集 をクリックします。「複数のオブジェクト名を一度にマッピング」をご参照ください。
    説明

    オブジェクトの名前変更により、依存オブジェクトの移行が失敗する可能性があります。行をフィルターするには、テーブルを右クリックして WHERE 条件を指定してください。「SQL 条件を使用したデータのフィルタリング」をご参照ください。

  6. 次へ:高度な設定 をクリックし、以下のパラメーターを設定します。

    パラメーター説明
    アラートの設定いいえ: アラート機能を無効にします。はい: アラート機能を有効にし、アラートのしきい値とアラート連絡先を指定します。詳細については、「モニタリングとアラートの設定」をご参照ください。
    失敗した接続の再試行時間失敗した接続に対する再試行ウィンドウです。DTS はこのウィンドウ内で即座に再試行します。範囲:10~1,440 分。デフォルト:120 分。少なくとも 30 分に設定してください。DTS がこのウィンドウ内で再接続できた場合、タスクは再開されます。それ以外の場合は、タスクが失敗します。
    説明

    複数のタスクが同じソースまたは宛先データベースを共有し、異なる再試行ウィンドウが設定されている場合、最も短いウィンドウが適用されます。再試行期間中も DTS インスタンスに対して課金されます。

    その他の問題の再試行時間タスク開始後に失敗した DML または DDL 操作に対する再試行ウィンドウです。範囲:1~1,440 分。デフォルト:10 分。少なくとも 10 分に設定してください。
    重要

    この値は 失敗した接続の再試行時間 よりも小さくする必要があります。

    ETL の設定はい: 抽出・変換・書き出し (ETL) 機能を有効にします。コードエディタでデータ処理文を入力します。詳細については、「データ移行またはデータ同期タスクで ETL を設定する」および「ETL とは?」をご参照ください。いいえ: ETL を無効にします。
  7. 次へ:タスク設定の保存と事前チェック をクリックします。

    - このタスクの OpenAPI パラメーターをプレビューするには、次へ:タスク設定の保存と事前チェック 上にマウスを合わせ、OpenAPI パラメーターのプレビュー をクリックしてください。 - DTS はタスク開始前に事前チェックを実行します。事前チェックに合格した場合にのみ、タスクを開始できます。 - 事前チェックが失敗した場合、各失敗項目の横にある 詳細の表示 をクリックし、エラーメッセージに基づいて問題を修正した後、再度事前チェックを実行してください。 - 事前チェックでアラートが発生した場合:アラートを無視できない場合は、問題を修正して事前チェックを再実行してください。アラートを無視できる場合は、アラートの詳細の確認 > 無視 > OK をクリックし、その後 再チェック をクリックしてください。アラートを無視すると、データの不整合が発生する可能性があります。
  8. 成功率100% になるまで待機し、次へ:インスタンスの購入 をクリックします。

  9. インスタンスの購入 ページで、インスタンスクラスを設定します。

    パラメーター説明
    [リソースグループ]移行インスタンスのリソースグループです。デフォルト:デフォルトリソースグループ。詳細については、「Resource Management とは」をご参照ください。
    [インスタンスクラス]インスタンスクラスは移行速度を決定します。要件に基づいて選択してください。詳細については、「データ移行インスタンスの仕様」をご参照ください。
  10. Data Transmission Service(従量課金)サービス利用規約 を確認し、チェックボックスをオンにして同意してください。

  11. 購入して開始 をクリックし、タスクリストでタスクの進行状況を監視してください。

検証および切り替え

本番トラフィックを宛先クラスターに切り替える前に、以下の手順を完了してください。

データ整合性の検証

増分移行の場合、切り替え前にソースデータベースに保留中の変更が残っていないことを確認してください。

  1. DTS タスクリストで、移行タスクにエラーが表示されておらず、増分移行の遅延がほぼゼロであることを確認します。

  2. ソースデータベースへの新規書き込みを一時的に停止します。

  3. 増分移行の遅延がゼロになり、新たな変更が適用されなくなったことを確認します。

シーケンス値のリセット

DTS はシーケンスのメタデータを引き継ぎません。切り替え後に、宛先データベースのシーケンスは移行された値から開始され、ソースの最大値から継続されません。シーケンスの競合を防止するには、以下の手順を実行してください。

  1. ソースデータベースで以下の SQL を実行し、現在の最大シーケンス値を取得します。

    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;
    $$;
  2. 生成された setval ステートメントを宛先データベースで実行し、各シーケンスを正しい開始値に設定します。

失敗したタスクの停止またはリリース

DTS は失敗したタスクを最大 7 日間再試行します。ワークロードを切り替える前に、失敗したタスクを停止またはリリースしてください。あるいは、宛先データベースに対する DTS の書き込み権限を REVOKE で削除してください。そうしないと、失敗したタスクが再開された際に、ソースデータが宛先データを上書きする可能性があります。

ワークロードの切り替え

アプリケーションの接続文字列を更新し、宛先 PolarDB クラスターを指すようにしてください。