use Nothwind
go
select name, filename, * from dbo.sysfiles
name filename
-------------- ------------------------------------------------------------------
Northwind d:/program files/microsoft sql server/mssql$sqla/data/northwnd.mdf
Northwind_log d:/program files/microsoft sql server/mssql$sqla/data/northwnd.ldf
backup database Northwind to disk = 'c:/Northwind.bak'
use master
go
restore database Northwind from disk = 'c:/Northwind.bak'
用普通方式 restore 的话,SQL Server 会报出一大堆的错误信息。
Msg 3634, Level 16, State 1, Line 1
The operating system returned the error '32(error not found)'
while attempting 'RestoreContainer::ValidateTargetForCreation'
on 'd:/Program Files/Microsoft SQL Server/MSSQL$SQLA/data/northwnd.mdf'.
Msg 3156, Level 16, State 8, Line 1
File 'Northwind' cannot be restored to
'd:/Program Files/Microsoft SQL Server/MSSQL$SQLA/data/northwnd.mdf'.
Use WITH MOVE to identify a valid location for the file.
Msg 3634, Level 16, State 1, Line 1
The operating system returned the error '32(error not found)'
while attempting 'RestoreContainer::ValidateTargetForCreation'
on 'd:/Program Files/Microsoft SQL Server/MSSQL$SQLA/data/northwnd.ldf'.
Msg 3156, Level 16, State 8, Line 1
File 'Northwind_log' cannot be restored to
'd:/Program Files/Microsoft SQL Server/MSSQL$SQLA/data/northwnd.ldf'.
Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 1
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
SQL Server 2005 中数据文件所在目录为:d:/microsoft sql server/mssql.1/mssql/data/
restore database Northwind from disk = 'c:/Northwind.bak'
with move 'Northwind' to 'd:/microsoft sql server/mssql.1/mssql/data/Northwind.mdf'
,move 'Northwind_log' to 'd:/microsoft sql server/mssql.1/mssql/data/Northwind.ldf'
Northwind 数据库在 SQL Server 2005 中顺利还原。
注意,在 SQL Server 2005 中还原 Northwind 的时候,并不需要首先创建一个同名的 Northwind 数据库,而是直接进行 restore。
另外的一个问题是,如果客户给你一个 Northwind.bak 备份文件,让你在自己的机器上 restore。那么如何来确定 with move 中的逻辑文件名呢?一个方法是向客户咨询获取,二是使用 SQL Server restore filelistonly 来查看。
从 SQL Server restore filelistonly 命令结果中可以获取很多信息,下面仅列出 LogicalName and PhysicalName。
restore filelistonly from disk='c:/Northwind.bak'
LogicalName PhysicalName
--------------- ------------------------------------------------------------------
Northwind d:/Program Files/Microsoft SQL Server/MSSQL$SQLA/data/northwnd.mdf
Northwind_log d:/Program Files/Microsoft SQL Server/MSSQL$SQLA/data/northwnd.ldf
本文由 www.sqlstudy.com 原创