Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在同一台服务器上备份和恢复数据库作为副本?_Sql_Sql Server_Sql Server Express_Restore - Fatal编程技术网

Sql 如何在同一台服务器上备份和恢复数据库作为副本?

Sql 如何在同一台服务器上备份和恢复数据库作为副本?,sql,sql-server,sql-server-express,restore,Sql,Sql Server,Sql Server Express,Restore,我有一个SQL2005 Express数据库,我想在同一个实例上创建它的副本。你是如何用脚本来做这件事的 我已经有了生成备份的脚本,但是恢复失败了 错误: 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_lo

我有一个SQL2005 Express数据库,我想在同一个实例上创建它的副本。你是如何用脚本来做这件事的

我已经有了生成备份的脚本,但是恢复失败了

错误:

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;
Msg 3234,16级,状态2,第2行 逻辑文件“MyDB_数据”不是一部分 数据库“MyDB_测试”的名称。使用还原 FILELISTONLY以列出逻辑文件 姓名。
味精3013,16级,状态1, 第2行还原数据库正在终止 反常地

决议:

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;
原因:

我在第一次尝试时没有正确标识逻辑路径。

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

正如错误消息所建议的,您需要使用
RESTORE filelist only
查看数据库的逻辑名称。您的restore命令有这些错误

以下是您需要做的工作示例:

--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'

以下是一些备选方案:

数据库还原(从.BAK)软件:

(一)


2)

这不是服务器故障问题。我正在编写一个应用程序来完成这项工作…在看到您所做的编辑后,我刚刚更新了我的答案。