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"

若要以單一使用者模式還原 master Linux 上的資料庫,請參閱 以單一使用者模式還原 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"

重要

請勿將這個選項當做安全性功能使用。 用戶端應用程式會提供用戶端應用程式名稱,而且可能會在連接字串中提供假的名稱。

AlwaysOn 考慮

針對設定為 Always On 故障轉移叢集實例的 SQL Server 實例使用單一伺服器模式時,還有其他考慮,或您的資料庫是 AlwaysOn 可用性群組 (AG) 的一部分。

可用性群組

當 SQL Server 以單一使用者模式啟動時,會略過群組中的 Always On 可用性群組和資料庫啟動。 如果您需要針對需要以單一使用者模式啟動 SQL Server 的資料庫問題進行疑難解答,而且資料庫也是可用性群組的一部分,您必須先從可用性群組中移除資料庫,再以單一使用者模式啟動 SQL Server,讓資料庫上線。

容錯移轉叢集執行個體

若為叢集環境中的 SQL Server 安裝,當 SQL Server 以單一使用者模式啟動時,叢集資源 dll 會用完可用的連線,藉此封鎖與伺服器的任何其他連線。 當 SQL Server 處於此狀態時,如果您嘗試將 SQL Server Agent 資源帶到線上,則在 SQL 資源設定為可影響群組時,其可能會將此資源容錯移轉到另一個節點。

若要避開此問題,請使用下列程序:

  1. 從 SQL Server 進階屬性中移除 -m 啟動參數。

  2. 使 SQL Server 資源離線。

  3. 從這個群組的目前擁有者節點,從命令提示字元發出下列命令:

    net start MSSQLSERVER /m
    
  4. 從叢集管理員或是容錯移轉叢集管理主控台驗證 SQL Server 資源是否仍為離線狀態。

  5. 現在使用下列命令連線到 SQL Server,並執行必要作業:SQLCMD -E -S<servername>。

  6. 當此操作完成之後,關閉命令提示字元,並透過叢集管理員將 SQL 和其他資源帶回線上。