SQL Server 2008 と Cloud SQL for SQL Server 間でバックアップ ファイルを使用してデータを移行する

このチュートリアルでは、SQL Server 2008 から Cloud SQL for SQL Server 2017 Enterprise にデータを移行します。SQL Server 2008 からのデータのエクスポート、Cloud SQL for SQL Server 2017 へのインポート、データのインポートが正常であることの検証を実施する方法を説明しています。

SQL Server 2017 からデータを移行する場合は、SQL Server 2017 と Cloud SQL for SQL Server 間でのバックアップ ファイルを使用してデータを移行するをご覧ください。

このチュートリアルは、SQL Server 2008 から Cloud SQL for SQL Server 2017 へのデータ移行、または SQL Server 2008 から SQL Server 2017 へのアップグレードを希望するシステム管理者、デベロッパー、エンジニア、データベース管理者、または DevOps エンジニアの方に役立ちます。

このチュートリアルでは、SQL Server 2008 のライセンスを所有していて、次の知識があることを前提としています。

目標

  • Cloud SQL for SQL Server インスタンスを作成します。
  • Cloud Storage バケットを作成します。
  • データベースをバックアップします。
  • Cloud SQL for SQL Server にデータベースをインポートします。
  • インポートされたデータを検証します。

費用

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

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

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

始める前に

  1. Cloud Console のプロジェクト セレクタページで、Google Cloud プロジェクトを選択または作成します。

    [プロジェクトの選択] のページに移動

  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法

  3. Cloud Storage API と Cloud SQL API を有効にします。

    API を有効にする

  4. SQL Server 2008 を実行しているサーバーで Cloud SDK をインストールして初期化します

  5. Cloud Console で Cloud Shell に移動します。

    Cloud Shell に移動

    Cloud Console の下部で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。gcloud コマンドライン ツールなどの Cloud SDK がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

Cloud SQL インスタンスと Cloud Storage バケットの作成

  1. Cloud Shell で、Cloud SQL for SQL Server 2017 Enterprise インスタンスを作成し、その後データベースをそこに移行します。

    gcloud beta sql instances create target  \
        --database-version=SQLSERVER_2017_ENTERPRISE \
        --cpu=2 \
        --memory=5GB \
        --root-password=sqlserver12@ \
        --zone=us-central1-f
    

    インスタンスの作成には数分かかることがあります。デフォルトの root ユーザー名は sqlserver で、デフォルトのパスワードは sqlserver12@ です。このチュートリアルでは、インスタンスを us-central1-f ゾーンに作成します。ゾーンの詳細については、クラウドのロケーションをご覧ください。

  2. データを Cloud SQL にインポートする前に、バックアップ ファイルを格納する Cloud Storage バケットを作成します。

    gsutil mb -b off -l US "gs://bucket-name"
    

    bucket-name を Cloud Storage バケットの一意の名前に置き換えます。

データベースをバックアップする

このセクションでは、SQL Server 2008 を実行している Windows サーバーに接続し、データベースのバックアップの作成と Cloud Storage へのバックアップ データベースのアップロードを行います。

  1. RDP を使用して SQL Server 2008 を実行している Windows サーバーに接続します。これをプライマリ サーバーまたはレプリカ サーバーにすることができます。

  2. PowerShell コマンドライン ツールを起動します。

  3. Cloud SDK をインストールしたターミナルで、バックアップ フォルダを作成します。

    mkdir c:\backup
    
  4. バックアップ フォルダにデータベースのバックアップを作成します。

    osql -E -Q "BACKUP DATABASE db-name TO DISK='c:\backup\db-name.bak'"
    

    db-name を Cloud SQL に移行するデータベースの名前に置き換えます。

  5. バックアップ ファイルを Cloud Storage バケットにコピーします。

    $PROJECT_ID = (gcloud sql instances describe target --format='value(project)' )
    gsutil cp -n c:\backup\db-name.bak gs://bucket-name
    

バックアップ ファイルを Cloud SQL にインポートする

  1. Cloud Shell で、Cloud SQL インスタンスに関連付けられたサービス アカウントを取得し、変数に保存します。

    SVC_EMAIL_ADDRESS=$(gcloud sql instances describe target \
        --format='value(serviceAccountEmailAddress)')
    echo $SVC_EMAIL_ADDRESS
    

    Google Cloud は、Cloud SQL インスタンスの作成時にサービス アカウントを作成します。サービス アカウントを使用して、Cloud SQL インスタンスに必要なリソースへのアクセス権を付与します。

  2. ライター権限を持つ Cloud Storage バケットのアクセス制御リスト(ACL)に、サービス アカウントを追加します。

    gsutil acl ch -u ${SVC_EMAIL_ADDRESS}:W gs://bucket-name
    
  3. リーダー権限を持つインポート ファイルに、サービス アカウントを追加します。

    gsutil acl ch -u $SVC_EMAIL_ADDRESS:R gs://bucket-name/db-name.bak
    
  4. バックアップ ファイルを Cloud SQL データベースにインポートします。

    gcloud beta sql import bak target \
        gs://bucket-namedb-name.bak \
        --database db-name
    

データのインポートを検証する

このセクションでは、データが正常にインポートされたことを確認します。

  1. Cloud Shell で、以下のように SQL Server ツールキットをインストールします。

    sudo apt-get install -y mssql-tools
    

    ライセンス条項に同意する場合は、表示されたプロンプトで「yes」と入力します。

  2. Cloud SQL インスタンスに安全にアクセスするために、Cloud SQL Proxy をダウンロードします。

    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  3. Cloud SQL Proxy を起動します。

    CONNECTION_NAME=$(gcloud sql instances describe target --format='value(connectionName)')
    ./cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  4. クエリを実行して、テーブルのデータを検証します。

    /opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q "query-string"
    

    query-string を実行する SQL クエリに置き換えます。

    プロンプトが表示されたら、sqlserver12@ パスワードを入力します。

クリーンアップ

課金を停止する最も簡単な方法は、チュートリアル用に作成した Cloud プロジェクトを削除することです。

プロジェクトを削除する

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