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 バケットを新規作成する
  • SQL Server コネクタを構成する
  • データベースをバックアップする
  • バックアップからデータベースを復元する

料金

このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

新規の Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. このチュートリアルでは Google Cloud プロジェクトが必要です。新しいプロジェクトを作成することも、すでに作成済みのプロジェクトを選択することもできます。

    1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    2. Verify that billing is enabled for your Google Cloud project.

    3. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

    4. Microsoft SQL Server 2022 以降がインストールされ、実行されていることを確認します。

    5. Google Cloud プロジェクトと SQL Server の両方に、バックアップと復元のタスクを実行するために必要な権限があることを確認します。

    6. アクセスキーに関連付けられているユーザーまたはサービス アカウントに、Cloud Storage バケットでオブジェクトを作成して表示する権限があることを確認します。

    7. バックアップの実行に使用する SQL Server ユーザー アカウントに、データベースのバックアップとログのバックアップの権限があることを確認します。

    8. 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: バックアップ ファイルの名前。

      クリーンアップ

      このチュートリアルで使用したリソースについて Google Cloud アカウントに課金されないようにするには:

      プロジェクトの削除

      1. In the Google Cloud console, go to the Manage resources page.

        Go to Manage resources

      2. In the project list, select the project that you want to delete, and then click Delete.
      3. In the dialog, type the project ID, and then click Shut down to delete the project.

      次のステップ