web-dev-qa-db-ja.com

SQL Server 2012からAzure Blobへの差分バックアップ

データベースをAzure Blobストレージにバックアップしようとしています。データベースは比較的大きく、1〜30ギガです。

最初の日は正常にバックアップしましたが、翌日には、ファイルが既に存在し、WITH FORMATを使用する必要があることを示すエラーが表示されます。

ただし、フルバックアップでのデータのロードは非常に遅くて高価になるため、差分バックアップを行う必要があります。

「MyBackup.bakがリモートエンドポイントに存在し、WITH FORMATが指定されていませんでした。」というエラーが表示されます。

私がやろうとしていることは:

BACKUP DATABASE [MyDatabase]' 
TO URL = 'https://myaccount.blob.core.windows.net/dbbackups/Container/', MyDatabase.bak', 
WITH CREDENTIAL = 'AzureDBBackupsContainer'
, DIFFERENTIAL
, COMPRESSION;

URLバックアップを使用すると、差分バックアップがサポートされることを確認しました。

これは実際には不可能ですか、それとも私は何か間違っていますか?どういうわけか毎日ファイル名を変更する必要がありますか?

2
Craig

正解です。これはAzureクラウドでは不可能です。これは、私が強く推奨しない構内バックアップで行うことができます。復元がより複雑になります。ただし、Azureでは、ファイル名がコンテナーに既に存在する場合、同じ名前を使用する唯一の方法は、新しいメディアセットを作成するWITH FORMATを使用することです。

これをテストしたところ、次のエラーメッセージが表示されました。

メッセージ3296、レベル16、状態1、行1ファイル https://storageacocunt/sqlbackfiles/testFull.bak がリモートエンドポイントに存在し、WITH FORMATが指定されていません。バックアップを続行できません。メッセージ3013、レベル16、状態1、行1のBACKUP DATABASEが異常終了しています。

オンラインの書籍から:

バックアップ(Transact-SQL)| Microsoft Docs

フォーマット

新しいメディアセットを作成することを指定します。 FORMATにより、バックアップ操作で使用されるすべてのメディアボリュームに新しいメディアヘッダーが書き込まれます。既存のメディアヘッダーとバックアップセットが上書きされるため、ボリュームの既存の内容は無効になります。

これはRESTORE HEADERONLYコマンドで確認できます。完全バックアップを取得してから差分WITH FORMATを実行すると、バックアップタイプが1から5に変更されます。

ファイルごとに新しいファイルを作成することをお勧めします。

この link には、バックアップごとに新しいファイル名を生成する例があります。

3
SqlWorldWide