数据库备份:
backup database [MyTestDB]
to disk='D:\MyTestDB_20200101.bak'
with format,init,stats=1,compression
数据库恢复:
restore database MyTestDB_new
from disk='D:\MyTestDB_20200101.bak'
with
move 'MyTestDB' to 'D:\MyTestDB_new.mdf',
move 'MyTestDB_log' to 'D:\MyTestDB_new_log.ldf'
,replace,norecovery
当我们把服务器A上的一个数据库备份后,在服务器B上还原的时候, 直接 restore 的时候,大多情况下都会出错,可能的原因是数据库的文件(数据和日志)在 不同服务器上所在的 path 不同。这时候就需要 restore with move 选项,来把数据库 文件还原到目标 path 中。with move 的详细语法:
MOVE 'logical_file_name' TO 'operating_system_file_name' [ ,...n ]
如果只有一个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
这里的LogicalName就是放在上面代码里move后面的。
参考链接:链接
执行完成后,如果数据库显示正在还原,则执行下面这句:
RESTORE DATABASE MyTestDB_new WITH RECOVERY
参考链接:链接