移行ツールのオプションを特定する
PostgreSQL サーバーから Azure Database for PostgreSQL フレキシブル サーバーへの移行を実行するための多くのオプションがあります。 pg_dump、pgadmin、pg_restore などのネイティブ PostgreSQL ツールがあります。 Azure Database for PostgresSQL - フレキシブル サーバーには、Database Migration Service や移行オプションなどの Microsoft Azure クラウド サービスがあり、主にソースからターゲットへの全体的なデータ転送プロセスを自動化できます。
Azure Database for PostgreSQL フレキシブル サーバー - 移行
Azure Database for PostgreSQL - フレキシブル サーバー サービス内には、他の PostgreSQL インスタンスから Azure ベースのサービスへのデータベースの移行をサポートするネイティブ機能があります。 このオプションは、ソースからターゲットへのデータベースのオフライン移行を目的とします。 このオプションを使用するには、前述の pg_dumpall および psql ツールを使って、フレキシブル サーバーに移行するサーバー レベルのオブジェクト データベースを移行する必要があります。
この機能は、ソースとして外部 PostgreSQL インスタンスを使用し、ターゲットとして移行プロジェクトが作成されたフレキシブル サーバーを使って設計されています。 基本的には、フレキシブル サーバーにデータをプルするためのものです。 手動のダンプと復元プロセスを実行するよりもこのサービスを使用する利点は、移行の管理性です。 構成が完了すると、フレキシブル サーバーに移行されるすべてのテーブルのプロセスが監視されるため、アプリケーション レベルでカットオーバーをいつ実行できるかを簡単に確認できます。
移行プロジェクト
接続を並べ替えたら、あとは新しいサーバーに移行するデータベースを選択するだけです。 次のスクリーンショットでは、大規模なシステムの一部を形成する複数のサービスをバックアップする複数のデータベースがある場合、一度に 1 つではなくグループとして移行することを選択できることに注目してください。 このデータベースのグループ化は、移行を高速化するだけでなく、移行アクティビティ中に論理的な一貫性を維持するのにも非常に役立ちます。
検証と移行のプロセスを開始すると、プロジェクト ダッシュボードを使用してプロセスの全体的な進行状況を確認できます。 このダッシュボードは、データベースが検証されたとき、およびその後に新しいサーバーに移行されたときに表示されます。
この情報は移行後も保持され、全体的な進行状況を追跡できます。 また、この情報では、実施された作業の成功と期間に関する制御プロセスを変更するために必要な証拠も提供されます。
PostgreSQL ツール
ここでは、PostgreSQL サーバーから Azure Database for PostgreSQL フレキシブル サーバーにデータを移行するために使用できる主なツールについて調べます。
pgcopydb
pgcopydb は、PostgreSQL サーバー間でデータベースをコピーするプロセスを自動化できるオープン ソース プロジェクトです。 PostgreSQL のインストール時に提供されるネイティブ ツールよりも pgcopydb を使用する利点がいくつかあります。これらの利点は次のとおりです。
- pg_backup と pg_restore を使用した中間ファイルの必要性がなくなる。
- PostgreSQL 内の synchronize__seqscans 機能を使用して、テーブルでのインデックスの作成を並列化するためのインデックスの作成コンカレンシー。
- データをパーティション分割し、より大きなテーブルを並列転送するためのマルチスレッド テーブルのコピー。
- 長期のダウンタイム期間の必要性を最小限に抑えるためのデータ同期の変更データ キャプチャ。
pgcopydb 内には、ソース サーバーからターゲットへのデータベースとデータの移行に使用できる主なオプションが 2 つあります。 これらのオプションは clone と copy です。
pgcopydb clone
clone は、ソース サーバーからターゲットにデータベース全体をコピーするための主要なオプションです。 このコマンドには、移行のダウンタイムを最小限に抑えるためにデータを同期する変更データ キャプチャの構成を自動化するまで、基本的なクローン操作を構成できるいくつかのスイッチがあります。 テーブルによるデータ転送を並列化するオプションと、テーブル、インデックス、およびラージ オブジェクトの並列転送オプションを指定することもできます。
pgcopydb copy
copy は、データベースまたはその一部の移行に関して、より細かく制御できるオプションです。 このコマンド オプションを使用して、ソース サーバー データベースからターゲット サーバーとデータベースに転送するスキーマ、テーブル、ロールなどを選択できます。 このコマンドは、アプリケーションの最新化移行アクティビティの一環として、1 つの大規模なデータベースがより小さなものに分解されるシナリオで役立ちます。 また、統合移行アクティビティを使用すると、あるデータベースのコンテンツを別のデータベース内のスキーマに移行できます。
これらのオプションは、pgcopydb がデータベースを Azure Database for PostgreSQL フレキシブル サーバーに移行するプロセスの改善に役立つ方法の一部にすぎません。 このプロセスでは、リスクを最小限に抑え、成功の可能性を最大化する移行方法が提供されます。
pgAdmin
pgAdmin は、PostgreSQL データベースとの対話に使用できる、広く使われている管理ツールです。 このツールを使用すると、pgsql スクリプトを作成して実行できます。 このツールには、PostgreSQL データベースの構成、バックアップ、復元に使用できる便利な GUI ツールの配列が含まれています。 通常は、pgAdmin を管理ワークステーションにインストールします。 このツールを使用すると、複数の PostgreSQL サーバーを登録して接続できるため、移行ツール セットの重要な部分になります。
pg_dump、pg_restore、および psql
pg_dump は、PostgreSQL インスタンスと共にインストールされ、必要に応じて管理ワークステーションにインストールできるコマンド ライン ツールです。 同時ワークロードが発生している場合でも、PostgreSQL から一貫したデータベース バックアップを作成できます。 個々のデータベースで動作し、データベース全体またはその一部をバックアップできます。
pg_dump を使ってスキーマ オブジェクトをエクスポートする場合は、psql を使用してターゲット データベースで結果の .sql ファイルを実行してオブジェクトを作成できます。 この手順の後、ソースからターゲット システムにデータを移動する方法を確認できます。 1 つのデータベースからデータベース スキーマをエクスポートし、別のデータベースで作成するために使用するコマンドを次の例に示します。
pg_dump -O --host=MyServerName --port=5432 --username=adminuser --dbname=AdventureWorks --schema-only > adventureWorks.sql
psql --host=MyFlexibleServer --username=demo --dbname=AdventureWorks < adventureWorks.sql
ソース データベースの完全ダンプを作成する場合は、pg_restore を使用して結果のファイルを読み取り、データベースをターゲットの PostgreSQL インスタンスに復元します。 バックアップと復元をダンプする際に、これらのアクティビティにかかる時間には、いくつかの決定要因があります。 特に、データベースのサイズ、ストレージ サブシステムのパフォーマンス、および処理コンポーネント間のネットワーク帯域幅と待機時間があります。
次の例は、データベース ダンプをカスタムに作成し、別のサーバーに復元する方法を示しています。
pg_dump -Fc --host=MyServerName --port=5432 --username=adminuser --dbname=AdventureWorks > db.dump
pg_restore -Fc --host=MyServerName --port=5432 --create --username=adminuser --dbname=AdventureWorks db.dump
pg_dumpall
pg_dump は単一のデータベースをダンプするために使用されますが、pg_dumpall は psql が PostgreSQL の新しいインスタンスに読み取る単一のスクリプト ファイルにすべてのデータベースをダンプするために使われます。
さらに、pg_dumpall を使用して、サーバー間の移行時にデータベースが依存できるロールなどのグローバル サーバー レベル オブジェクトのスクリプト ファイルを生成できます。