sql-server - 如果文件存在,SQL Server 备份到 URL 将失败

标签 sql-server azure database-backups

我正在尝试将数据库备份到我的 Azure Blob 存储。数据库相对较大...在 1 到 30 Gig 之间。

第一天我已成功备份,但在随后的几天里,我收到一条错误消息,指出该文件已存在并且我需要使用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 备份时支持差异备份。

这实际上是不可能的,还是我做错了什么?

最佳答案

阻止你是正确的,因为你需要保留第一个完整备份。 当您恢复数据库时,您将

  • 从完整备份恢复
  • 应用差异备份

您的脚本应该生成一个唯一的名称。我通过将日期和时间附加到备份文件名来做到这一点:

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;

关于sql-server - 如果文件存在,SQL Server 备份到 URL 将失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46461195/

相关文章:

c# - 当我在 sql 查询中使用 go 语句时,Oledb 连接出现错误

sql-server - 我想从 SQL Server 表中选择特定值

sql-server - 将 Phoenix 应用程序连接到 MS SQL Azure 数据库

azure - 我可以在 Azure 静态 Web 应用程序中使用通配符进行重定向吗?

AWS 的 MongoDB 备份策略

amazon-web-services - 通过 CloudFormation 的 Amazon DynamoDB - 时间点恢复

sql-server - 使用 Sequelize 进行 NOLOCK 查询

sql - 将具有相同名称的列转换为正确的行

Azure AD 应用程序注册用户角色未反射(reflect)

.net - Azure 共享访问签名是否意味着任何人都可以访问我的 blob?