このトピックでは、Azure Blob Storage サービスをバックアップ先として使用するために必要な概念、要件、コンポーネントについて説明します。 バックアップと復元の機能は、DISK または TAPE を使用する場合と同じか似ていますが、いくつかの違いがあります。 相違点と注目すべき例外について説明します。このトピックには、いくつかのコード例が含まれています。
要件、コンポーネント、および概念
このセクションでは:
安全
Azure Blob Storage サービスへのバックアップまたは Azure Blob Storage サービスからの復元時のセキュリティに関する考慮事項と要件を次に示します。
Azure Blob Storage サービスのコンテナーを作成するときは、 アクセスをプライベートに設定することをお勧めします。 プライベートへのアクセスを設定すると、Azure アカウントに対する認証に必要な情報を提供できるユーザーまたはアカウントへのアクセスが制限されます。
重要
SQL Server では、Azure アカウント名とアクセス キー認証を SQL Server 資格情報に格納する必要があります。 この情報は、バックアップ操作または復元操作を実行するときに Azure アカウントに対する認証に使用されます。
BACKUP または RESTORE コマンドの発行に使用されるユーザー アカウントは、資格情報のアクセス許可を変更するdb_backupオペレーター データベース ロールに含まれている必要があります。
主要なコンポーネントと概念の概要
次の 2 つのセクションでは、Azure Blob Storage サービスと、Azure Blob Storage サービスへのバックアップ時または Azure Blob Storage サービスからの復元時に使用される SQL Server コンポーネントについて説明します。 Azure Blob Storage サービスに対してバックアップを実行したり、Azure Blob Storage サービスから復元したりするためのコンポーネントとその間の相互作用を理解することが重要です。
このプロセスの最初の手順は、Azure アカウントの作成です。 SQL Server では、 Azure ストレージ アカウント名 とその アクセス キー 値を使用して、ストレージ サービスに対する BLOB の認証と書き込みと読み取りを行います。 この認証情報は、SQL Server 資格情報に格納され、バックアップまたは復元操作中に使用されます。 ストレージ アカウントの作成と簡単な復元の完全なチュートリアルについては、「 SQL Server のバックアップと復元に Azure Storage Service を使用するチュートリアル」を参照してください。
Azure Blob Storage サービス
ストレージ アカウント: ストレージ アカウントは、すべてのストレージ サービスの開始点です。 Azure Blob Storage サービスにアクセスするには、まず Azure ストレージ アカウントを作成します。 Azure Blob Storage サービスとそのコンポーネントに対する認証には、 ストレージ アカウント名 とその アクセス キー のプロパティが必要です。
コンテナ: コンテナーは、一連の BLOB のグループ化を提供し、無制限の数の BLOB を格納できます。 AZURE Blob Service に SQL Server バックアップを書き込むには、少なくともルート コンテナーが作成されている必要があります。
ブロッブ: 任意の種類とサイズのファイル。 Azure Blob Storage サービスに格納できる BLOB には、ブロック BLOB とページ BLOB の 2 種類があります。 SQL Server のバックアップでは、Blob の種類としてページ Blob が使用されます。 BLOB は、次の URL フォーマットを使用してアドレス指定できます: https://<ストレージアカウント>.blob.core.windows.net/<コンテナ>/<blob>
Azure Blob Storage サービスの詳細については、「Azure Blob Storage サービスの使用方法」を参照してください。
ページ BLOB の詳細については、「ブロック BLOB およびページ BLOB について」をご覧ください。
SQL Server コンポーネント
URL: URL は、一意のバックアップ ファイルへの URI (Uniform Resource Identifier) を指定します。 URL は、SQL Server バックアップ ファイルの場所と名前を指定するために使用されます。 この実装では、有効な URL は、Azure ストレージ アカウント内のページ BLOB を指す URL のみです。 URL は、コンテナーだけでなく、実際の BLOB を指す必要があります。 BLOB が存在しない場合は作成されます。 既存の BLOB が指定されている場合、"WITH FORMAT" オプションが指定されていない限り、BACKUP は失敗します。
警告
バックアップ ファイルをコピーして Azure Blob Storage サービスにアップロードする場合は、ストレージ オプションとしてページ BLOB を使用します。 ブロック BLOB からの復元はサポートされていません。 ブロック BLOB から RESTORE ステートメントを実行すると、エラーが発生して失敗します。
HTTP[s]://ACCOUNTNAME.Blob.core.windows.net/<CONTAINER>/<FILENAME.bak> のサンプル URL 値を次に示します。 HTTPS は必須ではありませんが、推奨されます。
資格 情報: SQL Server 資格情報は、SQL Server の外部のリソースに接続するために必要な認証情報を格納するために使用されるオブジェクトです。 ここでは、SQL Server のバックアップと復元のプロセスでは、資格情報を使用して Azure Blob Storage サービスに対する認証を行います。 資格情報には、ストレージ アカウントの名前とストレージ アカウントの アクセス キー の値が格納されます。 資格情報が作成されたら、BACKUP/RESTORE ステートメントを発行するときに WITH CREDENTIAL オプションで指定する必要があります。 ストレージ アカウント アクセス キーを表示、コピー、または再生成する方法の詳細については、「 ストレージ アカウント アクセス キー」を参照してください。
SQL Server 資格情報を作成する方法の詳細な手順については、このトピックで後述する 「資格情報の作成 」の例を参照してください。
資格情報に関する一般的な情報については、「資格情報」を参照してください。
資格情報が使用されるその他の例については、「 SQL Server エージェント プロキシの作成」を参照してください。
制限事項
Premium Storage へのバックアップはサポートされていません。
サポートされる最大バックアップ サイズは 1 TB です。
バックアップステートメントまたは復元ステートメントは、TSQL、SMO、または PowerShell コマンドレットを使用して発行できます。 SQL Server Management Studio のバックアップまたは復元ウィザードを使用した Azure Blob Storage サービスへのバックアップまたは復元は、現在有効になっていません。
論理デバイス名の作成はサポートされていません。 そのため、sp_dumpdeviceまたは SQL Server Management Studio を使用したバックアップ デバイスとしての URL の追加はサポートされていません。
既存のバックアップ BLOB への追加はサポートされていません。 既存の BLOB へのバックアップは、WITH FORMAT オプションを使用してのみ上書きできます。
1 回のバックアップ操作で複数の BLOB へのバックアップはサポートされていません。 たとえば、次の例ではエラーが返されます。
BACKUP DATABASE AdventureWorks2012 TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_1.bak' URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_2.bak' WITH CREDENTIAL = 'mycredential' ,STATS = 5; GO
BACKUP
を使用したブロック サイズの指定はサポートされていません。MAXTRANSFERSIZE
の指定はサポートされていません。backupset オプションの指定 -
RETAINDAYS
とEXPIREDATE
はサポートされていません。SQL Server では、バックアップ デバイス名に最大 259 文字の制限があります。 BACKUP TO URL では、URL の指定に使用する必須要素に 'https://.blob.core.windows.net//.bak ' の 36 文字が使用されるため、アカウント、コンテナー、および BLOB の名前は残りの 223 文字で構成します。
バックアップ/復元ステートメントのサポート
Backup/Restore ステートメント | サポートされています | 例外 | コメント |
バックアップ | ✓ | BLOCKSIZE および MAXTRANSFERSIZE はサポートされていません。 | WITH CREDENTIAL が指定されている必要があります |
復元する | ✓ | WITH CREDENTIAL が指定されている必要があります | |
RESTORE FILELISTONLY | ✓ | WITH CREDENTIAL が指定されている必要があります | |
RESTORE HEADERONLY | ✓ | 資格情報 (CREDENTIAL) が指定されていることが必要です | |
LABELONLY を復元する | ✓ | WITH CREDENTIAL が指定されている必要があります | |
RESTORE VERIFYONLY | ✓ | WITH CREDENTIAL が指定されている必要があります | |
RESTORE リワインドオンリー | ✓ |
バックアップ ステートメントの構文と一般的な情報については、 BACKUP (Transact-SQL) を参照してください。
restore ステートメントの構文と一般的な情報については、 RESTORE (Transact-SQL) を参照してください。
バックアップ引数のサポート
引数 | サポートされています | 例外 | コメント |
データベース | ✓ | ||
ログ | ✓ | ||
(URLへ) | ✓ | DISK および TAPE とは異なり、URL は論理名の指定または作成をサポートしていません。 | この引数は、バックアップ ファイルの URL パスを指定するために使用されます。 |
ミラー先へ | ✓ | ||
オプション付き: | |||
資格 情報 | ✓ | WITH CREDENTIAL は、BACKUP TO URL オプションを使用して Azure Blob Storage サービスにバックアップする場合にのみサポートされます。 | |
微分 | ✓ | ||
コピーのみ | ✓ | ||
COMPRESSION|NO_COMPRESSION | ✓ | ||
Description | ✓ | ||
名前 | ✓ | ||
有効期限 | 保管日数 | ✓ | ||
NOINIT |INIT | ✓ | このオプションは、使用されている場合は無視されます。 BLOB に追加することはできません。 バックアップを上書きするには、FORMAT 引数を使用します。 |
|
ノースキップ | スキップ | ✓ | ||
NOFORMAT | フォーマット | ✓ | このオプションは、使用されている場合は無視されます。 WITH FORMAT が指定されていない限り、既存の BLOB に対して作成されたバックアップは失敗します。 WITH FORMAT が指定されると、既存の BLOB が上書きされます。 |
|
メディア説明 | ✓ | ||
MEDIANAME | ✓ | ||
ブロックサイズ | ✓ | ||
BUFFERCOUNT | ✓ | ||
MAXTRANSFERSIZE | ✓ | ||
ノーチェックサム | チェックサム | ✓ | ||
エラーで停止 | エラー後に続行 | ✓ | ||
統計 | ✓ | ||
巻き戻し |NOREWIND | ✓ | ||
アンロード | ノーアンロード | ✓ | ||
NORECOVERY | スタンバイ | ✓ | ||
NO_TRUNCATE | ✓ |
バックアップ引数の詳細については、 BACKUP (Transact-SQL) を参照してください。
復元引数のサポート
引数 | サポートされています | 例外 | コメント |
データベース | ✓ | ||
ログ | ✓ | ||
から (URL) | ✓ | FROM URL 引数は、バックアップ ファイルの URL パスを指定するために使用されます。 | |
WITH オプション: | |||
資格 情報 | ✓ | WITH CREDENTIAL は、RESTORE FROM URL オプションを使用して Azure Blob Storage サービスから復元する場合にのみサポートされます。 | |
パーシャル | ✓ | ||
回復 | 回復なし | スタンバイ | ✓ | ||
LOADHISTORY | ✓ | ||
動く | ✓ | ||
取り替える | ✓ | ||
再起動 | ✓ | ||
限定ユーザー | ✓ | ||
ファイル | ✓ | ||
パスワード | ✓ | ||
MEDIANAME | ✓ | ||
MEDIAPASSWORD | ✓ | ||
BLOCKSIZE | ✓ | ||
BUFFERCOUNT | ✓ | ||
MAXTRANSFERSIZE | ✓ | ||
チェックサム|NO_CHECKSUM | ✓ | ||
エラーで停止 | エラー後に続行 | ✓ | ||
FILESTREAM | ✓ | ||
統計 | ✓ | ||
巻き戻し | ノーリワインド | ✓ | ||
アンロード | ノーアンロード | ✓ | ||
KEEP_REPLICATION | ✓ | ||
KEEP_CDC | ✓ | ||
ENABLE_BROKER(ブローカーを有効にする) | ERROR_BROKER_CONVERSATIONS(ブローカー会話エラー) | NEW_BROKER(新しいブローカー) | ✓ | ||
停止地点 | 停止マーク地点 | マーク前停止 | ✓ |
Restore 引数の詳細については、「 RESTORE 引数 (Transact-SQL)」を参照してください。
SQL Server Management Studio でのバックアップ タスクの使用
SQL Server Management Studio のバックアップ タスクが拡張され、URL が移行先オプションの 1 つとして追加され、SQL 資格情報などの Azure Storage へのバックアップに必要なその他のサポート オブジェクトが追加されました。
次の手順では、Azure Storage へのバックアップを可能にするためにデータベースのバックアップ タスクに加えられた変更について説明します。
SQL Server Management Studio を起動し、SQL Server インスタンスに接続します。 バックアップするデータベースを選択し、[ タスク] を右クリックし、[バックアップ] を選択します。[データベースのバックアップ] ダイアログ ボックスが開きます。
[全般] ページでは、 URL オプションを使用して Azure Storage へのバックアップを作成します。 このオプションを選択すると、このページで他のオプションが有効になります。
ファイル名: バックアップ ファイルの名前。
SQL 資格情報: 既存の SQL Server 資格情報を指定することも、[SQL 資格情報] ボックスの横にある [作成] をクリックして新しい資格情報を 作成 することもできます。
重要
[ 作成 ] をクリックしたときに開くダイアログには、サブスクリプションの管理証明書または発行プロファイルが必要です。 SQL Server では現在、発行プロファイル バージョン 2.0 がサポートされています。 サポートされているバージョンの発行プロファイルをダウンロードするには、「 発行プロファイル 2.0 のダウンロード」を参照してください。
管理証明書または発行プロファイルにアクセスできない場合は、Transact-SQL または SQL Server Management Studio を使用して、ストレージ アカウント名とアクセス キー情報を指定して SQL 資格情報を作成できます。 Transact-SQL を使用して 資格情報を作成 するには、「資格情報の作成」セクションのサンプル コードを参照してください。 または、SQL Server Management Studio を使用して、データベース エンジン インスタンスから [ セキュリティ] を右クリックし、[ 新規] を選択し、[資格情報] を選択 します。 ID のストレージ アカウント名とアクセス キーを [パスワード] フィールドに指定します。
Azure ストレージ コンテナー: バックアップ ファイルを格納する Azure ストレージ コンテナーの名前。
URL プレフィックス: これは、前の手順で説明したフィールドで指定された情報を使用して自動的に構築されます。 この値を手動で編集する場合は、前に指定した他の情報と一致していることを確認します。 たとえば、ストレージ URL を変更する場合は、SQL 資格情報が同じストレージ アカウントに対して認証されるように設定されていることを確認します。
宛先として URL を選択すると、[ メディア オプション] ページの特定のオプションが無効になります。 次のトピックでは、[データベースのバックアップ] ダイアログの詳細について説明します。
データベースのバックアップ ([メディア オプション] ページ)
データベースのバックアップ ([バックアップ オプション] ページ)
資格情報の作成 - Azure Storage に対する認証
メンテナンス プラン ウィザードを使用した SQL Server の URL へのバックアップ
前に説明したバックアップ タスクと同様に、SQL Server Management Studio のメンテナンス プラン ウィザードが拡張され、移行先オプションの 1 つとして URL が追加され、SQL 資格情報などの Azure Storage へのバックアップに必要なその他のサポート オブジェクトが追加されました。 詳細については、「メンテナンス プランの使用ウィザード」の「バックアップ タスクの定義」セクションを参照してください。
SQL Server Management Studio を使用した Azure Storage からの復元
データベースを復元する場合、復元元のデバイスとして URL が含まれます。 次の手順では、Azure Storage からの復元を許可する復元タスクの変更について説明します。
SQL Server Management Studio の復元タスクの [全般] ページで [デバイス] を選択すると、[バックアップ メディアの種類として URL を含むバックアップ デバイスの選択] ダイアログ ボックスが表示されます。
[URL] を選択して [追加] をクリックすると、[Azure Storage への接続] ダイアログが開きます。 Azure Storage に対して認証する SQL 資格情報情報を指定します。
SQL Server は、指定した SQL 資格情報を使用して Azure Storage に接続し、[ Azure でのバックアップ ファイルの検索 ] ダイアログを開きます。 このページには、ストレージに存在するバックアップ ファイルが表示されます。 復元に使用するファイルを選択し、[ OK] をクリックします。 これにより、[ バックアップ デバイスの選択 ] ダイアログに戻り、このダイアログで [OK] をクリックすると、復元を完了できるメインの 復元 ダイアログに戻ります。 詳細については、次のトピックを参照してください。
コード例
このセクションには、次の例が含まれています。
認証情報を作成する
次の例では、Azure Storage 認証情報を格納する資格情報を作成します。
IF NOT EXISTS
(SELECT * FROM sys.credentials
WHERE credential_identity = 'mycredential')
CREATE CREDENTIAL mycredential WITH IDENTITY = 'mystorageaccount'
,SECRET = '<storage access key>' ;
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string secret = "<storage access key>";
// Create a Credential
string credentialName = "mycredential";
Credential credential = new Credential(server, credentialName);
credential.Create(identity, secret);
# create variables
$storageAccount = "mystorageaccount"
$storageKey = "<storage access key>"
$secureString = ConvertTo-SecureString $storageKey -asplaintext -force
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# Create a credential
New-SqlCredential -Name $credentialName -Path $srvpath -Identity $storageAccount -Secret $secureString
完全なデータベースのバックアップ
次の例では、AdventureWorks2012 データベースを Azure Blob Storage サービスにバックアップします。
BACKUP DATABASE AdventureWorks2012
TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'
WITH CREDENTIAL = 'mycredential'
,COMPRESSION
,STATS = 5;
GO
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup to Url
Backup backup = new Backup();
backup.CredentialName = credentialName;
backup.Database = dbName;
backup.CompressionOption = BackupCompressionOptions.On;
backup.Devices.AddDevice(url, DeviceType.Url);
backup.SqlBackup(server);
# create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"
# for default instance, the $srvpath varilable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# navigate to SQL Server Instance
CD $srvPath
$backupFile = $backupUrlContainer + "AdventureWorks2012" + ".bak"
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -CompressionOption On
データベースとログのバックアップ
次の例では、既定で単純復旧モデルを使用する AdventureWorks2012 サンプル データベースをバックアップします。 ログ バックアップをサポートするために、AdventureWorks2012 データベースは完全復旧モデルを使用するように変更されます。 次に、Azure BLOB へのデータベースの完全バックアップを作成し、更新アクティビティの期間が経過した後、ログをバックアップします。 次の使用例は、datetime スタンプを使用してバックアップ ファイル名を作成します。
-- To permit log backups, before the full database backup, modify the database
-- to use the full recovery model.
USE master;
GO
ALTER DATABASE AdventureWorks2012
SET RECOVERY FULL;
GO
-- Back up the full AdventureWorks2012 database.
-- First create a file name for the backup file with DateTime stamp
DECLARE @Full_Filename AS VARCHAR (300);
SET @Full_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Full_'+
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.bak';
--Back up Adventureworks2012 database
BACKUP DATABASE AdventureWorks2012
TO URL = @Full_Filename
WITH CREDENTIAL = 'mycredential';
,COMPRESSION
GO
-- Back up the AdventureWorks2012 log.
DECLARE @Log_Filename AS VARCHAR (300);
SET @Log_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Log_'+
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';
BACKUP LOG AdventureWorks2012
TO URL = @Log_Filename
WITH CREDENTIAL = 'mycredential'
,COMPRESSION;
GO
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url for data backup
string urlDataBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}_Data-{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup Database to Url
Backup backupData = new Backup();
backupData.CredentialName = credentialName;
backupData.Database = dbName;
backup.CompressionOption = BackupCompressionOptions.On;
backupData.Devices.AddDevice(urlDataBackup, DeviceType.Url);
backupData.SqlBackup(server);
// Generate Unique Url for data backup
string urlLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}_Log-{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup Database Log to Url
Backup backupLog = new Backup();
backupLog.CredentialName = credentialName;
backupLog.Database = dbName;
backup.CompressionOption = BackupCompressionOptions.On;
backupLog.Devices.AddDevice(urlLogBackup, DeviceType.Url);
backupLog.Action = BackupActionType.Log;
backupLog.SqlBackup(server);
#create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# navigate to theSQL Server Instance
CD $srvPath
#Create a unique file name for the full database backup
$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".bak"
#Backup Database to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -CompressionOption On -BackupAction Database
#Create a unique file name for log backup
$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".trn"
#Backup Log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -CompressionOption On -BackupAction Log
プライマリ ファイル グループの完全ファイル バックアップの作成
次の例では、プライマリ ファイル グループの完全ファイル バックアップを作成します。
--Back up the files in Primary:
BACKUP DATABASE AdventureWorks2012
FILEGROUP = 'Primary'
TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012files.bck'
WITH CREDENTIAL = 'mycredential'
,COMPRESSION;
GO
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bck",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup to Url
Backup backup = new Backup();
backup.CredentialName = credentialName;
backup.Database = dbName;
backup.Action = BackupActionType.Files;
backup.DatabaseFileGroups.Add("PRIMARY");
backup.CompressionOption = BackupCompressionOptions.On;
backup.Devices.AddDevice(url, DeviceType.Url);
backup.SqlBackup(server);
#create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# navigate to the SQL Server Instance
CD $srvPath
#Create a unique file name for the file backup
$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".bck"
#Backup Primary File Group to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -CompressionOption On -BackupAction Files -DatabaseFileGroup Primary
プライマリ ファイル グループの差分ファイル バックアップの作成
次の例では、プライマリ ファイル グループの差分ファイル バックアップを作成します。
--Back up the files in Primary:
BACKUP DATABASE AdventureWorks2012
FILEGROUP = 'Primary'
TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012filesdiff.bck'
WITH
CREDENTIAL = 'mycredential'
,COMPRESSION
,DIFFERENTIAL;
GO
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup to Url
Backup backup = new Backup();
backup.CredentialName = credentialName;
backup.Database = dbName;
backup.Action = BackupActionType.Files;
backup.DatabaseFileGroups.Add("PRIMARY");
backup.Incremental = true;
backup.CompressionOption = BackupCompressionOptions.On;
backup.Devices.AddDevice(url, DeviceType.Url);
backup.SqlBackup(server);
#create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMUTERNAME\INSTANCENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# navigate to SQL Server Instance
CD $srvPath
#create a unique file name for the full backup
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".bak"
#Create a differential backup of the primary filegroup
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -CompressionOption On -BackupAction Files -DatabaseFileGroup Primary -Incremental
データベースを復元してファイルを移動する
データベースの完全バックアップを復元し、復元されたデータベースを C:\Program Files\Microsoft SQL Server\MSSQL12 に移動するにはMSSQLSERVER\MSSQL\Data ディレクトリでは、次の手順を使用します。
-- Backup the tail of the log first
DECLARE @Log_Filename AS VARCHAR (300);
SET @Log_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Log_'+
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';
BACKUP LOG AdventureWorks2012
TO URL = @Log_Filename
WITH CREDENTIAL = 'mycredential'
,NORECOVERY;
GO
RESTORE DATABASE AdventureWorks2012 FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'
WITH CREDENTIAL = 'mycredential'
,MOVE 'AdventureWorks2012_data' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf'
,MOVE 'AdventureWorks2012_log' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf'
,STATS = 5
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url
string urlBackupData = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-Data{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup to Url
Backup backup = new Backup();
backup.CredentialName = credentialName;
backup.Database = dbName;
backup.Devices.AddDevice(urlBackupData, DeviceType.Url);
backup.SqlBackup(server);
// Generate Unique Url for tail log backup
string urlTailLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-TailLog{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup Tail Log to Url
Backup backupTailLog = new Backup();
backupTailLog.CredentialName = credentialName;
backupTailLog.Database = dbName;
backupTailLog.Action = BackupActionType.Log;
backupTailLog.NoRecovery = true;
backupTailLog.Devices.AddDevice(urlTailLogBackup, DeviceType.Url);
backupTailLog.SqlBackup(server);
// Restore a database and move files
string newDataFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".mdf";
string newLogFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".ldf";
Restore restore = new Restore();
restore.CredentialName = credentialName;
restore.Database = dbName;
restore.ReplaceDatabase = true;
restore.Devices.AddDevice(urlBackupData, DeviceType.Url);
restore.RelocateFiles.Add(new RelocateFile(dbName, newDataFilePath));
restore.RelocateFiles.Add(new RelocateFile(dbName+ "_Log", newLogFilePath));
restore.SqlRestore(server);
#create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTNACENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# navigate to SQL Server Instance
CD $srvPath
#create a unique file name for the full backup
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".bak"
# Full database backup to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupdbFile -SqlCredential $credentialName -CompressionOption On
#Create a unique file name for the tail log backup
$backuplogFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".trn"
#Backup tail log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -BackupAction Log -NoRecovery
# Restore Database and move files
$newDataFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile ("AdventureWorks_Data","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf")
$newLogFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("AdventureWorks_Log","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf")
Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backupdbFile -RelocateFile @($newDataFilePath,$newLogFilePath)
STOPAT を使用した特定の時点への復元
次の例では、データベースを特定の時点の状態に復元し、復元操作を示します。
RESTORE DATABASE AdventureWorks FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'
WITH
CREDENTIAL = 'mycredential'
,MOVE 'AdventureWorks2012_data' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf'
,Move 'AdventureWorks2012_log' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf'
,NORECOVERY
--,REPLACE
,STATS = 5;
GO
RESTORE LOG AdventureWorks FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.trn'
WITH CREDENTIAL = 'mycredential'
,RECOVERY
,STOPAT = 'Oct 23, 2012 5:00 PM'
GO
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url
string urlBackupData = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-Data{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup to Url
Backup backup = new Backup();
backup.CredentialName = credentialName;
backup.Database = dbName;
backup.Devices.AddDevice(urlBackupData, DeviceType.Url);
backup.SqlBackup(server);
// Generate Unique Url for Tail Log backup
string urlTailLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-TailLog{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup Tail Log to Url
Backup backupTailLog = new Backup();
backupTailLog.CredentialName = credentialName;
backupTailLog.Database = dbName;
backupTailLog.Action = BackupActionType.Log;
backupTailLog.NoRecovery = true;
backupTailLog.Devices.AddDevice(urlTailLogBackup, DeviceType.Url);
backupTailLog.SqlBackup(server);
// Restore a database and move files
string newDataFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".mdf";
string newLogFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".ldf";
Restore restore = new Restore();
restore.CredentialName = credentialName;
restore.Database = dbName;
restore.ReplaceDatabase = true;
restore.NoRecovery = true;
restore.Devices.AddDevice(urlBackupData, DeviceType.Url);
restore.RelocateFiles.Add(new RelocateFile(dbName, newDataFilePath));
restore.RelocateFiles.Add(new RelocateFile(dbName + "_Log", newLogFilePath));
restore.SqlRestore(server);
// Restore transaction Log with stop at
Restore restoreLog = new Restore();
restoreLog.CredentialName = credentialName;
restoreLog.Database = dbName;
restoreLog.Action = RestoreActionType.Log;
restoreLog.Devices.AddDevice(urlBackupData, DeviceType.Url);
restoreLog.ToPointInTime = DateTime.Now.ToString();
restoreLog.SqlRestore(server);
#create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# Navigate to SQL Server Instance Directory
CD $srvPath
#create a unique file name for the full backup
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".bak"
# Full database backup to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupdbFile -SqlCredential $credentialName -CompressionOption On
#Create a unique file name for the tail log backup
$backuplogFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".trn"
#Backup tail log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -BackupAction Log -NoRecovery
# Restore Database and move files
$newDataFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile ("AdventureWorks_Data","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf")
$newLogFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("AdventureWorks_Log","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf")
Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backupdbFile -RelocateFile @($newDataFilePath,$newLogFilePath) -NoRecovery
# Restore Transaction log with Stop At:
Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backuplogFile -ToPointInTime (Get-Date).ToString()
こちらもご覧ください
SQL Server Backup to URL のベスト プラクティスとトラブルシューティング
システム データベースのバックアップと復元 (SQL Server)