在SQL 2008R2下,用数据库A完整备份了文件A.bak,现在想还原,在SQL的管理器上可以右键任务还原,然后输入一个新的数据库名ATemp,但是还原的源文件是用的A.bak。现在想用代码实现这个复用的过程。
原来代码为:
use master
alter database A
set offline WITH ROLLBACK IMMEDIATE restore database ATemp
from disk = 'E:\\Test\MSSQLBackup.bak' with
replace,
recovery ALTER DATABASE A
SET ONLINE WITH ROLLBACK IMMEDIATE 然后报错:
消息 1834,级别 16,状态 1,第 6 行
无法覆盖文件 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.ASYS2008\MSSQL\DATA\A.mdf'。数据库 'A' 正在使用该文件。
消息 3156,级别 16,状态 4,第 6 行
文件 'A' 无法还原为 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.ASYS2008\MSSQL\DATA\A.mdf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 1834,级别 16,状态 1,第 6 行
然后使用move语句:
use master
restore database ATempfrom disk = 'E:\\Test\MSSQLBackup.bak'
with file = 1,
move 'A.mdf' to 'C:\Program Files\Microsoft SQL Server\N\ATemp.mdf',
move 'A.LDF' to 'C:\Program Files\Microsoft SQL Server\N\ATemp.LDF',
replace
然后又报错
消息 3234,级别 16,状态 2,第 8 行
逻辑文件 'A.mdf' 不是数据库 'ATemp' 的一部分。请使用 RESTORE FILELISTONLY 来列出逻辑文件名。
消息 3013,级别 16,状态 1,第 8 行
RESTORE DATABASE 正在异常终止。
请问错在哪里了?要怎么实现?谢谢!
原来代码为:
use master
alter database A
set offline WITH ROLLBACK IMMEDIATE restore database ATemp
from disk = 'E:\\Test\MSSQLBackup.bak' with
replace,
recovery ALTER DATABASE A
SET ONLINE WITH ROLLBACK IMMEDIATE 然后报错:
消息 1834,级别 16,状态 1,第 6 行
无法覆盖文件 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.ASYS2008\MSSQL\DATA\A.mdf'。数据库 'A' 正在使用该文件。
消息 3156,级别 16,状态 4,第 6 行
文件 'A' 无法还原为 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.ASYS2008\MSSQL\DATA\A.mdf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 1834,级别 16,状态 1,第 6 行
然后使用move语句:
use master
restore database ATempfrom disk = 'E:\\Test\MSSQLBackup.bak'
with file = 1,
move 'A.mdf' to 'C:\Program Files\Microsoft SQL Server\N\ATemp.mdf',
move 'A.LDF' to 'C:\Program Files\Microsoft SQL Server\N\ATemp.LDF',
replace
然后又报错
消息 3234,级别 16,状态 2,第 8 行
逻辑文件 'A.mdf' 不是数据库 'ATemp' 的一部分。请使用 RESTORE FILELISTONLY 来列出逻辑文件名。
消息 3013,级别 16,状态 1,第 8 行
RESTORE DATABASE 正在异常终止。
请问错在哪里了?要怎么实现?谢谢!
解决方案 »
- 请问sql里如果把传进来的yyyyMMddHHmmss格式转为datetime格式啊
- 这样的表约束可以做到吗?
- 求个SQL,交叉表的
- 有空的朋友来帮个忙
- mssql 获取数据问题
- sql server 2008 压缩问题
- 这个简单问题大家一定知道。帮俺菜鸟一把!
- 一个pos系统多少个存储过程合适?
- 谁知道哪个系统表是专门用来存放所有用户表信息的
- 对于一个有将近100,000条记录的库表,做set filter to快还是用select ... where ...语句快?由于我可能要做上百次这样的操作,所以希望能选一种最快的方法来完成
- SQL语句前的加一个N什么意思?
- 高手帮忙看下case end用法
SQL还原 1、验证备份 restore headeronly from bak3
restore filelistonly from bak3 with file=1
restore labelonly from bak3
restore verifyonly from bak3
2、从备份中还原 restore headeronly from bak1
restore database d1 from bak1 with file=2 --从完全备份中恢复
restore headeronly from bak2 --从差异备份中恢复
restore database d2 from bak2 with file=1,norecovery
restore database d2 from bak2 with file=5,recovery
----------------------------------------------------------------------
restore headeronly from bak3 --从日志备份中恢复
restore database d3 from bak3 with file=1,norecovery
restore log d3 from bak3 with file=2,norecovery
restore log d3 from bak3 with file=3,norecovery
restore log d3 from bak3 with file=4,norecovery
restore log d3 from bak3 with file=5,recovery
----------------------------------------------------------------------
restore database d3 from bak3 with file=1,norecovery --恢复到指定时间
restore log d3 from bak3 with file=2,norecovery
restore log d3 from bak3 with file=3,norecovery
restore log d3 from bak3 with file=4,recovery,stopat='2003-08-15 11:29:00.000'
----------------------------------------------------------------------
restore database d5 filegroup='FG2' from bak5 with file=4,norecovery --还原文件组备份
restore log d5 from bak5 with file=5,norecovery
restore log d5 from bak5 with file=7,recovery
----------------------------------------------------------------------
restore headeronly from bak6 --还原文件备份
restore database d5 file='d5_data3' from bak6 with file=6,norecovery
restore log d5 from bak6 with file=7,norecovery
restore log d5 from bak6 with file=9,recovery
----------------------------------------------------------------------
restore database d5 from bak6 with replace --删除现有数据库,从备份中重建数据库
----------------------------------------------------------------------
create database d6 --move to将数据库文件移动到新位置
on primary
(name=d6_data,
filename='E:\Program Files\Microsoft SQL Server\MSSQL\data\d6_Data.MDF',
size=2MB)
log on
(name=d6_log,
filename='E:\Program Files\Microsoft SQL Server\MSSQL\data\d6_log.ldf',
size=2MB)
go
backupdatabase d6 to bak6 with init
drop database d6
restore database d6 from bak6
with move 'd6_data' to 'e:\data\d6\d6_data.mdf',
move 'd6_log'to 'e:\data\d6\d6_log.ldf'
sp_helpdb d6
----------------------------------------------------------------------
3、分离与重连接数据库
--------------------------------------
sp_detach_db 'd6'
sp_attach_db 'd6','e:\data\d6\d6_data.mdf','e:\data\d6\d6_log.ldf'
--------------------------------------
sp_detach_db d6
go
create database d6
on primary
(filename='e:\data\d6\d6_data.mdf')
for attach
go
----------------------------------------------------------------------
4、恢复损坏的系统数据库
----------------------------------------------------------------------
1)先备份MASTER、MSDB
2)停止SQL服务,将MASTER数据库文件删除或者重命名。这样,SQL服务将不能启动。
3)系统数据库的还原
-----------------------------------------------
(1)如果SQL服务还能启动,则从备份中恢复系统数据库。
(2)如果SQL服务不能启动,则需要重建系统数据库。
使用SQL文件夹TOOLS\BINN目录下的Rebuildm.exe重建master数据库。
(3)创建备份设备,指向以前的备份设备。
(4)以单用户模式启动SQL
cd programe files\microsoft sql server\mssql\binn
sqlservr.exe -c -m
(5)进查询分析器,从备份中恢复master数据库。
restore database master from masterbak
restore database msdb from disk='e:\bak\msdb.bak'
MASTER还原后,SQL中用户数据库的信息也会恢复。
(6)如果MASTER没有备份,则需要用sp_attach_db命令将用户数据库附加到新的MASTER数据库中。
参考资料
消息 3156,级别 16,状态 4,第 6 行
文件 'A' 无法还原为 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.ASYS2008\MSSQL\DATA\A.mdf'。请使用 WITH MOVE 选项来标识该文件的有效位置。