情况就是这样。
我在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
答案 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
但您尝试在同一文件中恢复的文件CtrlData
和CtrlIx
。尝试更改其中一个的文件名。