SQL Server 使用活动连接还原数据库

Luk*_*uke 10 sql-server sql-server-2008-r2

我正在尝试在 SQL Server 实例上运行此 SQL 脚本,以将测试数据库恢复到实时数据库的较新副本。

RESTORE FILELISTONLY
   FROM disk = '\\staging_server\path\to\db_backup.bak'    
-- Restore the files for 
RESTORE DATABASE Test_DB
   FROM disk = '\\staging_server\path\to\db_backup.bak'
   WITH replace,
   MOVE 'Test_DB' TO 'D:\R2_BIN\Test_DB.mdf', 
   MOVE 'Test_DB_log' TO 'D:\R2_BIN\Test_DB_log.ldf', 
   stats = 5
GO
Run Code Online (Sandbox Code Playgroud)

但是,在运行脚本时,我收到以下错误。

消息 3101,级别 16,状态 1,第 5 行
,无法获得独占访问权限,因为数据库正在使用中。
消息 3013,级别 16,状态 1,第 5 行
RESTORE DATABASE 异常终止。

有什么方法可以强制执行此操作,并终止完成它所需的任何连接?我试图关闭任何可能连接到数据库的应用程序,但我根本无法识别一些连接。我的用户名中有几个,但我只打开了一个 SQL Server Management Studio 实例。

无论如何,有没有办法杀死与特定数据库的所有连接?这个实例上运行着相当多的数据库,所以如果我能帮上忙,我不想只是关闭并重新启动实例。

Jul*_*eur 16

您必须切换到单用户模式:

-- Close all connections and rollback all transaction
ALTER DATABASE Test_DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

RESTORE FILELISTONLY
   FROM disk = '\\staging_server\path\to\db_backup.bak'    
-- Restore the files for 
RESTORE DATABASE Test_DB
   FROM disk = '\\staging_server\path\to\db_backup.bak'
   WITH replace,
   MOVE 'Test_DB' TO 'D:\R2_BIN\Test_DB.mdf', 
   MOVE 'Test_DB_log' TO 'D:\R2_BIN\Test_DB_log.ldf', 
   stats = 5
GO

ALTER DATABASE Test_DB SET MULTI_USER;
GO
Run Code Online (Sandbox Code Playgroud)