无法将bak文件还原到SqlServer,并显示错误“磁盘卷上的可用空间不足......”,它上面有足够的空间

时间:2013-10-29 10:12:20

标签: c# sql-server

情况就是这样。

我在SQL Server Server1上有一个数据库DB1。

我将DB1备份到db1.bak,然后尝试将DB1.bak恢复为使用不同名称DB2的Server1。

我正在使用C#来完成这项工作,但它失败了。如果我不将DB1.bak重新用于具有不同名称且存在orignal数据库的相同sql-server,则将成功恢复。

我也可以使用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

1 个答案:

答案 0 :(得分: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。尝试更改其中一个的文件名。