SQL2012 同名数据库恢复出错,如何解决?

cserisa 2013-06-20 11:36:55
SQL2012有一个数据库AAA,我每天执行备份的。
今天我想在保留AAA的情况下,恢复备份到AAATEST
SQL会报错,理由是因为数据库正在使用,所以无法获得对数据库的独占访问权。
于是我按照网上说的,改成single user。但是就会报错数据库AAA已经打开并且只能有一个用户什么的。

关键点是,如何在不删除原有数据库(AAA)的情况下,恢复该数据库的备份到(AAATEST)
...全文
292 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
铁歌 2013-06-22
  • 打赏
  • 举报
回复
可以直接通过企业管理器去recovery,关键点就是 1. 重新命名新的还原数据库名:AAATEST,相当于SQL语句的RESTORE database AAATEST FROM .. 2. 还原到新库,自然其数据文件和LOG文件要重新命名,选择“选项”输入“还原为”中的新的路径和文件名称就可以了,这个过程相当于WITH MOVE..TO...子句作用。 MSSQL的数据还原逻辑是比较清晰了: 还原指定设备文件,然后指定还原库名,选择新的数据文件名, 然后选择还原的选项,是no recovery还是with recovery.
BACKUP DATABASE AAA 
  TO DISK = 'D:\DBBackAAA.bak' 

 RESTORE DATABASE AAATest 
  FROM DISK = 'D:\DBBackAAA.bak' 
  WITH MOVE 'DBTest' TO 'E:\Program Files\Microsoft SQL Server2008\Data\DBTest1.mdf', 
  MOVE 'DBTest_log' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DBTest1_log.ldf'
大力水手 2013-06-22
  • 打赏
  • 举报
回复
AAAtest还没有还原成功类,何来已经有人使用,你一定是把数据库的物理文件名。没有重新命名。

use aaa
go
select 逻辑文件名,物理文件名+'test'  from sys.database_files
go
use master
go
restore aaatest from disk='D:\DBBACKUP\aaa.bak'
with 
move '文件名' to 'D:\DBBACKUP\物理文件名test.mdf',
move 'log文件名' to 'D:\DBBACKUP\log物理文件名test.ldf’

这只是一个思路。代码并不正确,但是按照这个写应该不会有问题。
cserisa 2013-06-21
  • 打赏
  • 举报
回复
我已经断掉了,并且重启了SQL服务器。 我备份的确是恢复为AAATEST mdf文件和lgf文件名也相应的修改了
ForFumm 2013-06-21
  • 打赏
  • 举报
回复
1.断掉其它数据库连接的程序或用户就可以了。 2.使用备份恢复为新数据库AAATEST。
最爱午夜 2013-06-21
  • 打赏
  • 举报
回复
使用备份恢复的时候,连接应该处于master数据库下,同时,AAATEST数据库应该没有人使用。
KevinLiu 2013-06-21
  • 打赏
  • 举报
回复
如果你恢复AAA的备份到AAATEST,那么除非AAATEST存在并且被访问才会有你提到的问题,否则恢复一个新的胡可能出现这个问题。 你可以在恢复数据库之前先KILL掉所有链接AAATEST的Session,然后用RESTORE WITH REPLACE选项覆盖原来的AAATEST数据库就可以了。
cserisa 2013-06-21
  • 打赏
  • 举报
回复
AAATEST数据库是不存在的。 现在又出现了一个问题,当我恢复AAATEST时候,AAA变成了RESTORING状态。不知道如何才能恢复正常

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