从不同数据库备份/还原导致无法获得还原失败的独占访问权限

use*_*567 24 sql sql-server sql-server-2012

我有一个数据库A.我已经备份了一个名为A.bak的数据库A. 我创建了一个新的数据库B.现在,我右键单击并从A.bak恢复B. 在"还原对话框"中,我检查了覆盖现有数据库并将LogicalFileName更改为C:\Program Files\Microsoft SQL Server\MSSQL11.SQLSERVER2012\MSSQL\DATA\A.mdf,C:\Program Files\Microsoft SQL Server\MSSQL11.SQLSERVER2012\MSSQL\DATA\B.mdf并对ldf文件执行了相同操作.但我得到了

Exclusive access could not be obtained because the database is in use.

也尝试过,

ALTER DATABASE [B] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
Run Code Online (Sandbox Code Playgroud)

也是sp_who2,没有[B]的现有连接

Pro*_*gle 70

尝试获取独占访问权的原因来自SQL Server 2012 Management Studio中的还原对话框的选项页面.它将打开尾部日志并保留恢复SOURCE数据库的状态选项.因此,它将尝试获得对源数据库的独占访问权(在本例中为A)以执行此操作.如果关闭尾部日志选项,您会发现操作更顺畅.

  • 这为我们解决了,绝对有帮助! (4认同)

use*_*567 5

答案很简单,

运行此命令以获取LogicalNames,

RESTORE FILELISTONLY FROM DISK = 'C:\Users\MyUSer\Desktop\A.bak'
Run Code Online (Sandbox Code Playgroud)

然后只需将LogicalName放在下面,

RESTORE DATABASE B
   FROM DISK = 'C:\Users\MyUSer\Desktop\A.bak'
   WITH 
   MOVE 'LogicalName' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLSERVER2012\MSSQL\Data\B.mdf', 
   MOVE 'LogicalName_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLSERVER2012\MSSQL\Data\B.ldf'
GO
Run Code Online (Sandbox Code Playgroud)

请注意,您可能需要更改路径.有用的网址,

如何在sql server中恢复到不同的数据库?

http://technet.microsoft.com/en-us/library/ms186390.aspx