将 SQL Server 实例设置回多用户模式

Jac*_*mas 7 sql-server configuration

我不得不恢复一个数据库,但一些用户仍然连接着,并离开了这一天。以前,我将数据库设置为单用户,现在我看不到该选项。

因此,我在实例级别进行了更改,将Properties/Connections/Maximum number of concurrent users 设置为 1,断开所有其他用户与服务器的连接。

我重新启动了 SQL Server 服务,但现在我根本无法访问数据库。数据库已启动并正在运行,但我无法打开查询窗口或右键单击“属性”以还原更改。

我怎样才能解决这个问题?

Aas*_*lah 11

首先,永远不要将服务器属性页面上的Max Number of Concurrent Connections设置为 1。此选项甚至可以阻止管理员登录,但无论如何仍然可以使用专用管理员连接。

  1. 使用 SQL Server 配置管理器重新启动服务,尝试登录,如果不成功,请使用专用管理员连接
  2. 右键单击实例名称,将Max Number of Concurrent Connections的值更改为 0(表示最大)并重新启动服务。

有时,将Max Number of Concurrent Connections设置为 1 后,登录时可能会遇到以下错误消息:

无法打开用户默认数据库。登录失败。
用户“用户名”登录失败

要解决此问题:在登录窗口中,单击选项按钮,然后在默认数据库项中,选择一个数据库,如tempdb,然后按登录。

如果数据库处于 Single_User 模式

使用 T-SQL:

USE [master];
GO
ALTER DATABASE [YourDatabaseNameHere] SET MULTI_USER WITH NO_WAIT;
GO
Run Code Online (Sandbox Code Playgroud)

使用 SSMS:

  • 右键单击所需的数据库--> 属性
  • 在数据库属性窗口的左侧,单击 选项
  • 在右侧,向下滚动并在底部找到一个 状态部分
  • 限制访问值更改为multi_user

如果数据库在Single_User模式,并且您想将其更改为 Multi_User,但由于其他人已经拥有连接而无法访问它,则:

  1. 如果您有ALTER ANY CONNECTION权限(sysadminprocessadmin固定服务器角色的一部分),请运行SP_WHOSP_WHO2,找到使用目标数据库的进程并执行:

    KILL processid (Ex: KILL 87)
    
    Run Code Online (Sandbox Code Playgroud)

    然后执行上面的 T-SQL 将您的数据库带回multi_user

  2. 或者,您可以分离然后附加您的数据库并执行上面的 T-SQL 将其带到multi_user。在生产服务器上不建议这样做。