2017-09-28 87 views
0

我正在嘗試將數據庫備份到Azure Blob存儲。數據庫相對較大,介於1到30 Gig之間。如果文件存在,SQL Server備份到URL將失敗

我已成功備份第一天,但​​在隨後的日子裏,我收到一個錯誤,指出該文件已存在,並且需要使用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備份時,差異備份支持。

這實際上是不可能的,或者我做錯了什麼?

回答

1

由於您需要保留第一個完整備份,因此在阻止您時是正確的。 當你恢復你的數據庫,你會

  • 從完整備份
  • 恢復應用差異備份

你的腳本應該產生一個唯一的名稱。我通過追加文件的日期和時間來做到這一點:

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; 
+0

謝謝安德魯。所以我應該先做一個初步的完全備份,我似乎已經成功完成了,然後再進行差分?我們沒有理由回到過去。即當我們進行恢復時,我們總是需要最新的。所以要恢復,我們需要恢復完整,然後每個後續備份?然後,也許每個月一次,做一個完整的,並刪除所有的差異? – Craig

+0

@克雷格:沒錯。我一直使用事務日誌備份而不是自己的差異備份。您的差異備份每次都會變得更大,直到您通過完整備份進行重置爲止。您需要觀察它才能看到執行完整備份的時間。 –

+0

謝謝...我會查找備份日誌然後......但表面上,是一個初始備份的情況下,然後備份日誌之後,使用相同的日誌文件名? – Craig