2013-10-29 54 views
-3

這是情況。無法將bak文件恢復到SqlServer,但出現錯誤'磁盤捲上沒有足夠的可用空間...',上面有足夠的空間

我有SQL Server Server1上的數據庫DB1。

我將DB1備份到db1.bak,然後嘗試使用不同的名稱DB2將DB1.bak恢復到Server1。

我使用C#來完成這項工作,但失敗了。如果我不將DB1.bak恢復到具有不同名稱並且存在orignal數據庫的同一個sql服務器,則恢復將成功。

我也可以使用Microsoft SQL Server Management Studio成功恢復。 這是從我的C#程序生成的SQL。

SET @RestoreSQL = ' 
RESTORE DATABASE [DB2] FROM DISK = N''e:\Temp\DB1.bak'' WITH FILE = 1, 
MOVE N''CtrlSys'' TO N''E:\Program Files\Microsoft SQL Server\MSSQL11.LATIN1_2012\MSSQL\DATA\DB2Sys.mdf'', 
MOVE N''CtrlData'' TO N''E:\Program Files\Microsoft SQL Server\MSSQL11.LATIN1_2012\MSSQL\DATA\DB2Data.ndf'', 
MOVE N''CtrlIx'' TO N''E:\Program Files\Microsoft SQL Server\MSSQL11.LATIN1_2012\MSSQL\DATA\DB2Ix.ndf'', 
MOVE N''CtrlLog'' TO N''E:\Program Files\Microsoft SQL Server\MSSQL11.LATIN1_2012\MSSQL\DATA\DB2Log.ldf'', 
NOUNLOAD, REPLACE, STATS = 10' 
exec (@RestoreSQL) 

以下是錯誤:

Msg 3257, Level 16, State 1, Line 2 
There is insufficient free space on disk volume 'E:\' to create the database. 

The database requires 86240788480 additional free bytes, while only 83155132416 bytes are available. 

Msg 3119, Level 16, State 4, Line 2 

Problems were identified while planning for the RESTORE statement. Previous messages provide details. 

Msg 3013, Level 16, State 1, Line 2 

RESTORE DATABASE is terminating abnormally 
+0

除了我用C#生成整個SQL然後執行它。有沒有更好的方法來做到這一點?我正在使用SQL Server 2012.謝謝! – user1076879

+2

你是怎麼確定「它有足夠的空間」的。錯誤信息清楚地表明沒有。你在爭論'86240788480'還是'83155132416'? –

+0

請注意,可以壓縮「bak」文件。然後釋放至少3085656064個字節。 –

回答

2

的問題是在你的C#腳本。在恢復4個文件:

CtrlSys => E:\...\MSSQL\DATA\DB2.mdf

CtrlData => E:\...\MSSQL\DATA\DB2.ndf

CtrlIx => E:\...\MSSQL\DATA\DB2.ndf

CtrlLog => E:\...\MSSQL\DATA\DB2.ldf

但文件CtrlDataCtrlIx你想在同一個文件進行恢復。嘗試更改其中一個文件的名稱。

+0

對不起,我附上了錯誤的代碼,它應該是:CtrlSys => E:\ ... \ MSSQL \ DATA \ DB2Sys.mdf CtrlData => E:\ ... \ MSSQL \ DATA \ DB2Data.ndf CtrlIx => E :\ ... \ MSSQL \ DATA \ DB2Ix.ndf CtrlLog => E:\ ... \ MSSQL \ DATA \ DB2Log.ldf – user1076879

相關問題