一尘不染

SQL-Server:错误-由于正在使用数据库,因此无法获得独占访问

sql

我实际上正在尝试制作一个脚本(在Sql Server 2008中)以从一个备份文件还原一个数据库。我做了以下代码,但出现错误-

Msg 3101, Level 16, State 1, Line 3
Exclusive access could not be obtained because 
the database is in use.
Msg 3013, Level 16, State 1, Line 3
RESTORE DATABASE is terminating abnormally.

我该如何解决这个问题?

IF DB_ID('AdventureWorksDW') IS NOT NULL 
BEGIN 
RESTORE DATABASE [AdventureWorksDW] 
FILE = N'AdventureWorksDW_Data' 
FROM  
DISK = N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\Backup\AdventureWorksDW.bak' 
WITH  FILE = 1, 
MOVE N'AdventureWorksDW_Data' 
TO N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW.mdf', 
MOVE N'AdventureWorksDW_Log'  
TO N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW_0.LDF', 
NOUNLOAD,  STATS = 10 
END

阅读 223

收藏
2021-05-05

共1个答案

一尘不染

我假设如果您要还原数据库,则无需关心该数据库上的任何现有事务。正确的?如果是这样,这应该为您工作:

USE master
GO

ALTER DATABASE AdventureWorksDW
SET SINGLE_USER
--This rolls back all uncommitted transactions in the db.
WITH ROLLBACK IMMEDIATE
GO

RESTORE DATABASE AdventureWorksDW
FROM ...
...
GO

现在,需要注意的另一项内容。将数据库设置为单用户模式后,其他人可能会尝试连接到该数据库。如果它们成功,您将无法继续进行还原。这是一场比赛!我的建议是一次运行所有三个语句。

2021-05-05