实际上,我正在try 制作一个脚本(在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

推荐答案

我假设,如果要恢复一个数据库,就不关心该数据库上的任何现有事务.正当如果是这样,这应该对你有用:

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

现在,还有一点需要注意.将数据库设置为单用户模式后,其他人可能会try 连接到数据库.如果成功,您将无法继续恢复.这是一场比赛!我的建议是同时运行这三个语句.

Sql相关问答推荐

如何解决Error:operator is not unique:unknown—unknown在一个动态SQL查询?""""

SQL更新,在2个额外的表上使用内部连接

无效和不匹配的计数

R中对Arrow duckdb工作流的SQL查询

从自定义日期和时间开始,每月具有给定状态的公司数量

SQL:计算与另一列中给定值互斥的匹配项

Access中执行INSERT INTO查询时出现错误消息

找到最新的连线

如何从Spark SQL的JSON列中提取动态数量的键值对

从单个表达式中的分隔字符串中取平均值

替换SQL Server XML中多处出现的 node 值

如何用SQL组合客户拥有的产品

每次计数器增加时通过运行总重置进行分组

带有数组输入参数的Snowflake UDF优化

COBOL\DB2作业(job)需要帮助?快来获取专业指导!

使用SQL中另一个表的查询结果在表中查找记录

基于源表的 SQL INSERT、UPDATE 和 DELETE

如何计算每行出现的次数并显示在另一个表中?

奇怪的甲骨文行为

使用 JSON_BUILD_OBJ 从 Postgres 返回 JSON