分享

SQL Server:用 SQL 语句还原数据库(with move 选项用法)

 imzjw 2009-05-25

SQL Server:用 SQL 语句还原数据库(with move 选项用法)

SQL Server:用 SQL 语句还原数据库(with move 选项用法)


SQL Server:用 SQL 语句还原数据库(with Move 选项用法)。

当我们把服务器A上的一个数据库备份后,在服务器B上还原的时候,直接 restore 的时候,大多情况下都会出错,可能的原因是数据库的文件(数据和日志)在不同服务器上所在的 path 不同。这时候就需要 restore with move 选项,来把数据库文件还原到目标 path 中。with move 的详细语法:

MOVE 'logical_file_name' TO 'operating_system_file_name' [ ,...n ]
当我在把 SQL Server 2000 Instance(实例)中的数据库 Nortwind,还原到 SQL Server 2005 Instance 中的时候,也需要使用 restore with move 选项来进行还原。

1. 查看 SQL Server 2000 中 Northwind 数据库文件的逻辑文件名(logical file name)和物理文件路径(operation system file name):
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
2. 备份 SQL Server 2000.Northwind 数据库
backup database Northwind to disk = 'c:\Northwind.bak'
3. 在 SQL Server 2005 Instance 中还原 Northwind 数据库。
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.
4. 在 SQL Server 2005 中还原 Northwind 数据库正确方法:restore with move。
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 来查看。

5. 使用 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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多