【发布时间】:2013-09-09 13:34:58
【问题描述】:
我使用的是 SQL Server 2008 R2,我需要从 .bak 文件恢复数据库。在我重新启动 SQL Server 服务之前,总是会出现数据库正在使用的错误。
有更好的选择吗?
【问题讨论】:
-
这是我发现的最简单的——有时也是唯一的——始终有效的方法。
标签: sql-server
我使用的是 SQL Server 2008 R2,我需要从 .bak 文件恢复数据库。在我重新启动 SQL Server 服务之前,总是会出现数据库正在使用的错误。
有更好的选择吗?
【问题讨论】:
标签: sql-server
在恢复之前使用此代码破坏所有现有连接:
USE master;
GO
ALTER DATABASE YourDB
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
ALTER DATABASE YourDB
SET MULTI_USER;
GO
【讨论】:
重启 SQL 服务解决了我的问题。
【讨论】:
问题是您的数据库当前正被其他人使用并且可能有打开的连接。您需要做的是关闭与它的所有现有连接,然后恢复您的备份。
这是一个显示如何终止活动连接的链接:http://wiki.lessthandot.com/index.php/Kill_All_Active_Connections_To_A_Database
【讨论】:
在您要恢复的数据库上使用活动监视器和过滤器。然后与正在使用它的用户核实,并确保可以重新安装数据库。然后运行以下查询。
USE Master
KILL <session_id from activity monitor>
【讨论】:
关闭数据库引擎并重新启动它。不要只是重新启动,因为它不会完全停止实例。该错误可能是假的,但请检查您的环境以确认没有在丢失数据库连接后自动重新连接的正在运行的应用程序。
我从来没有找到答案来解释为什么从文件恢复到新数据库被认为是“正在使用”。
有时,@Serjik 将原始数据库降低到单用户并返回的答案对我有用。大约 80% 的时间,我必须将其全部关闭并重新启动,然后才能通过 SQL Server 管理服务器进行恢复。
【讨论】:
如果仍未解决,请尝试执行以下操作
Restore database YOUR_DB_NAME with recovery
【讨论】:
对我有用的是:
【讨论】:
尝试使用 SQL 恢复
RESTORE DATABASE my_new_database FROM disk = 'E:\path\name.bak'
有时我在 UI 上遇到了这些问题,但在 SQL 语句上工作得很好。 您需要在恢复之前杀死所有打开的进程,有时由于您的Windows或SQL安装文件的某些问题,该进程无法自行关闭。
【讨论】: