-3

这是情况。

我在 SQL 服务器 Server1 上有一个数据库 DB1。

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

我正在使用 C# 来完成这项工作,但它失败了。如果我不将 DB1.bak 恢复到具有不同名称且存在原始数据库的同一个 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
4

1 回答 1

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你试图在同一个文件中恢复。尝试更改其中之一的文件名。

于 2013-10-29T10:27:54.537 回答