このチュートリアルでは、Compute Engine で実行されている Microsoft SQL Server データベースのクローンを作成する 2 つの方法について説明します。1 つ目の方法では、永続ディスクのスナップショットを使用します。2 つ目の方法では、ネイティブの SQL Server バックアップと復元を使用し、Cloud Storage を使用してバックアップを転送します。Cloud Storage は Google Cloud のオブジェクト ストレージ サービスです。セキュリティと可用性が高く、耐久性があり、わかりやすいファイルの保存手段です。
クローンは、オンライン データベースを別のサーバーにコピーするプロセスです。データベースのコピーは、既存のデータベースから独立し、ポイントインタイム スナップショットとして保存されます。本番環境サーバーに負荷をかけることや、本番環境データの整合性を損なうことなく、作成したデータベースのクローンをさまざまな目的に使用できます。その目的には、次のようなものがあります。
- 分析クエリの実行。
- アプリの負荷テストや統合テスト。
- データ ウェアハウスに入力するデータの抽出。
- データに対するテストの実施。
このチュートリアルで説明するクローンの作成方法には、それぞれにメリットとデメリットがあります。目的に適した方法は状況によって異なります。次の表に、重要な検討事項をいくつか示します。
検討事項 | 方法 1: ディスクのスナップショット | 方法 2: Cloud Storage を使用したバックアップと復元 |
---|---|---|
SQL Server インスタンスに必要なディスク容量の追加 | 追加のディスク容量は不要 | バックアップ ファイルの作成時および復元時に追加容量が必要 |
クローン作成時のソース SQL Server インスタンスへの追加の負荷あり | 追加の負荷なし | バックアップ ファイルの作成時とアップロード時に CPU と I/O への追加の負荷あり |
クローン作成にかかる時間 | 大規模なデータベースの場合は比較的短い | 大規模なデータベースの場合は比較的長い |
Google Cloud の外部にある SQL Server インスタンスからクローンを作成できるか | × | ○ |
複雑さ | クローン作成したディスクの接続に複雑なコマンド シーケンスあり | クローン作成用のコマンドセットは比較的簡単 |
既存のバックアップ システムを活用できるか | ○(バックアップ システムが Google Cloud ディスクのスナップショットを使用している場合) | ○(バックアップ システムが Cloud Storage にネイティブ SQL Server バックアップ ファイルを書き込む場合) |
クローン作成の粒度 | ディスク全体のクローン作成のみ | 指定したデータベースのクローン作成のみ |
データの整合性 | スナップショット時点での整合性 | バックアップ時点での整合性 |
このチュートリアルは、Microsoft Windows のシステム管理、PowerShell、Microsoft SQL Server Management Studio を使用した Microsoft SQL Server の管理に精通していることを前提としています。
目標
- Google Cloud で SQL Server インスタンスを実行する方法を習得します。
- セカンダリ ディスク上にデモ データベースを作成する方法を習得します。
- Compute Engine ディスク スナップショットを使用して SQL Server データベースのクローンを作成する方法を習得します。
- Cloud Storage を使用してバックアップを転送し、SQL Server データベースのクローンを作成する方法を習得します。
費用
このドキュメントでは、課金対象である次の Google Cloud コンポーネントを使用します。
- Compute Engine
- Cloud Storage
- Microsoft Windows と SQL Server のライセンス
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
- Compute Engine API を有効にします。 API を有効にする
次の追加要件を満たしていることを確認します。
- Google Chrome ブラウザを使用している。
- リモート デスクトップ プロトコル(RDP)クライアントをインストールします。詳細については、Microsoft リモート デスクトップ クライアントをご覧ください。RDP クライアントがすでにインストールされている場合は、このタスクをスキップできます。
環境の設定
このチュートリアルを最後まで進めるには、お使いのコンピューティング環境に次のものを設定する必要があります。
- 本番環境データベース サーバーを表す Compute Engine 上の SQL Server インスタンス(名前は
sql-server-prod
とします)。 - 本番環境データベースの保存用に本番環境サーバーにアタッチする追加ディスク(名前は
sql-server-prod-data
とします)。 - クローンを作成する本番環境データベースをシミュレートするための Wide World Importers SQL Server サンプル データベースのコピー。
- テスト環境データベース サーバーを表す Compute Engine 上の SQL Server インスタンス(名前は
sql-server-test
とします)。このサーバー上にデータベースのクローンを作成します。
次の図は、このアーキテクチャを表しています。
本番環境 VM インスタンスを作成する
本番環境をシミュレートするには、Windows Server 上で SQL Server を実行する Compute Engine VM インスタンスを設定します。
このチュートリアルの VM インスタンスは、OS とユーザー アカウント用に 50 GB ディスク、データベース ストレージ用に 100 GB ディスクの 2 つのディスクを使用します。
Compute Engine では、ディスクを分けることによるパフォーマンス上のメリットはありません。ディスクのパフォーマンスは、インスタンスにアタッチされているすべてのディスクの合計ストレージ容量と、VM インスタンスの vCPU の合計数によって決まります。したがって、データベースとログファイルは同じディスク上に存在できます。
コンソール
Google Cloud コンソールで [VM インスタンス] ページに移動します。
[作成] をクリックします。
[名前] フィールドに「
sql-server-prod
」と入力します。[リージョン] で [us-east1] を選択します。
[ゾーン] で [us-east1-b] を選択します。
[マシンの構成] で [マシンタイプ] を [n1-standard-2](2 vCPU)に変更します。
[ブートディスク] の説明の横にある [変更] をクリックします。
[ブートディスク] パネルで、[公開イメージ] タブをクリックします。
[オペレーティング システム] プルダウン リストで [Windows Server 上の SQL Server] を選択します。
[バージョン] プルダウン リストで [Windows Server 2019 Datacenter 上の SQL Server 2019 Standard] を選択します。
次の値が設定されていることを確認します。
- [ブートディスクの種類] が [標準永続ディスク] に設定されている。
- [サイズ(GB)] が [50] に設定されている。
[選択] をクリックします。
[ID と API へのアクセス] で [アクセス スコープ] を [すべての Cloud API に完全アクセス権を許可] に設定します。
[管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] を展開します。
[ディスク] タブをクリックします。
[新しいディスクを追加] add をクリックします。
[名前] フィールドに「
sql-server-prod-data
」と入力します。[サイズ(GB)] フィールドに「
100
」と入力します。[完了] をクリックします。
[作成] をクリックします。
Cloud Shell
Cloud Shell を開きます。
優先ゾーンを設定します。
ZONE=us-east1-b REGION=us-east1 gcloud config set compute/zone "${ZONE}"
Windows Server 2019 Datacenter で SQL Server 2019 Standard のアプリイメージを使用して、Compute Engine インスタンスを作成します。
gcloud compute instances create sql-server-prod \ --machine-type=n1-standard-2 \ --scopes=cloud-platform \ --image-family=sql-std-2019-win-2019 \ --image-project=windows-sql-cloud \ --boot-disk-size=50GB \ --boot-disk-device-name=sql-server-prod \ --create-disk="mode=rw,size=100,type=pd-standard,name=sql-server-prod-data,device-name=sql-server-prod-data"
このコマンドは、インスタンスに Google Cloud APIs への完全アクセス権を付与します。さらに、100 GB のセカンダリ ディスクを作成して、インスタンスにアタッチします。このチュートリアルでは高いパフォーマンスを必要としないため、ディスク パフォーマンスの警告は無視してください。
VM インスタンスに接続する
Google Cloud コンソールで [VM インスタンス] ページに移動します。
VM インスタンスの準備が完了するまで 5 分ほど待ちます。
VM の初期化プロセスをモニタリングするには、Cloud Shell でシリアルポート出力を表示します。
gcloud compute instances tail-serial-port-output sql-server-prod
次のメッセージが表示されたら、初期化は完了です。
Instance setup finished. sql-server-prod is ready to use.
シリアルポートのモニタリングを停止するには、Ctrl + C を押します。
インスタンス名
sql-server-prod
をクリックして [VM インスタンスの詳細] ページを開きます。[リモート アクセス] で [Windows パスワードを設定] をクリックし、[設定] をクリックしてリモートマシンにアカウントを作成します。
この手順ではパスワードが生成されます。パスワードをメモするか、安全な一時ファイルにコピーします。
Google Cloud コンソールの [Compute Engine] セクションで、[RDP] プルダウンをクリックして、[RDP ファイルをダウンロード] オプションを選択し、インスタンスの RDP ファイルをダウンロードします。
このファイルを RDP クライアントで使用することで、インスタンスに接続できます。詳細については、Microsoft リモート デスクトップ クライアントをご覧ください。
プロンプトが表示されたら、生成したパスワードを入力して [OK] をクリックします。
サーバー証明書を受け入れてリモート Windows インスタンスにログインするには、[続行] をクリックします。
使用中のパソコンをネットワーク上の他のパソコンやデバイスから検出可能にするかどうかを確認するメッセージが表示されたら、[いいえ] をクリックします。
追加ディスクを設定する
本番環境インスタンスにアタッチされている 2 番目のディスクは、本番環境データベースを保存するためのものです。このディスクは空のため、パーティション分割、フォーマット、マウントを行う必要があります。
sql-server-prod
インスタンスに接続された RDP セッションで、Windows タスクバーの [スタート] ボタンをクリックします。「diskpart
」と入力し、[diskpart] をクリックして DiskPart を開きます。- アプリに変更を許可するよう求められたら、[はい] をクリックします。
インスタンスにアタッチされているディスクのリストを表示します。
list disk
次のような出力が表示されます。
Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 50 GB 0 B Disk 1 Online 100 GB 100 GB
ディスク 1(100 GB)はデータディスクです。
データディスクを選択します。
select disk 1
ディスクを初期化します。
clean
GUID パーティション分割テーブルを作成します。
convert gpt
ディスク全体を使用してデータ パーティションを作成します。
create partition primary
使用可能なボリュームを一覧表示します。
list volume
次のような出力が表示されます。
Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ----- ---------- ------- --------- -------- Volume 0 C NTFS Partition 49 GB Healthy Boot Volume 1 FAT32 Partition 100 MB Healthy System Volume 2 RAW Partition 99 GB Healthy
ボリューム 2(99 GB)はデータディスクです。
ボリュームを選択します。
select volume 2
パーティションを NTFS ファイル システムでフォーマットし、
data
というラベルを付けます。format quick fs=ntfs label=data
ディスクをドライブ D としてマウントします。
assign letter=d
DiskPart を終了します。
exit
サンプル データベースをダウンロードする
このクローン作成の演習用に環境を設定するには、次の手順を実行する必要があります。
- ドライブ D(
data
)にディレクトリ構造を作成して、データベースを保存する。 - Wide World Importers SQL Server サンプル データベースのフル バックアップ ファイルをダウンロードする。このデータベースは、クローンを作成する本番環境データベースをシミュレートします。
ディレクトリを作成してバックアップ ファイルをダウンロードする方法は、次のとおりです。
RDP セッションで、Windows タスクバーの [スタート] ボタンをクリックし、「
PowerShell
」と入力してから Windows PowerShell アプリを選択します。PowerShell プロンプトで、データベース ストレージのディレクトリ構造を作成します。
mkdir D:\sql-server-data\wideworldimporters
バックアップ ファイルをドライブ D にダウンロードします。
bitsadmin /transfer sampledb /dynamic /download /priority FOREGROUND ` https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak ` D:\sql-server-data\WideWorldImporters-Full.bak
SQL Server Management Studio をインストールする
次の手順で Microsoft SQL Server Management Studio(SSMS)をインストールします。
PowerShell プロンプトで、SSMS インストーラをダウンロードして実行します。
Start-BitsTransfer ` -Source "https://aka.ms/ssmsfullsetup" ` -Destination "$env:Temp\ssms-setup.exe" & $env:Temp\ssms-setup.exe
プロンプトの内容に同意して、変更を許可します。
SSMS インストーラで [インストール] をクリックします。
インストールが完了したら、[再起動] をクリックしてリモートマシンを再起動します。これで RDP セッションが終了します。
再接続するには、RDP ウィンドウで [接続] をクリックします。リモートマシンの再起動が完了していない場合は、しばらくしてからもう一度接続を試みてください。
先ほど保存したユーザー名とパスワードを入力します([ドメイン] フィールドは空白のままにします)。[OK] をクリックして再接続します。
サンプル データベースを復元する
Microsoft SQL Server Management Studio(SSMS)ウィザードを使用してインタラクティブに、または Transact-SQL コマンドを実行して直接的に、サンプル データベースをドライブ D(data
)に復元する必要があります。
SSMS ウィザード
- RDP セッションで、Windows タスクバーの [スタート] ボタンをクリックし、「
ssms
」と入力して [Microsoft SQL Server Management Studio] を選択します。 - アプリが起動したら、[接続] をクリックし、Windows 認証を使用して
sql-server-prod
データベース エンジンに接続します。 - オブジェクト エクスプローラーで [データベース] を右クリックし、[データベースの復元] を選択します。
- [ソース] で [デバイス] を選択し、デバイス名の横にある [...] ボタンをクリックします。
- [バックアップ デバイスの選択] ダイアログで、[バックアップ メディアの種類] に [ファイル] が選択されていることを確認し、[追加] をクリックします。
- ファイル セレクタで、
D:\sql-server-data
を参照し、WideWorldImporters-Full.bak
ファイルをクリックして、[OK] をクリックします。 [OK] をクリックして [バックアップ デバイスの選択] ダイアログを閉じます。
[データベースの復元] ダイアログに、Wide World Importers のデータベース バックアップに関するデータが入力されました。
[ページの選択] で [ファイル] をクリックします。
[すべてのファイルをフォルダーに移動する] チェックボックスをオンにします。
[データ ファイル フォルダー] フィールドと [ログ ファイルのフォルダー] フィールドのどちらにも「
D:\sql-server-data\wideworldimporters
」と入力します。[OK] をクリックして復元オペレーションを開始します。
数分後に、データベースが復元されたことが通知されます。
Transact-SQL
- RDP セッションで、Windows タスクバーの [スタート] ボタンをクリックし、「
ssms
」と入力して [Microsoft SQL Server Management Studio] を選択します。 - アプリが起動したら、[接続] をクリックし、Windows 認証を使用して
sql-server-prod
データベース エンジンに接続します。 - [ファイル] > [新規作成] > [クエリを現在の接続で実行] を選択して新しいクエリ ウィンドウを開きます。
ダウンロードしたバックアップ ファイルから復元を開始します。
USE [master] GO RESTORE DATABASE [WideWorldImporters] FROM DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-Full.bak' WITH FILE = 1, MOVE N'WWI_Primary' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf', MOVE N'WWI_UserData' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf', MOVE N'WWI_Log' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf', MOVE N'WWI_InMemory_Data_1' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1', NOUNLOAD, STATS = 5 GO
このコマンドは、データベースとログファイルを
D:\sql-server-data\wideworldimporters
ディレクトリに復元します。クエリコードを右クリックし、[実行] をクリックします。
データベースの復元が完了するまで数分かかります。オブジェクト エクスプローラーで [更新] refresh をクリックすると、データベースがデータベース ツリーに表示されているかどうかを確認できます。データベースの復元が完了したら、保存せずにクエリ ウィンドウを閉じることができます。
サンプル データベースが機能していることを確認するには、クエリを実行します。
Microsoft SQL Server Management Studio で、[ファイル] > [新規作成] > [クエリを現在の接続で実行] を選択して、新しいクエリ ウィンドウを開いてから次のコードをコピーします。
SELECT top(100) i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName, i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy FROM WideWorldImporters.Sales.Invoices i JOIN WideWorldImporters.Sales.Customers c ON i.CustomerID=c.CustomerID WHERE i.ConfirmedDeliveryTime IS NOT NULL ORDER BY i.InvoiceDate desc;
このクエリは、最近配信された 100 件の請求書から概要情報を取得します。
クエリ ウィンドウを右クリックし、[実行] をクリックします。
[結果] ペインに概要情報が表示されます。
テスト VM インスタンスを作成する
このセクションでは、作成したデータベースのクローンの宛先として、sql-server-test
という名前の SQL Server インスタンスを作成します。このインスタンスの構成は、本番環境インスタンスと同じです。ただし、2 番目のデータディスクは作成しません。代わりに、このチュートリアルの後半でデータディスクをアタッチします。
Console
[VM インスタンス] ページに移動します。
[作成] をクリックします。
[名前] フィールドに「
sql-server-test
」と入力します。[リージョン] で [us-east1] を選択します。
[ゾーン] で [us-east1-b] を選択します。
[マシンの構成] で [マシンタイプ] を [n1-standard-2](2 vCPU)に変更します。
[ブートディスク] イメージの横にある [変更] をクリックします。
[ブートディスク] パネルで、[公開イメージ] タブをクリックします。
[オペレーティング システム] プルダウン リストで [Windows Server 上の SQL Server] を選択します。
[バージョン] プルダウン リストで [Windows Server 2019 Datacenter 上の SQL Server 2019 Standard] を選択します。
次の値が設定されていることを確認します。
- [ブートディスクの種類] が [標準永続ディスク] に設定されている。
- [サイズ(GB)] が [50] に設定されている。
[選択] をクリックします。
[ID と API へのアクセス] で [アクセス スコープ] を [すべての Cloud API に完全アクセス権を許可] に設定します。
[作成] をクリックします。
Cloud Shell
Cloud Shell を開きます。
テスト用の SQL Server インスタンスを作成します。
gcloud compute instances create sql-server-test \ --machine-type=n1-standard-2 \ --scopes=cloud-platform \ --image-family=sql-std-2019-win-2019 \ --image-project=windows-sql-cloud \ --boot-disk-size=50GB \ --boot-disk-device-name=sql-server-test
このチュートリアルでは高いパフォーマンスを必要としないため、ディスク パフォーマンスの警告は無視してください。
VM インスタンスに接続する
Google Cloud コンソールで [VM インスタンス] ページに移動します。
VM インスタンスの準備が完了するまで 5 分ほど待ちます。
VM の初期化プロセスをモニタリングするには、Cloud Shell でシリアルポート出力を表示します。
gcloud compute instances tail-serial-port-output sql-server-prod
次のメッセージが表示されたら、初期化は完了です。
Instance setup finished. sql-server-test is ready to use.
シリアルポートのモニタリングを停止するには、Ctrl + C を押します。
インスタンス名
sql-server-test
をクリックして、[VM インスタンスの詳細] ページを表示します。[リモート アクセス] で [Windows パスワードを設定] をクリックし、[設定] をクリックしてリモートマシンにアカウントを作成します。
この手順ではパスワードが生成されます。パスワードをメモするか、安全な一時ファイルにコピーします。
Google Cloud コンソールの [Compute Engine] セクションで、[RDP] プルダウンをクリックして、[RDP ファイルをダウンロード] オプションを選択し、インスタンスの RDP ファイルをダウンロードします。
このファイルを RDP クライアントで使用することで、インスタンスに接続できます。詳細については、Microsoft リモート デスクトップ クライアントをご覧ください。
プロンプトが表示されたら、生成したパスワードを入力して [OK] をクリックします。
サーバー証明書を受け入れてリモート Windows インスタンスにログインするには、[続行] をクリックします。
PC を検出可能にするかどうかを尋ねられたら、[いいえ] をクリックします。
SQL Server Management Studio をインストールする
次の手順で Microsoft SQL Server Management Studio(SSMS)をインストールします。
RDP セッションで、すべてのウィンドウを最小化し、Windows PowerShell ISE アプリを起動します。
PowerShell プロンプトで、SSMS インストーラをダウンロードして実行します。
Start-BitsTransfer ` -Source "https://aka.ms/ssmsfullsetup" ` -Destination "$env:Temp\ssms-setup.exe" & $env:Temp\ssms-setup.exe
プロンプトの内容に同意して、変更を許可します。
SSMS インストーラで [インストール] をクリックします。
インストールが完了したら、[再起動] をクリックしてリモートマシンを再起動します。これで RDP セッションが終了します。
再接続するには、RDP ウィンドウで [接続] をクリックします。リモートマシンの再起動が完了していない場合は、しばらくしてからもう一度接続を試みてください。
先ほど保存したユーザー名とパスワードを入力します([ドメイン] フィールドは空白のままにします)。[OK] をクリックして再接続します。
Compute Engine のディスク スナップショットを使用したデータベースのクローンの作成
Compute Engine で実行されている SQL Server データベースのクローンを作成するには、データベースを別のデータディスクに保存し、永続ディスク スナップショットを使用してそのディスクのクローンを作成します。
永続ディスクのスナップショットを使用すると、ディスク上のデータのポイントインタイム コピーを取得できます。ディスク スナップショットのスケジュールを設定すると、データを自動的にバックアップできます。
このセクションでは、次の操作を行います。
- 本番環境サーバーのデータディスクのスナップショットを作成します。
- スナップショットから新しいディスクを作成します。
- 新しいディスクをテストサーバーにマウントします。
- このディスク上のデータベースをテスト インスタンスの SQL Server にアタッチします。
次の図は、ディスク スナップショットを使用してデータベースのクローンを作成する方法を示しています。
ディスク スナップショットを作成する
コンソール
Google Cloud コンソールで [VM インスタンス] ページに移動します。
sql-server-prod
インスタンスの名前をクリックします。[VM インスタンスの詳細] ページで、ディスク
sql-server-prod-data
をクリックします。[スナップショットを作成] をクリックします。
スナップショットに
sql-server-prod-data-snapshot
という名前を付けます。[ロケーション] で [リージョン] を選択します。
リージョンが [
us-east1
](VM インスタンスと同じ)に設定されていることを確認します。[VSS を有効にする] オプションをオンにします。
このオプションでは、Microsoft Windows のボリューム シャドウ コピー サービスを使用して一貫性のあるスナップショットを作成します。
[作成] をクリックします。
スナップショットの作成には、数分かかります。
Cloud Shell
Cloud Shell を開きます。
VM インスタンスと同じゾーンにデータディスクのスナップショットを作成します。
gcloud compute disks snapshot sql-server-prod-data \ --snapshot-names=sql-server-prod-data-snapshot \ --guest-flush \ --zone="${ZONE}"
--guest-flush
オプションでは、Microsoft Windows のボリューム シャドウ コピー サービスを使用して、一貫性のあるスナップショットを作成します。スナップショットの作成には、数分かかります。
ディスク スナップショットをテスト インスタンスにアタッチする
作成したスナップショットから新しいデータディスクを作成し、sql-server-test
インスタンスにアタッチする必要があります。
Console
次の手順では、新しい永続ディスクを作成し、その内容に