SQL Server 单用户模式

适用于:SQL Server

本文提供了在单用户模式下启动 SQL Server 实例的信息和步骤,该模式仅允许一个用户连接到该实例。

在单用户模式下启动实例

在单用户模式下启动 SQL Server 可使计算机本地 Administrators 组的任何成员作为 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 应用程序名称。 如果将 SQL Server 实例指定 -mSQLCMD 为启动参数,则 SQL Server 实例以单用户模式启动,并且来自应用程序以外的 sqlcmd 应用程序的连接将被拒绝。 当你正在单用户模式下启动 SQL Server 并且未知的客户端应用程序正在占用这个唯一的可用连接时,使用此选项。

若要通过 Management Studio 中的查询编辑器进行连接,可以使用-mSSMSQueryEditor连接到数据库引擎”对话框中的“其他连接参数”选项卡并输入App=SSMSQueryEditor

注意

使用 -m 启动选项指定的应用程序名称可能区分大小写。

重要说明

不要将此选项作为安全功能使用。 客户端应用程序提供客户端应用程序名称,并且提供假名称来作为连接字符串的一部分。

Always On 注意事项

对配置为 Always On 故障转移群集实例 (FCI) 的 SQL Server 实例或数据库属于 Always On 可用性组 (AG) 的一部分的 SQL Server 实例使用单服务器模式时,还需要注意一些其他事项。

可用性组

当 SQL Server 以单用户模式启动时,将跳过 Always On 可用性组和组中数据库的启动。 如果需要解决需要以单用户模式启动 SQL Server 的数据库问题,并且该数据库也是可用性组的一部分,则必须先从可用性组中删除该数据库,然后才能以单用户模式启动 SQL Server,以使数据库联机。

故障转移群集实例

对于群集环境中的 SQL Server 安装,当 SQL Server 以单用户模式启动时,群集资源 DLL 会占用可用连接,从而阻止与服务器的任何其他连接。 在 SQL Server 处于此状态下时,如果尝试使 SQL Server 代理资源处于联机状态,则在该资源配置为对组产生影响时,可能会将 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 和其他资源返回联机状态。