+ -
当前位置:首页 → 问答吧 → 数据库还原问题

数据库还原问题

时间:2011-11-07

来源:互联网

RESTORE DATABASE test2 from disk='D:\backup\test.bak' 
with recovery,replace

test.bak 是从数据库test做的完全备份,
现在新建一个数据库test2,想复制test的结构+数据到test2,
用上面的语句出现问题:

消息 1834,级别 16,状态 1,第 1 行
无法覆盖文件 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test.mdf'。数据库 'test' 正在使用该文件。
消息 3156,级别 16,状态 4,第 1 行
文件 'test' 无法还原为 D:\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test.mdf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 1834,级别 16,状态 1,第 1 行
无法覆盖文件 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test01.ndf'。数据库 'test' 正在使用该文件。
消息 3156,级别 16,状态 4,第 1 行
文件 'test01' 无法还原为 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test01.ndf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 1834,级别 16,状态 1,第 1 行
无法覆盖文件 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test02.ndf'。数据库 'test' 正在使用该文件。
消息 3156,级别 16,状态 4,第 1 行
文件 'test02' 无法还原为 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test02.ndf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 1834,级别 16,状态 1,第 1 行
无法覆盖文件 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test.ldf'。数据库 test' 正在使用该文件。
消息 3156,级别 16,状态 4,第 1 行
文件 'test_log' 无法还原为 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test.ldf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 1834,级别 16,状态 1,第 1 行
无法覆盖文件 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\test_name'。数据库 test' 正在使用该文件。
消息 3156,级别 16,状态 4,第 1 行
文件 'test_name' 无法还原为 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\test_name'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 1834,级别 16,状态 1,第 1 行
无法覆盖文件 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\test.pk_dnt_posts1_msg'。数据库 test' 正在使用该文件。
消息 3156,级别 16,状态 4,第 1 行
文件 'sysft_pk_dnt_posts1_msg' 无法还原为 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\test.pk_dnt_posts1_msg'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 1834,级别 16,状态 1,第 1 行
无法覆盖文件 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\test_NameCata'。数据库 test' 正在使用该文件。
消息 3156,级别 16,状态 4,第 1 行
文件 'sysft_test_NameCata' 无法还原为 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\test_NameCata'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 3119,级别 16,状态 1,第 1 行
在计划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。
消息 3013,级别 16,状态 1,第 1 行
RESTORE DATABASE 正在异常终止。

作者: zhengdoos   发布时间: 2011-11-07

SQL code
RESTORE DATABASE [mydb2] FROM  
DISK = N'D:\backup\test.bak' 
WITH  FILE = 1, 
MOVE N'mydb' TO N'D:\backup\MSSQL\DATA\mydb2.mdf',  --重新定义一下mdf 和LDF文件名或者目录
MOVE N'mydb_log' TO N'D:\backup\DATA\mydb_log2.LDF', 
REPLACE
GO

作者: Beirut   发布时间: 2011-11-07

记得加上REPLACE 选项

作者: Beirut   发布时间: 2011-11-07

无法覆盖文件 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test.mdf'。数据库 'test' 正在使用该文件。

作者: fredrickhu   发布时间: 2011-11-07

引用 1 楼 beirut 的回复:
SQL code

RESTORE DATABASE [mydb2] FROM
DISK = N'D:\backup\test.bak'
WITH FILE = 1,
MOVE N'mydb' TO N'D:\backup\MSSQL\DATA\mydb2.mdf', --重新定义一下mdf 和LDF文件名或者目录
MOVE N'mydb_log' TO N'D:\back……


+1

作者: yq510457   发布时间: 2011-11-07

举个同实例下完整备份/恢复数据库的例子吧,请参考着做.
SQL code

-- 备份现有数据库DBAP
backup database DBAP to disk='D:\DBAP.bak' with format,init

-- 查看数据文件及日志文件的路径
restore filelistonly from disk='D:\DBAP.bak'

LogicalName    PhysicalName
------------  ------------------
DBAP           E:\SQLDATA\DBAP.mdf
DBAP_log       E:\SQLDATA\DBAP_log.LDF

-- 修改一下数据文件及日志文件的路径(move..to..),否则会报错.
restore database DBAP2 from disk='D:\DBAP.bak' 
with replace,
move 'DBAP' to 'E:\SQLDATA\DBAP2.mdf',
move 'DBAP_log' to 'E:\SQLDATA\DBAP2_log.LDF'

作者: ap0405140   发布时间: 2011-11-07