データベースのインポート、エクスポートおよび移行

別のPostgreSQLデータベースからPostgreSQLデータベース・システムを使用してOCIデータベースにデータを移行します。

pg_dumpなどのPostgreSQLユーティリティの使用

pg_dumpユーティリティには、デフォルトでPostgreSQLインストールが付属しており、PostgreSQLデータベースをスクリプト・ファイルまたはその他のアーカイブ・ファイルに抽出するために使用できます。これらのファイルは、psqlまたはpg_restoreコマンドを使用してOCI DatabaseにPostgreSQLを指定して、ダンプ時に同じ状態でデータベースを再作成できます。

PostgreSQLを使用してOCIデータベースを作成する場合は、管理ユーザーを指定します。このユーザーは、これらのユーティリティを使用して作成されたファイルからリストアできます。これらのユーティリティは通常のPostgreSQLクライアント・アプリケーションであるため、データベースにアクセスするリモート・ホストからこの移行手順を実行できます。

ノート

このガイドでは、pg_dumpを使用してプレーン・テキスト形式のダンプを作成し、psqlユーティリティを使用してダンプをリストアします。ダンプを別の形式で作成し、pg_restoreを使用してダンプをリストアすることもできます。

例: データベース・システムのすべてのデータベースのエクスポートおよびインポート

次の例では、ソース・データベース・システムが、3つのデータベース(db_1db_2およびdb_3)を持つバニラPostgreSQLシステムであると想定しています。ソース・データベース・システムには多数のユーザーがあり、その一部にはSUPERUSER権限があります。

  1. すべてのデータベースのスキーマのみのダンプを取得します。ユーザーのオブジェクト所有権情報を使用して、各データベースを個々のファイルにダンプします。

    /usr/lib/postgresql/bin/pg_dump -U psql -h <IP_of_Source_DB> -s -E 'UTF8' -d <db_1> -f <db_1_schema_dump>.sql
    • -U: ダンプを作成するユーザー
    • -h: ソース・データベースのホスト・アドレス
    • -s: スキーマのみをダンプし、データはダンプしません。
    • -E: ダンプ・ファイルのクライアント・エンコーディングをUTF-8に設定します。
    • -d: ダンプするデータベース
    • -f: データベース・スキーマをダンプするO/pファイル

    これをデータベース db_2および db_3に対して繰り返します。

  2. 各データベースのデータのみのダンプを個々のファイルに作成します。

    /usr/lib/postgresql/bin/pg_dump -U psql -h <IP_of_Source_DB> -a -E 'UTF8' -d db_1 -f <db_1_data_dump>.sql
    • -a: スキーマではなくデータのみをダンプします。

    これをデータベース db_2および db_3に対して繰り返します。

  3. 表領域情報なしでグローバル・オブジェクトをダンプします。

    /usr/lib/postgresql/bin/pg_dumpall -U psql -h <IP_of_Source_DB> -g --no-role-passwords --no-tablespaces -f <all_roles>.sql
    • -g: グローバル・オブジェクトのみをダンプし、データベースはダンプしません。
    • --no-role-passwords: パスワードのダンプを回避するには、このフラグを使用します。
    • --no-tablespaces: OCI Database with PostgreSQLでは、インプレース表領域のみがサポートされます。
  4. PostgreSQLデータベース・システムを持つOCIデータベースの管理ユーザーにはSUPERUSER権限、NOSUPERUSER、NOREPLICTIONなどがないため、ダンプ内のCREATE USER文から削除する必要があります。

    SUPERUSER権限が必要なコマンドを削除するには、グローバル・ダンプ・ファイルで必要な変更を行います。次に例を示します。

    ALTER ROLE/USER test WITH NOSUPERUSER NOINHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'test';
    

    次のように変更する必要があります。

    ALTER ROLE/USER test WITH LOGIN PASSWORD 'test';
  5. OCI Database with PostgreSQL管理ユーザーを使用してグローバル・ダンプをOCI Database with PostgreSQLデータベース・システムにリストアし、すべてのロール/ユーザーを作成します:

    /usr/lib/postgresql/bin/psql -U psql -d postgres -h <IP_of_Target_Database_System> -f <all_roles>.sql  
  6. スキーマのみのデータベース・ダンプをリストアします。

    /usr/lib/postgresql/bin/psql -U psql -d postgres -h <IP_of_Target_Database_System> -f <db_1_schema_dump>.sql

    これをデータベース db_2および db_3に対して繰り返します。

    ノート

    続行する前に、権限またはオブジェクトの不一致に関するエラーを修正してください。
  7. データのみのデータベース・ダンプをリストアします。

    /usr/lib/postgresql/bin/psql -U psql -d postgres -h <IP_of_Target_Database_System> -f <db_1_data_dump>.sql

    これをデータベース db_2および db_3に対して繰り返します。

  8. ソース・データベースに対するすべての表の行数を確認します。
  9. すべてのソース・データベース・システムの権限レベルが、OCI Database with PostgreSQLデータベース・システムに正確に反映されていることを確認します。
  10. OCI Database with PostgreSQLデータベース・システムで作成されたユーザーのパスワードを設定します。
  11. 各データベースまたは個々の表でVACUUM ANALYZEを実行して、データベースの統計を更新します。このコマンドは、PostgreSQL問合せプランナが最適化された問合せ計画を作成できるため、パフォーマンスが向上します。VACUUM ANALYZEの完了を高速化するために、PSQLセッションでmaintenance_work_memを増やすことをお薦めします。VACUUM ANALYZEは、完了時間を短縮するために、別々のセッションでパラレルに実行することもできます。

    SET maintenance_work_mem = '<a_few_gigabytes_depending_on_shape>';
    VACUUM ANALYZE <db_1>;

    これをデータベース db_2および db_3に対して繰り返します。

    ノート

    データベース・システムのパフォーマンスを維持するために、VACUUM ANALYZEおよびREINDEXをブルート表および索引で定期的に実行することをお薦めします。アプリケーションへの影響を回避するために、オフピーク時間中にこの操作を実行します。

