23

我有一个 SQL2005 Express 数据库,我想在同一个实例上创建一个副本。您如何使用脚本执行此操作?

我已经有一个用于生成备份的脚本,但是还原失败了……

错误:

消息 3234,级别 16,状态 2,第 2 行逻辑文件“MyDB_data”不是数据库“MyDB_Test”的一部分。使用 RESTORE FILELISTONLY 列出逻辑文件名。
消息 3013,级别 16,状态 1,第 2 行 RESTORE DATABASE 异常终止。

决议:

RESTORE DATABASE [MyDB_Test]
FROM DISK = 'C:\temp\SQL\MyDB.bak'
WITH
MOVE 'MyDB' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test.mdf'
, MOVE 'MyDB_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test_log.ldf'
, REPLACE;

原因:
我在第一次尝试时没有正确识别逻辑路径。

4

3 回答 3

42

RESTORE FILELISTONLY 是一个信息性命令,不需要执行还原。用户可以使用它来确定数据文件的逻辑名称是什么,可以与MOVE命令一起使用将数据库恢复到新位置。

正如错误消息所建议的那样,您需要使用它RESTORE FILELISTONLY来查看数据库的逻辑名称是什么。您的恢复命令有这些错误。

这是您需要做的工作示例:

--backup the database
backup database test1 to disk='c:\test1_full.bak'

-- use the filelistonly command to work out  what the logical names 
-- are to use in the MOVE commands.  the logical name needs to
-- stay the same, the physical name can change
restore filelistonly from disk='c:\test1_full.bak'
 --------------------------------------------------
|  LogicalName  |           PhysicalName           |
 --------------------------------------------------
| test1         | C:\mssql\data\test1.mdf          |
| test1_log     | C:\mssql\data\test1_log.ldf      |
 -------------------------------------------------

restore database test2 from disk='c:\test1_full.bak'
with move 'test1' to 'C:\mssql\data\test2.mdf',
move 'test1_log' to 'C:\mssql\data\test2.ldf'
于 2009-09-01T05:26:04.503 回答
6

如何:将数据库还原到新位置和名称 (Transact-SQL)

于 2009-09-01T04:38:32.477 回答
0

以下是一些替代方案:

数据库恢复(从 .BAK)软件::

1) SqlRestoreSetup

2) Apex SQL 恢复

于 2014-07-23T14:00:11.890 回答