SQL Server データベースを Cloud Storage バケットにバックアップする

このチュートリアルでは、Microsoft SQL Server 2022 データベースを Cloud Storage バケットに直接バックアップし、後で復元する方法について説明します。SQL Server 2022 で導入された SQL Server バックアップ ネイティブ機能は、クラウドベースの障害復旧とデータ移行のためのシームレスで費用対効果の高い戦略を提供します。

SQL Server バックアップのネイティブ機能は、Cloud Storage などの S3 互換オブジェクト ストレージをサポートする BACKUP TO URL コマンドと RESTORE FROM URL コマンドを利用します。これにより、中間ローカル ストレージが不要になり、バックアップ ワークフローが簡素化され、運用オーバーヘッドが削減されます。

このチュートリアルは、データベース管理者とエンジニアを対象としています。

Cloud Storage バケットを作成する

Google Cloud コンソールまたは gcloud storage コマンドを使用して、Cloud Storage バケットを作成できます。

gcloud storage コマンドを使用して Cloud Storage バケットを作成するには、次の手順を行います。

  1. Google Cloud プロジェクトを選択します。

    gcloud config set project PROJECT_ID
    
  2. バケットを作成します。バケットを作成するには、次のように gcloud storage buckets create コマンドを実行します。

      gcloud storage buckets create gs://BUCKET_NAME --location=BUCKET_LOCATION
    

    次のように置き換えます。

  • BUCKET_NAME: バケットの一意の名前。
  • BUCKET_LOCATION: バケットのロケーション。

S3 相互運用性を構成してアクセスキーを作成する

SQL Server が S3 プロトコルを使用して Cloud Storage と通信できるようにするには、次の手順で相互運用性を有効にしてアクセスキーを生成する必要があります。

  1. Google Cloud コンソールで Cloud Storage の設定に移動します。

    Cloud Storage の設定に移動

  2. [相互運用性] タブを選択します。

  3. [ユーザー アカウントのアクセスキー] で、[キーを作成] をクリックします。

    バケット アクセスキー

  4. 生成されたアクセスキーシークレットを安全に保存します。メモした値は、次のステップで使用します。

本番環境では、セキュリティと管理を強化するために、サービス アカウントのハッシュベースのメッセージ認証コード(HMAC)キーを使用することをおすすめします。

SQL Server に認証情報を追加する

SQL Server が Cloud Storage バケットで認証できるようにするには、SQL Server 内に認証情報オブジェクトを作成して、Cloud Storage のアクセスキーとシークレットを保存する必要があります。これを行うには、SQL Server Management Studio(SSMS)で次の T-SQL コマンドを実行します。

CREATE CREDENTIAL CREDENTIAL_NAME
WITH
    IDENTITY = 'S3 Access Key',
    SECRET = 'ACCESS_KEY:SECRET';

次のように置き換えます。

  • CREDENTIAL_NAME: 認証情報の名前。
  • ACCESS_KEY: 前のセクションで作成したアクセスキー。
  • SECRET: 前のセクションで作成したシークレット。

IDENTITY = 'S3 Access Key' は、新しい S3 コネクタを使用するように SQL Server に指示するため、重要です。シークレットは、アクセスキー、コロン、シークレット キーの順にフォーマットする必要があります。

例:

CREATE CREDENTIAL sql_backup_credentials
WITH
    IDENTITY = 'S3 Access Key',
    SECRET = 'GOOGGE3SVF7OQE5JRMLQ7KWB:b31Pl8Tx1ARJfdGOsbgMFQNbk3nPdlT2UCYzs1iC';

Cloud Storage にデータをバックアップする

認証情報が設定されたら、TO URL オプションを指定した BACKUP DATABASE コマンドを使用して、データベースを Cloud Storage バケットに直接バックアップできます。次のように、URL の先頭に s3://storage.googleapis.com を付けて S3 コネクタを使用します。

BACKUP DATABASE DATABASE_NAME
TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME.bak'
WITH
    CREDENTIAL = 'CREDENTIAL_NAME',
    FORMAT,
    STATS = 10,
    MAXTRANSFERSIZE = 10485760,
    COMPRESSION;

次のように置き換えます。

  • CREDENTIAL_NAME: 手順 3 で作成した認証情報の名前。例: sql_backup_credentials
  • BUCKET_NAME: 手順 1 で作成したバケットの名前。
  • FOLDER_NAME: バックアップ ファイルを保存するフォルダの名前。
  • BACKUP_FILE_NAME: バックアップ ファイルの名前。

コマンドで使用されるバックアップ パラメータの説明は次のとおりです。

  • FORMAT: 既存のバックアップ ファイルを上書きして、新しいメディアセットを作成します。
  • STATS: バックアップの進行状況を報告します。
  • COMPRESSION: バックアップを圧縮します。これにより、ファイルサイズとアップロード時間を短縮できます。
  • MAXTRANSFERSIZE: 大きなバックアップ ファイルで I/O エラーが発生しないようにすることをおすすめします。

詳細については、S3 互換オブジェクト ストレージの URL への SQL Server バックアップをご覧ください。

データベースが非常に大きい場合は、バックアップを複数のファイルに分割できます。

BACKUP DATABASE DATABASE_NAME
TO
    URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME_0.bak',
    URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME_1.bak'
    -- ... more files
WITH
    CREDENTIAL = 'CREDENTIAL_NAME',
    FORMAT,
    STATS = 10,
    MAXTRANSFERSIZE = 10485760,
    COMPRESSION;

Cloud Storage からデータを復元する

RESTORE DATABASE コマンドを使用すると、Cloud Storage に保存されているバックアップ ファイルからデータベースを直接復元できます。

RESTORE DATABASE DATABASE_NAME
FROM URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME.bak'
WITH
    CREDENTIAL = 'CREDENTIAL_NAME';

次のように置き換えます。

  • CREDENTIAL_NAME: 手順 3 で作成した認証情報の名前。例: sql_backup_credentials
  • BUCKET_NAME: 手順 1 で作成したバケットの名前。
  • FOLDER_NAME: バックアップ ファイルを保存するフォルダの名前。
  • BACKUP_FILE_NAME: バックアップ ファイルの名前。