GoldenGateの使用

GoldenGateを使用して、ソースPostgreSQLデータベースからOCI Database with PostgreSQLデータベース・システムへのレプリケーションを設定できます。

次のステップでは、データベースの同期を維持するためのソース、ターゲットおよびGoldenGateの構成について説明します。プロセスが正常に完了した後、いつでも停止時間なしでOCI Database with PostgreSQLにカットオーバーすることを選択できます。

  1. ソース・データベースの準備
  2. ソース・データベース・スキーマのダンプ
  3. ターゲット・データベース・システムの準備
  4. レプリケーションにGoldenGateを使用します。

前提条件:

GoldenGateを使用するには、次の前提条件を満たしていることを確認します:

  • 必要なIAMリソースおよびOCIネットワークが所定の位置にあることを確認します。詳細は、PostgreSQLを使用したOCIデータベースのスタート・ガイドを参照してください。
  • Create a database system that can be used as the destination for the GoldenGate replication.

  • コンピュート・インスタンスを作成して、ソースおよび宛先のデータベース・システムに接続できるPostgreSQLクライアントをホストします。インスタンスを作成すると、次のようになります。
    • SSHキー・ペアをダウンロードします。

      注意

      秘密キーにアクセスできるすべてのユーザーがインスタンスに接続できます。秘密キーはセキュアな場所に格納してください。
    • データベース・システムの作成時に使用するVCNおよびプライベート・サブネットを選択します。
    • https://www.postgresql.org/download/の手順に従って、データベース・システムのPostgreSQLバージョンと互換性のあるバージョンのPostgreSQLクライアントをインストールします。

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

GoldenGateがデータを抽出およびレプリケートするには、ソース・データベースがユーザーおよび構成の要件を満たす必要があります。

ユーザー要件

GoldenGateプロセスには、ソース・データを取得してPostgreSQLを使用してOCI Databaseに配信できるデータベース・ユーザーが必要です。GoldenGate ExtractとGoldenGate Replicatの両方に専用のPostgreSQLデータベース・ユーザーを作成することをお薦めします。データベース・ユーザーおよびGoldenGateの詳細は、Oracle GoldenGateのデータベース権限for PostgreSQLを参照してください。

構成要件

GoldenGate抽出プロセスに対応するようにすべてのソース・データベースを構成する必要があります。必要なパラメータとそのソース・データベースの値は次のとおりです。

  • listen_addresses: ExtractまたはReplicatのリモート接続の場合は、リモート・データベース接続を許可するように"listen_addresses = * "を設定します。
  • wal_level: ソース・データベースの先行書込みロギングをlogicalに設定する必要があります。これにより、トランザクション・レコードのデコードをサポートするために必要な情報が追加されます。
  • max_replication_slots: 最大レプリケーション・スロットの数は、GoldenGate Extractごとに1つのオープン・スロットを格納するように設定する必要があります。通常、データベースごとに必要なGoldenGate Extractは1つのみです。
    ノート

    ソース・データベースですでにPostgreSQLネイティブ・レプリケーションおよび使用可能なすべてのレプリケーション・スロットを使用している場合は、この値を大きくしてGoldenGate Extractの登録を許可します。
  • max_wal_senders: レプリケーション・スロット最大値と一致するように、先行書込み送信者最大値を設定します。
  • track_commit_timestamp: オプションで、先行書込みログでコミット・タイムスタンプを有効にできます。論理先行書込みロギングが有効と同時に有効になっている場合、その時点のDMLコミット・レコードは、正しいタイムスタンプ値で取得されます。そうしない場合、GoldenGateによって取得された最初のレコードは、コミット・タイムスタンプが正しくなくなります。

