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

別のPostgreSQLデータベースからPostgreSQLOCI Database with PostgreSQLデータベース・システムを使用するOCI Databaseにデータを移行するか、別の場所で使用するためにPostgreSQLOCI Database with PostgreSQLを使用してOCI Databaseからデータを抽出する方法を学習します。

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

pg_dumpユーティリティには、デフォルトでPostgreSQLインストールが付属しており、PostgreSQLデータベースをスクリプト・ファイルまたは他のアーカイブ・ファイルに抽出するために使用できます。

These files can be provided to OCI Database with PostgreSQL with psql or pg_restore commands to re-create a database in the same state at the time of its dump.

Note

You can also use these commands against an OCI Database with PostgreSQL database to dump it to a format compatible with on-premises PostgreSQL installations or other cloud providers. 詳細は、PostgreSQLリファレンス・マニュアルおよびクラウド・プロバイダのドキュメントを参照してください。

When you create an OCI Database with PostgreSQL, you specify an admin user. そのユーザーは、これらのユーティリティを使用して作成されたファイルからリストアできます。これらのユーティリティは通常のPostgreSQLクライアント・アプリケーションであるため、データベースにアクセスできるリモート・ホストからこの移行手順を実行できます。

ノート

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

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

次の例では、ソース・データベース・システムがバニラPostgreSQLシステムであり、3つのデータベース(db_1db_2およびdb_3)があることを前提としています。ソース・データベース・システムには多数のユーザーがあり、その一部には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. PostgreSQLOCI Database with PostgreSQLデータベース・システムを使用するOCI Databaseの管理ユーザーには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. Restore the global dump using the OCI Database with PostgreSQL admin user onto the OCI Database with PostgreSQL database system to create all the roles/users:

    /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データベースからPostgreSQLOCI Database with PostgreSQLデータベース・システムを使用するOCI Databaseへのレプリケーションを設定できます。

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

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

前提条件

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

  • 必要なIAMリソースおよびOCIネットワークが設定されていることを確認します。For more information, see Getting Started with OCI Database with PostgreSQL.
  • GoldenGateレプリケーションの宛先として使用できるデータベース・システムを作成します。

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

      注意

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

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

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

ユーザーの要件

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

構成要件

すべてのソース・データベースは、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

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

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

PostgreSQLデータベースに対してAzure Database for 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およびOCI Database with PostgreSQLの詳細は、pg_dumpなどのPostgreSQLユーティリティの使用を参照してください。

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

GoldenGateを使用してPostgreSQLでOCI Databaseにデータをレプリケートするための前提条件が満たされていること、ソース・データベースが準備されていることを確認してから、次のコマンドを使用してソース・データベースのスキーマをPostgreSQLOCI Database with 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およびOCI Database with PostgreSQLの詳細は、pg_dumpなどのPostgreSQLユーティリティの使用を参照してください。

ヒント

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

レプリケーションでのGoldenGateの使用

次のステップを使用して、OCI Database with PostgreSQLで使用するGoldenGateを設定します。Use the compartment that contains the destination OCI Database with PostgreSQL database system.

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

    ノート

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

        exttrail xx
        INITIALLOADOPTIONS USESNAPSHOT
        TABLE *.*;

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

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

      exttrail yy
      TABLE public.*;

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

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

    これまでのところ、ソース・データベースでのみ作業しています。初期ロードExtractおよびCDCの開始は、デプロイメント上の各証跡ファイル内のソースの変更を記録します。The Replicat process delivers the data from these trail files to destination OCI Database with PostgreSQL database system.
  7. PostgreSQLのReplicatをデプロイメントに追加します。このReplicatは初期ロードExtract (REINI)用です。
    1. チェックポイント表を作成します。詳細は、「PostgreSQLのレプリケートの追加: 開始する前に」を参照してください。
    2. Replicatを作成する場合は、INIから「証跡名」を指定します(たとえば、xx)。
    3. Replicatのチェックポイント表を指定します。
    4. 「パラメータ・ファイル」ページで、ファイルに次のようなものが含まれていることを確認します。

      MAP public.* TARGET public.*;
    5. 「作成および実行」を選択します。Verify that data has started loading into the OCI Database with PostgreSQL database system.
  8. PostgreSQLのReplicatをデプロイメントに追加します。このReplicatは、チェンジ・データ・キャプチャ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データベース・システムのステータスを確認し、レコード数と値を照合します。