Sql-Server

SET SINGLE_USER 後什麼情況下會阻塞快照恢復?

  • April 29, 2021

在我的測試中,我有以下腳本:

USE master;
ALTER DATABASE [TestDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE [TestDB] FROM DATABASE_SNAPSHOT = 'TestDBSnapshot'

在某些我無法理解的情況下,我收到以下錯誤:

Database state cannot be changed while other users are using the database 'TestDB'
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.

似乎消息的順序不正確(.NET 問題?),但除此之外,我會在什麼情況下被RESTORE阻止SET SINGLE_USER?我希望SINGLE_USER給我獨占訪問權限(並且它在大多數情況下都有效)。

在此錯誤之後,數據庫確實處於SINGLE_USER狀態(但未恢復)。

當您將數據庫設置為單使用者時,它允許單個使用者進入數據庫。如果有其他人試圖進入數據庫,而您沒有與數據庫的連接,其他人可能會進入數據庫。

單個腳本,例如:

use master; 
alter database MyDb set single_user; 
use MyDb

…仍然是一個單一的連接。其他東西需要登錄到 SQL Server 和那個數據庫。它可以是使用者、工作、管理員。

將數據庫設置為受限使用者將阻止不是db_owner固定伺服器角色成員的任何人連接到數據庫。我建議您這樣做,或者在您進行數據庫還原時關閉應用程序/Web 伺服器。

SINGLE_USER本身不會給您獨占訪問權限。它只允許與數據庫的一個連接,這很可能是您自己的另一個會話。我見過另一種情況,其中 SQL 代理連接到數據庫並佔用了single_user連接。

當我想阻止使用者連接到正在恢復的數據庫時(使用替換),我使用RESTRICTED_USER.

ASET RESTRICTED_USER WITH ROLLBACK IMMEDIATE將立即斷開使用者連接,只允許訪問sadb_owner

引用自:https://dba.stackexchange.com/questions/15284