SQL Server 的單一使用者模式
適用於:SQL Server
本文提供以單一使用者模式啟動 SQL Server 執行個體的資訊和步驟,這只允許一位使用者連線到執行個體。
以單一使用者模式啟動執行個體
以單一使用者模式啟動 SQL Server 可讓電腦本機管理員群組的任何成員以 sysadmin 固定伺服器角色的成員身分,連線至 SQL Server 的執行個體。 如需詳細資訊,請參閱當系統管理員遭到鎖定時連線到 SQL Server。
在某些情況下,您可能需要使用啟動選項 -m
,以單一使用者模式啟動 SQL Server 的執行個體。 例如,您可能想要變更伺服器設定選項,或是復原損毀的 master
資料庫或其他系統資料庫。 這兩個動作都需要在單一使用者模式下啟動 SQL Server 的執行個體。
下列範例會在單一使用者模式中啟動 SQL Server 執行個體,而且只允許透過 SQL Server Management Studio 查詢編輯器連線。
net start "SQL Server (MSSQLSERVER)" /m"Microsoft SQL Server Management Studio - Query"
若要在 Linux 上以單一使用者模式還原 master
資料庫,請參閱在 Linux 上以單一使用者模式還原 master 資料庫。
一般考量
以單一使用者模式啟動 SQL Server 執行個體時,請注意下列事項:
只有一個使用者可以連接到伺服器。
不會執行 CHECKPOINT 處理序。 依預設,在啟動時會自動執行。
注意
以單一使用者模式連線到至 SQL Server 執行個體之前,必須先停止 SQL Server Agent 服務;否則 SQL Server Agent 服務會使用該連線,從而將其封鎖。
當您以單一使用者模式啟動 SQL Server 執行個體時,SQL Server Management Studio 可以連線到 SQL Server。 Management Studio 中的物件總管可能會失敗,因為其需要一個以上的連接才能進行某些作業。 若要以單一使用者模式管理 SQL Server,請透過 Management Studio 或 Azure Data Studio 中的查詢編輯器進行連線來執行 Transact-SQL 陳述式,或使用 sqlcmd 公用程式。
當您搭配 SQLCMD
或 Management Studio 使用 -m
選項時,您可以限制與所指定用戶端應用程式的連線。
注意
在 Linux 上,SQLCMD
必須大寫,如此處所示。
例如,-m"SQLCMD"
會將連線限制為單一連線,而且該連線必須將自己識別為 sqlcmd 用戶端程式。 當您以單一使用者模式啟動 SQL Server,而且有未知的用戶端應用程式佔用唯一可用的連線時,請使用這個選項。 若要在 Management Studio 中透過查詢編輯器進行連線,請使用 -m"Microsoft SQL Server Management Studio - Query"
。
重要
請勿將這個選項當做安全性功能使用。 用戶端應用程式會提供用戶端應用程式名稱,而且可能會在連接字串中提供假的名稱。
Always On 考量
針對設定為 Always On 容錯移轉叢集執行個體 (FCI) 的 SQL Server 執行個體使用單一伺服器模式時,或您的資料庫是 Always On 可用性群組 (AG) 的一部分,還有其他考量。
可用性群組
當 SQL Server 以單一使用者模式啟動時,會略過群組中的 Always On 可用性群組和資料庫啟動。 如果您要針對需要以單一使用者模式啟動 SQL Server 的資料庫問題進行疑難排解,而且資料庫也是可用性群組的一部分,您必須先從可用性群組中移除資料庫,再以單一使用者模式啟動 SQL Server,讓資料庫上線。
容錯移轉叢集執行個體
若為叢集環境中的 SQL Server 安裝,當 SQL Server 以單一使用者模式啟動時,叢集資源 dll 會用完可用的連線,藉此封鎖與伺服器的任何其他連線。 當 SQL Server 處於此狀態時,如果您嘗試將 SQL Server Agent 資源帶到線上,則在 SQL 資源設定為可影響群組時,其可能會將此資源容錯移轉到另一個節點。
若要避開此問題,請使用下列程序:
從 SQL Server 進階屬性中移除
-m
啟動參數。使 SQL Server 資源離線。
從這個群組的目前擁有者節點,從命令提示字元發出下列命令:
net start MSSQLSERVER /m
從叢集管理員或是容錯移轉叢集管理主控台驗證 SQL Server 資源是否仍為離線狀態。
現在使用下列命令連線到 SQL Server,並執行必要作業:SQLCMD -E -S<servername>。
當此操作完成之後,關閉命令提示字元,並透過叢集管理員將 SQL 和其他資源帶回線上。