2012-09-11 82 views
35

我嘗試使用下面的查詢來恢復數據庫:日誌數據庫「數據庫名」的尾巴尚未備份

ALTER DATABASE [DatabaseName] SET Single_User WITH Rollback Immediate GO 
RESTORE DATABASE DatabaseName FROM DISK = 'C:\DBName-Full Database Backup' 
ALTER DATABASE [DatabaseName] SET Multi_User GO 

,而不是恢復數據庫,但是,我得到這個錯誤:

Msg 3159, Level 16, State 1, Line 2

The tail of the log for the database "DatabaseName" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log. Msg 3013, Level 16, State 1, Line 2 RESTORE DATABASE is terminating abnormally.

+0

在我的情況下,當我在同一個SQL Server上已經有一個名稱相同的數據庫時,就發生了這種情況。我剛剛刪除了具有相同名稱的數據庫並運行了恢復命令。注意:我刪除了具有相同名稱的數據庫,因爲它是我不再需要的數據庫的舊副本。但是,如果您仍然需要舊副本,則可能需要對其進行備份或重命名舊數據庫或新數據庫。但是,如果您沒有具有相同名稱的數據庫,請執行錯誤消息要求執行的操作。 – nam

回答

76

您收到的錯誤消息告訴您如果您不關心現有數據庫或日誌,您到底需要做什麼。

RESTORE DATABASE DAtabaseName FROM DISK = 'C:\DBName-Full Database Backup' 
WITH REPLACE 

在SQL Server Management Studio中(任務>恢復),您可以通過左側打開頁面「選項」,勾選「覆蓋現有數據庫」添加WITH REPLACE選項。

+0

也有運輸問題。必須運行USE master; ALTER DATABASE RAVEN SET RECOVERY SIMPLE;記住完成後請將其恢復爲FULL。 –

1

Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose.

Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.

真的,這就是答案。在那裏,在消息中。您想做什麼?備份尾巴所以沒有丟失?替換未備份的日誌?你的來電。

+0

因爲我很少用SQL Server備份數據庫,通過去任務,備份和執行備份,現在想恢復它,但它不讓我,所以我不完全知道上述錯誤的原因,和大多數論壇說,它的工作原理沒有得到任何錯誤 –

+2

錯誤是警告你,如果你繼續使用RESTRORE,你將失去日誌的當前尾部。換句話說,一些操作還沒有備份。它提供了兩種選擇:或者備份當前的日誌尾部,以便進行修改,並且可以將其恢復到其他地方或以後的地方*或者*使用RESTORE的WITH REPLACE子句指示SQL Server:您不關心將要執行的操作在日誌的當前尾部丟失,並簡單地繼續,並用正在恢復的備份文件替換當前內容。 –

2

或者,您可以將數據庫恢復模型更改爲「簡單」而不是「完整」。

右鍵單擊數據庫,選擇'屬性','選項',將「恢復模式」更改爲「簡單」。

然後你寫的應該沒有產生錯誤的工作。

21

對於那些誰使用Management Studio這應該工作:

enter image description here

+0

如果您通常從SSMS生成腳本,它基本上只爲[With]參數列表添加[replace]關鍵字 –

2

或者,您可以將數據庫恢復模式更改爲Simple,而不是Full

  1. 右擊數據庫
  2. 選擇properties - >option
  3. 變化recovery modelsimple

那你所寫的內容,而不會產生錯誤應該工作。

它對我很好。