適用於: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 上的 SQL Server 中還原 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 中的查詢編輯器連線或使用 sqlcmd 公用程式來執行 Transact-SQL 語句。
當您使用 -m 選項時,可以附加特定的應用程式名稱,以限制只有連接字串中所指定相同應用程式名稱的連線。 例如,公用 sqlcmd 程式會使用 SQLCMD 作為其連接字串中的應用程式名稱。 如果您指定 -mSQLCMD 為啟動參數,SQL Server 實例會以單一使用者模式啟動,而且來自應用程式以外的 sqlcmd 聯機會遭到拒絕。 當您以單一使用者模式啟動 SQL Server,而且有未知的用戶端應用程式佔用唯一可用的連線時,請使用這個選項。
若要透過 Management Studio 中的查詢編輯器進行連線,您可以在 -mSSMSQueryEditor [App=SSMSQueryEditor] 對話方塊的 [其他連接參數] 索引卷標上使用並輸入 。
注意
使用 -m 啟動選項指定的應用程式名稱可能會區分大小寫。
重要
請勿將這個選項當做安全性功能使用。 用戶端應用程式會提供用戶端應用程式名稱,而且可能會在連接字串中提供假的名稱。
常時開啟考量
當 SQL Server 執行個體配置為 Always On 容錯移轉叢集執行個體 (FCI) 時,或您的資料庫為 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 和其他資源帶回線上。