コミュニティPostgreSQLをソース・データベースとして使用するために、ユーザーはpostgresql.confファイルで構成を変更し、データベースを再起動して変更を有効にできます。

listen_addresses = *
wal_level = logical                      
max_replication_slots = 1  (min required for GG)         
max_wal_senders = 1  (min required for GG)                       
track_commit_timestamp = on
Amazon Aurora PostgreSQL (ソース)

Amazon Aurora PostgreSQLでは、データベース設定はパラメータ・グループを使用して変更されます。新しいパラメータ・グループ内のデータベース設定を編集し、データベース・インスタンスに割り当てる方法の詳細は、Amazon AWSのドキュメントを参照してください。

データベースの構成要件が、インスタンスに割り当てられているパラメータ・グループの設定を検証して満たされていることを確認します。

Amazon Auroraのwal_level設定は、rds.logical_replicationというパラメータで構成されます。データベースをGoldenGate Extractのソースとして使用するには、rds.logical_replication1に設定します。

移行に使用されるデータベース・ユーザーには、レプリケーション権限が必要です。次を使用して、ソースAmazon Auroraシステムのユーザーに権限を付与します:

grant replication to <migration-user>;
Amazon RDS for PostgreSQL (ソース)

Amazon RDS for PostgreSQLでは、データベース設定はパラメータ・グループを使用して変更されます。新しいパラメータ・グループ内のデータベース設定を編集し、データベース・インスタンスに割り当てる方法の詳細は、Amazon AWSのドキュメントを参照してください。

データベースの構成要件が、インスタンスに割り当てられているパラメータ・グループの設定を検証して満たされていることを確認します。

Amazonデータベース・サービスのwal_level設定は、rds.logical_replicationというパラメータで構成されます。データベースをGoldenGate Extractのソースとして使用するには、rds.logical_replication1に設定します。

移行に使用されるデータベース・ユーザーには、レプリケーション権限が必要です。次を使用して、ソースAmazon RDSシステム内のユーザーに権限を付与します:

grant replication to <migration-user>;
Azure Database for PostgreSQL as Source

Azure Database for PostgreSQLでは、データベース・インスタンスのサーバー・パラメータを使用してデータベース設定が変更されます。データベース設定の編集方法の詳細は、Azure Database for PostgreSQLのドキュメントを参照してください。

ソース・インスタンスの設定を検証して、データベースの構成要件が満たされていることを確認します。

Azure Database for PostgreSQLデータベースに対してPostgreSQL Extractに対してGoldenGateを構成する場合、wal_levelを有効にしてLOGICALに設定する必要があります。

移行に使用されるデータベース・ユーザーには、レプリケーション権限が必要です。次を使用して、ソース・システム内のユーザーに権限を付与します。

ALTER ROLE <migration-user> WITH REPLICATION;

ソース・データベース・スキーマのダンプ

コンピュート・インスタンスからソース・データベース・システムへの接続をテストし、次のコマンドを使用してソース・データベースのスキーマをダンプします:

/<path-to-binary>/pg_dump -U <user-to-take-dump> -h <IP-of-source-DB> -s -E 'UTF8' -d <source-DB-name> -f schema_only.sql
  • -U: ダンプを作成するユーザー
  • -h: ソース・データベースのホスト・アドレス
  • -s: スキーマのみをダンプし、データはダンプしません。
  • -E: ダンプ・ファイルのクライアント・エンコーディングをUTF-8に設定します。
  • -d: ダンプするデータベース
  • -f: データベース・スキーマをダンプするO/pファイル

このスキーマは、ターゲット・データベース・システムの準備時に使用されます。pg_dumpおよびPostgreSQLを使用したOCIデータベースの詳細は、pg_dumpなどのPostgreSQLユーティリティの使用を参照してください。

ターゲット・データベース・システムの準備

次のコマンドを使用して、GoldenGateを使用してデータをPostgreSQLでOCIデータベースにレプリケートするための前提条件が満たされ、ソース・データベースが準備されていることを確認し、ソース・データベースのスキーマPostgreSQLでOCI Databaseターゲットにリストアします:

/<path-to-binary>/psql -U <user-to-load-dump> -d <target-DB-name> -h <Private_endpoint_of_target_database_system> -f schema_only.sql
  • -U: ユーザーがダンプをリストアしています
  • -h: 宛先データベースのホスト・アドレス
  • -d: ダンプするデータベース
  • -f: データベース・スキーマをダンプするO/pファイル

psqlおよびPostgreSQLを使用したOCIデータベースの詳細は、pg_dumpなどのPostgreSQLユーティリティの使用を参照してください。

ヒント

