データベースのインポート、エクスポートおよび移行
PostgreSQLデータベース・システムを使用して、別のPostgreSQLデータベースからOCIデータベースにデータを移行します。
pg_dumpなどのPostgreSQLユーティリティの使用
pg_dump
ユーティリティには、デフォルトでPostgreSQLインストールが付属しており、PostgreSQLデータベースをスクリプト・ファイルまたはその他のアーカイブ・ファイルに抽出するために使用できます。これらのファイルは、psql
またはpg_restore
コマンドを使用してPostgreSQLを使用してOCIデータベースに提供し、ダンプ時に同じ状態でデータベースを再作成できます。
PostgreSQLを使用してOCIデータベースを作成する場合は、管理ユーザーを指定します。このユーザーは、これらのユーティリティを使用して作成されたファイルからリストアできます。これらのユーティリティは通常のPostgreSQLクライアント・アプリケーションであるため、データベースにアクセスするリモート・ホストからこの移行手順を実行できます。
このガイドでは、
pg_dump
を使用してプレーン・テキスト形式のダンプを作成し、psql
ユーティリティを使用してダンプをリストアします。ダンプを別の形式で作成し、pg_restore
を使用してダンプをリストアすることもできます。例: データベース・システムのすべてのデータベースのエクスポートおよびインポート
次の例では、ソース・データベース・システムが、3つのデータベース(db_1、db_2およびdb_3)を持つバニラPostgreSQLシステムであると想定しています。ソース・データベース・システムには多数のユーザーがあり、その一部にはSUPERUSER権限があります。
-
すべてのデータベースのスキーマのみのダンプを取得します。ユーザーのオブジェクト所有権情報を使用して、各データベースを個々のファイルにダンプします。
/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に対して繰り返します。
-
各データベースのデータのみのダンプを個々のファイルに作成します。
/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に対して繰り返します。
-
表領域情報なしでグローバル・オブジェクトをダンプします。
/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
: PostgreSQLを使用するOCIデータベースでは、インプレース表領域のみがサポートされます。
-
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';
-
PostgreSQL管理ユーザーを含むOCIデータベースを使用してグローバル・ダンプをPostgreSQLデータベース・システムでOCIデータベースにリストアし、すべてのロール/ユーザーを作成します。
/usr/lib/postgresql/bin/psql -U psql -d postgres -h <IP_of_Target_Database_System> -f <all_roles>.sql
-h
: PostgreSQLデータベース・システムIPを使用してOCIデータベースをターゲット指定します。データベース・システムのIPアドレスを検索する方法は、データベース・システムに関する詳細の取得を参照してください。
-
スキーマのみのデータベース・ダンプをリストアします。
/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に対して繰り返します。
ノート
続行する前に、権限またはオブジェクトの不一致に関するエラーを修正してください。 -
データのみのデータベース・ダンプをリストアします。
/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に対して繰り返します。
- ソース・データベースに対するすべての表の行数を確認します。
- PostgreSQLデータベース・システムで、すべてのソース・データベース・システムの権限レベルがOCIデータベースに正確に反映されていることを確認します。
- PostgreSQLデータベース・システムでOCIデータベースに作成されたユーザーのパスワードを設定します。
-
各データベースまたは個々の表で
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データベース・システムを持つソースPostgreSQLデータベースからOCIデータベースへのレプリケーションを設定できます。
次のステップでは、データベースの同期を維持するためのソース、ターゲットおよびGoldenGateの構成について説明します。プロセスが正常に完了した後、停止時間なしで、いつでもPostgreSQLを使用してOCIデータベースにカットオーバーすることを選択できます。
前提条件:
GoldenGateを使用するには、次の前提条件が満たされていることを確認します。
- 必要なIAMリソースとOCIネットワークが配置されていることを確認します。詳細は、PostgreSQLを使用したOCIデータベースのスタート・ガイドを参照してください。
-
GoldenGateレプリケーションの宛先として使用できるデータベース・システムを作成します。
- コンピュート・インスタンスを作成して、ソースおよび宛先のデータベース・システムに接続できるPostgreSQLクライアントをホストします。インスタンスを作成すると、次のようになります。
-
SSHキー・ペアをダウンロードします。
注意
秘密キーにアクセスできるすべてのユーザーがインスタンスに接続できます。秘密キーはセキュアな場所に格納してください。 - データベース・システムを作成したときに使用するVCNおよびプライベート・サブネットを選択します。
- https://www.postgresql.org/download/の手順に従って、データベース・システムのPostgreSQLバージョンと互換性のあるバージョンのPostgreSQLクライアントをインストールします。
-
ソース・データベースの準備
GoldenGateがデータを抽出およびレプリケートするには、ソース・データベースがユーザーおよび構成の要件を満たす必要があります。
ユーザー要件
GoldenGateプロセスには、ソース・データを取得し、PostgreSQLを使用してOCIデータベースに配信できるデータベース・ユーザーが必要です。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 AWSのドキュメントを参照してください。
データベースの構成要件が、インスタンスに割り当てられているパラメータ・グループの設定を検証して満たされていることを確認します。
Amazon Auroraのwal_level
設定は、rds.logical_replication
というパラメータで構成されます。rds.logical_replication
を1
に設定して、データベースをGoldenGate Extractのソースとして使用します。
移行に使用されるデータベース・ユーザーには、レプリケーション権限が必要です。次を使用して、ソースAmazon Auroraシステムのユーザーに権限を付与します:
grant replication to <migration-user>;
Amazon RDS for PostgreSQLでは、データベース設定はパラメータ・グループを使用して変更されます。新しいパラメータ・グループ内のデータベース設定を編集してデータベース・インスタンスに割り当てる方法については、Amazon AWSのドキュメントを参照してください。
データベースの構成要件が、インスタンスに割り当てられているパラメータ・グループの設定を検証して満たされていることを確認します。
Amazonデータベース・サービスのwal_level
設定は、rds.logical_replication
というパラメータで構成されます。rds.logical_replication
を1
に設定して、データベースをGoldenGate Extractのソースとして使用します。
移行に使用されるデータベース・ユーザーには、レプリケーション権限が必要です。次を使用して、ソースAmazon RDSシステム内のユーザーに権限を付与します:
grant replication to <migration-user>;
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データベースにリストアします:
/<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を使用します。
PostgreSQLでOCIデータベースで使用するGoldenGateを設定するには、次のステップを使用します。PostgreSQLデータベース・システムで、宛先OCIデータベースを含むコンパートメントを使用します。
- デプロイメントを作成し、テクノロジとしてPostgreSQLを選択します。
- ソース・データベースおよびテスト接続に基づいてソース接続を作成します。
-
PostgreSQLサーバー接続先接続およびテスト接続を作成します。
ノート
ネットワーク接続の場合は、トラフィック・ルーティング方法として「専用エンドポイント」を選択します。 - ソース接続と宛先接続の両方をデプロイメントに割り当てます。
- PostgreSQLのExtractをデプロイメントに追加して、ソース接続に対して実行し、データを抽出(取得)します。
- ソース・データベースのサプリメンタル表レベルのロギングを有効にします。ソース・データベース・スキーマをダンプしたときに作成されたスキーマ名を使用します。詳細は、PostgreSQLのExtractの追加: 開始する前にのステップサプリメンタル・ロギングの有効化を参照してください。
- 初期ロード抽出(INI)を追加します。
- 証跡名(
xx
など)を指定します。このファイルは、ソース・データベースで発生した変更を保持します。 -
「パラメータ・ファイル」ページで、ファイルに次のものが含まれていることを確認します。
exttrail xx INITIALLOADOPTIONS USESNAPSHOT TABLE *.*;
INITIALLOADOPTIONS
を追加して、初期ロード抽出の完了後にLSN番号とともにデータベースの一貫したスナップショットを確保する必要があります。 - 「作成して実行」を選択します。
- 完了するまでプロセスをモニターし、レポート・ファイルでLSN番号を確認します。将来使用するためにLSN番号を記録します。
- 証跡名(
- デプロイメントに別のExtractを追加します。今回は、抽出タイプとして「チェンジ・データ・キャプチャ抽出」(CDC)を選択します。
- 「開始」で、「なし」を選択します。
- 証跡名(
yy
など)を指定します。 -
「パラメータ・ファイル」ページで、ファイルに次のものが含まれていることを確認します。
exttrail yy TABLE public.*;
INITIALLOADOPTIONS
を追加して、初期ロード抽出の完了後にLSN番号とともにデータベースの一貫したスナップショットを確保する必要があります。 - 「作成」を選択します。Extractをまだ実行しないでください。
- デプロイメント・ページで、新しいCDCの「アクション」メニューから「次で始まる」オプションを選択します。
- 「開始ポイント」で、「CSN時」を選択します。
- 「CSN」に、初期抽出からLSN番号を入力し、「開始」を選択します。ソース・データベースのトランザクションが取得され、CDC抽出の「統計」タブに表示されます。
ノート
これまでのところ、ソース・データベースのみを使用しています。初期ロードExtractおよびCDCの開始では、デプロイメント上のそれぞれの証跡ファイルにソースの変更が記録されます。Replicatプロセスは、PostgreSQLデータベース・システムを使用して、これらの証跡ファイルから宛先OCIデータベースにデータを配信します。 - PostgreSQLのReplicatをデプロイメントに追加します。このReplicatは、初期ロードExtract (REINI)用です。
- チェックポイント表の作成詳細は、「PostgreSQLのレプリケートの追加: 開始する前に」を参照してください。
- Replicatを作成する場合は、INIから証跡名(
xx
など)を指定します。 - Replicatの「チェックポイント表」を指定します。
-
「パラメータ・ファイル」ページで、次のような内容がファイルに含まれていることを確認します。
MAP public.* TARGET public.*;
- 「作成して実行」を選択します。PostgreSQLデータベース・システムでOCIデータベースへのデータのロードが開始されたことを確認します。
- PostgreSQLのReplicatをデプロイメントに追加します。このReplicatは、Change Data Capture Extract (RECDC)用です。
- Replicatを作成する場合は、CDCから証跡名(
yy
など)を指定します。 - Replicatの「チェックポイント表」を指定します。
-
「パラメータ・ファイル」ページで、次のような内容がファイルに含まれていることを確認します。
MAP public.* TARGET public.*;
- 「作成」を選択します。REINIが完了するまでRECDCを実行しないでください。GoldenGateには、2つのExtractプロセスと2つのReplicatプロセスが必要です。
- デプロイメント・ページで、新しいRECDCの「アクション」メニューから「開始」を選択します。
- Replicatを作成する場合は、CDCから証跡名(
- PostgreSQLデータベース・システムでターゲットOCIデータベースのステータスを確認し、レコード数と値と一致させます。