SQL 如果文件存在,服务器备份到 URL 失败
SQL Server backup to URL fails if file exists
我正在尝试将数据库备份到我的 Azure Blob 存储。数据库相对较大...在 1 到 30 Gig 之间。
我第一天备份成功了,但在接下来的几天里,我收到一个错误,指出文件已经存在,我需要使用 WITH FORMAT。
但我需要进行差异备份,因为在完整备份上加载数据会非常缓慢且昂贵。
我收到错误 "MyBackup.bak exists on the remote endpoint, and WITH FORMAT was not specified."。
我想做的是:
BACKUP DATABASE [MyDatabase]'
TO URL = 'https://myaccount.blob.core.windows.net/dbbackups/Container/', MyDatabase.bak',
WITH CREDENTIAL = 'AzureDBBackupsContainer'
, DIFFERENTIAL
, COMPRESSION;
我看到使用 URL 备份时支持差异备份。
这实际上是不可能的,还是我做错了什么?
阻止你是正确的,因为你需要保留第一个完整备份。
当您恢复数据库时,您将
- 从完整备份恢复
- 应用差异备份
您的脚本应该生成一个唯一的名称。我通过将日期和时间附加到备份文件名来执行此操作:
DECLARE
@now DATETIME,
@datePrefix VARCHAR(MAX),
@timePart VARCHAR(MAX),
@backupFileName VARCHAR(MAX),
@fullUrl VARCHAR(MAX),
@blobServiceEndpoint VARCHAR(MAX)
SET @now = GETDATE();
SET @datePrefix = CONVERT(VARCHAR(8), GETDATE(), 112);
SET @timePart = RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(hh, @now)), 2)
+ RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(mi, @now)), 2)
+ RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(ss, @now)), 2);
SET @backupFileName = 'MyDatabase_' + @datePrefix + @timePart + '.bak';
SET @blobServiceEndpoint = 'https://myaccount.blob.core.windows.net/';
SET @fullUrl = @blobServiceEndpoint + 'Container/' + @backupFileName;
BACKUP DATABASE [MyDatabase]'
TO URL = @fullUrl
WITH CREDENTIAL = 'AzureDBBackupsContainer'
, DIFFERENTIAL
, COMPRESSION;
我正在尝试将数据库备份到我的 Azure Blob 存储。数据库相对较大...在 1 到 30 Gig 之间。
我第一天备份成功了,但在接下来的几天里,我收到一个错误,指出文件已经存在,我需要使用 WITH FORMAT。
但我需要进行差异备份,因为在完整备份上加载数据会非常缓慢且昂贵。
我收到错误 "MyBackup.bak exists on the remote endpoint, and WITH FORMAT was not specified."。
我想做的是:
BACKUP DATABASE [MyDatabase]'
TO URL = 'https://myaccount.blob.core.windows.net/dbbackups/Container/', MyDatabase.bak',
WITH CREDENTIAL = 'AzureDBBackupsContainer'
, DIFFERENTIAL
, COMPRESSION;
我看到使用 URL 备份时支持差异备份。
这实际上是不可能的,还是我做错了什么?
阻止你是正确的,因为你需要保留第一个完整备份。 当您恢复数据库时,您将
- 从完整备份恢复
- 应用差异备份
您的脚本应该生成一个唯一的名称。我通过将日期和时间附加到备份文件名来执行此操作:
DECLARE
@now DATETIME,
@datePrefix VARCHAR(MAX),
@timePart VARCHAR(MAX),
@backupFileName VARCHAR(MAX),
@fullUrl VARCHAR(MAX),
@blobServiceEndpoint VARCHAR(MAX)
SET @now = GETDATE();
SET @datePrefix = CONVERT(VARCHAR(8), GETDATE(), 112);
SET @timePart = RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(hh, @now)), 2)
+ RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(mi, @now)), 2)
+ RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(ss, @now)), 2);
SET @backupFileName = 'MyDatabase_' + @datePrefix + @timePart + '.bak';
SET @blobServiceEndpoint = 'https://myaccount.blob.core.windows.net/';
SET @fullUrl = @blobServiceEndpoint + 'Container/' + @backupFileName;
BACKUP DATABASE [MyDatabase]'
TO URL = @fullUrl
WITH CREDENTIAL = 'AzureDBBackupsContainer'
, DIFFERENTIAL
, COMPRESSION;