インスタンスを使用してデータベース・システムに接続する方法の詳細は、データベースへの接続を参照してください。

GoldenGateを使用したレプリケーション

OCI Database with PostgreSQLで使用するGoldenGateを設定するには、次のステップを使用します。宛先OCI Database with PostgreSQLデータベース・システムを含むコンパートメントを使用します。

  1. デプロイメントを作成し、テクノロジとしてPostgreSQLを選択します。
  2. ソース・データベースおよびテスト接続に基づいてソース接続を作成します。
  3. PostgreSQLサーバー接続先接続およびテスト接続を作成します。

    ノート

    ネットワーク接続の場合は、トラフィック・ルーティング方法として「専用エンドポイント」を選択します。
  4. ソース接続と宛先接続の両方をデプロイメントに割り当てます
  5. PostgreSQLのExtractをデプロイメントに追加して、ソース接続に対して実行し、データを抽出(取得)します。
    1. ソース・データベースのサプリメンタル表レベルのロギングを有効にします。ソース・データベース・スキーマをダンプしたときに作成されたスキーマ名を使用します。詳細は、PostgreSQLのExtractの追加: 開始する前にのステップサプリメンタル・ロギングの有効化を参照してください。
    2. 初期ロード抽出(INI)を追加します。
      1. 証跡名(xxなど)を指定します。このファイルは、ソース・データベースで発生した変更を保持します。
      2. 「パラメータ・ファイル」ページで、ファイルに次のものが含まれていることを確認します。

        exttrail xx
        INITIALLOADOPTIONS USESNAPSHOT
        TABLE *.*;

        INITIALLOADOPTIONSを追加して、初期ロード抽出の完了後にLSN番号とともにデータベースの一貫したスナップショットを確保する必要があります。

      3. 「作成して実行」を選択します。
      4. 完了するまでプロセスをモニターし、レポート・ファイルでLSN番号を確認します。将来使用するためにLSN番号を記録します。
  6. デプロイメントに別のExtractを追加します。今回は、抽出タイプとして「チェンジ・データ・キャプチャ抽出」(CDC)を選択します。
    1. 「開始」で、「なし」を選択します。
    2. 証跡名(yyなど)を指定します。
    3. 「パラメータ・ファイル」ページで、ファイルに次のものが含まれていることを確認します。

      exttrail yy
      TABLE public.*;

      INITIALLOADOPTIONSを追加して、初期ロード抽出の完了後にLSN番号とともにデータベースの一貫したスナップショットを確保する必要があります。

    4. 「作成」を選択します。Extractをまだ実行しないでください。
    5. デプロイメント・ページで、新しいCDCの「アクション」メニューから「次で始まる」オプションを選択します。
    6. 「開始ポイント」で、「CSN時」を選択します。
    7. 「CSN」に、初期抽出からLSN番号を入力し、「開始」を選択します。ソース・データベースのトランザクションが取得され、CDC抽出の「統計」タブに表示されます。
    ノート

    これまでのところ、ソース・データベースのみを使用しています。初期ロードExtractおよびCDCの開始では、デプロイメント上のそれぞれの証跡ファイルにソースの変更が記録されます。Replicatプロセスは、これらの証跡ファイルから宛先OCI Database with PostgreSQLデータベース・システムにデータを配信します。
  7. PostgreSQLのReplicatをデプロイメントに追加します。このReplicatは、初期ロードExtract (REINI)用です。
    1. チェックポイント表の作成詳細は、「PostgreSQLのレプリケートの追加: 開始する前に」を参照してください。
    2. Replicatを作成する場合は、INIから証跡名(xxなど)を指定します。
    3. Replicatの「チェックポイント表」を指定します。
    4. 「パラメータ・ファイル」ページで、次のような内容がファイルに含まれていることを確認します。

      MAP public.* TARGET public.*;
    5. 「作成して実行」を選択します。OCI Database with PostgreSQLデータベース・システムへのデータのロードが開始されたことを確認します。
  8. PostgreSQLのReplicatをデプロイメントに追加します。このReplicatは、Change Data Capture Extract (RECDC)用です。
    1. Replicatを作成する場合は、CDCから証跡名(yyなど)を指定します。
    2. Replicatの「チェックポイント表」を指定します。
    3. 「パラメータ・ファイル」ページで、次のような内容がファイルに含まれていることを確認します。

      MAP public.* TARGET public.*;
    4. 「作成」を選択します。REINIが完了するまでRECDCを実行しないでください。GoldenGateには、2つのExtractプロセスと2つのReplicatプロセスが必要です。
    5. デプロイメント・ページで、新しいRECDCの「アクション」メニューから「開始」を選択します。
  9. ターゲットのOCI Database with PostgreSQLデータベース・システムのステータスを確認し、レコード数と値に一致させます。