データベースを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バックアップを使用すると、差分バックアップがサポートされることを確認しました。
これは実際には不可能ですか、それとも私は何か間違っていますか?どういうわけか毎日ファイル名を変更する必要がありますか?
正解です。これは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 には、バックアップごとに新しいファイル名を生成する例があります。