在恢复之前删除所有用户连接哪种方法更好?更改为单用户模式还是使数据库脱机?

SQL*_*ini 3 sql-server restore

当我们将数据库从 prod 恢复到 dev 时,哪种方法更好地断开访问数据库的其他连接?我使用的是 SQL Server 2008r2

1. 更改为单用户模式

use master

Go

ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

Go 



RESTORE DATABASE [MyDB] FROM  DISK = N'D:\Restore_Backup\Restore_05042015\DB.bak' 
WITH  FILE = 1,  
MOVE N'DB' 
TO N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyDB.mdf',  
MOVE DB_log' 
TO N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyDB_log.ldf',  
NOUNLOAD,  
REPLACE,  
STATS = 10

GO


ALTER DATABASE MyDB SET MULTI_USER 

Go
Run Code Online (Sandbox Code Playgroud)

2. 数据库下线并恢复数据库

USE master

GO

ALTER DATABASE MyDB
SET OFFLINE WITH ROLLBACK IMMEDIATE

GO


RESTORE DATABASE [MyDB] FROM  DISK = N'D:\Restore_Backup\Restore_05042015\DB.bak' 
WITH  FILE = 1,  
MOVE N'DB' 
TO N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyDB.mdf',  
MOVE DB_log' 
TO N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyDB_log.ldf',  
NOUNLOAD,  
REPLACE,  
STATS = 10
GO



ALTER DATABASE MyDB
SET OFFLINE 

GO
Run Code Online (Sandbox Code Playgroud)

哪种方法可以确保我是唯一的用户,这样我就可以毫无问题地进行恢复?

Jam*_*son 6

我会把它设置为离线。我这样说是因为SINGLE_USER模式通常用于允许管理员对数据库执行某种维护,而无需用户尝试访问并可能干扰维护。

对于恢复来说,无论哪种方式都并不重要,因为您的用户将经历同样的事情,即他们将无法连接。该方法的一个可能的烦恼SINGLE_USER是,如果用户窃取了您之前的单个会话并阻止您执行恢复。