2012-12-05 44 views
2

每當我嘗試使用BACKUP和RESTORE命令創建數據庫的副本時,副本都會創建,但不包含任何數據。我正在運行以下命令,並返回成功狀態:SQL Server - 使用RESTORE複製數據庫,生成的副本沒有數據

BACKUP DATABASE [SomeDB] 
    TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak' 
BACKUP DATABASE successfully processed 161 pages in 0.021 seconds (62.805 MB/sec). 

RESTORE DATABASE [SomeDB_Copy] 
    FROM DISK=N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak' 
    WITH MOVE N'SomeDB' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\SomeDB_copy.mdf', 
    MOVE N'SomeDB_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\SomeDB_copy.ldf' 
RESTORE DATABASE successfully processed 162 pages in 0.095 seconds (13.958 MB/sec). 

我是否缺少一個步驟?我發現的所有例子都使用這種方法。 Even on StackOverflow。這是在SQL Server 2005上。

更新:我將數據庫備份到一個新文件,並使用它恢復,一切正常。我不知道我的原始文件是否損壞,或其他奇怪的事情正在發生。

+1

我討厭問清楚,但你能否確認源數據庫中有數據? – swasheck

+0

在這一點上,我都是白癡檢查。源數據庫有1行1行,僅用於測試。 – kyork

+1

我剛纔測試了你的代碼。創建一個名爲'SomeDB'的數據庫,有一個表和一行。運行代碼進行備份和恢復。當我打開'SomeDB_Copy'時,它有一個如預期的一行。有沒有可能你可以將'SomeDB.bak'上傳到某個文件共享站點?你使用的是什麼版本的SQL Server?什麼版本的SSMS(或者你如何運行查詢)?如果您使用用戶界面進行備份還原而不是通過代碼執行,它的工作原理是否相同? – mellamokb

回答

1

我意識到這個話題是舊的,但我想擴大usr在他對多文件備份集的評論中所說的話,儘管我會稱之爲多備份設備。事實上,您的備份命令處理了161頁,但恢復處理了162頁讓我覺得您的設備/文件中有多個備份。您可以使用INIT子句備份命令,以保證你只需要在設備的單個備份:

BACKUP DATABASE [SomeDB] 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak' 
with init; 

從微軟的文檔在http://msdn.microsoft.com/en-us/library/ms186865.aspx

的盤片裝置不必存在於在BACKUP語句中指定的 之前。如果物理設備存在,並且在BACKUP語句中未指定INIT選項 ,則備份將附加到 設備。

您應該能夠使用RESTORE命令上的HEADERONLY選項來檢查設備/文件中是否有多個備份。

BACKUP DATABASE [SomeDB] 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak' 
with init; 

RESTORE HEADERONLY 
FROM DISK = = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak'; 

BACKUP DATABASE [SomeDB] 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak'; 

RESTORE HEADERONLY 
FROM DISK = = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak'; 

從第一RESTORE HEADERONLY輸出將顯示一個備份文件中,同時從第二輸出應顯示有在文件中兩個備份。

+0

謝謝,我沒有像上面那樣的問題,但我已經寫了多個備份到相同的文件沒有意識到它,所以你的答案指出我在正確的方向! –

相關問題