如果无法访问Azure SQL数据库,如何终止与Azure SQL数据库的连接?

dyl*_*anT 16 sql-server azure azure-sql-database

今天我们迁移到AzureSQL V12.今晚我的网站处于离线状态,因为以下消息存在持久性问题:

资源ID:3.数据库的LoginLimit限制为90且已达到.有关帮助,请参阅" http://go.microsoft.com/fwlink/?LinkId=267637 ".(Microsoft SQL Server,错误:10928)

我尝试过以下方法:

  1. 重新启动我的网站的服务器(也尝试了iisreset并重新启动了网络应用程序)
  2. 删除了Azure门户中的所有IP筛选器(包括从Azure服务访问)
  3. 升级到Azure中的下一层(它停留在"正在进行中"并且没有更改,所以我猜连接正在阻止高端)

我无法通过SSMS连接到我的数据库.我收到相同的错误消息.这已持续了几个小时,我的网站完全脱机,但登录次数没有变化.

我需要一些方法来断开其中一些连接,以便我可以继续并诊断问题可能是什么.

aze*_*pdx 39

要查看Azure SQL DB上的现有连接,请使用以下查询:

SELECT
    c.session_id, c.net_transport, c.encrypt_option,
    s.status,
    c.auth_scheme, s.host_name, s.program_name,
    s.client_interface_name, s.login_name, s.nt_domain,
    s.nt_user_name, s.original_login_name, c.connect_time,
    s.login_time
FROM sys.dm_exec_connections AS c
JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id
--WHERE c.session_id = @@SPID;
--WHERE status = 'sleeping'
ORDER BY c.connect_time ASC
Run Code Online (Sandbox Code Playgroud)

要杀死除了我的所有连接(SPID),我使用此查询:

DECLARE @kill varchar(8000) = '';

SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(5), c.session_id) + ';'

FROM sys.dm_exec_connections AS c
JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id
WHERE c.session_id <> @@SPID
--WHERE status = 'sleeping'
ORDER BY c.connect_time ASC

EXEC(@kill)
Run Code Online (Sandbox Code Playgroud)

  • 超出限制后,我可以使用 Azure 门户进行连接并触发这些查询,它解决了我的问题。 (2认同)

dyl*_*anT 4

此问题是由 Azure 自动备份无法正确结束会话引起的。其他答案都不起作用,因为它们都要求您能够连接到数据库,而我无法做到这一点。我最终通过电话与 Microsoft 支持人员交谈了几个小时,在此期间他们也由于同样的原因无法连接到数据库。

他们最终的解决方案是将数据库迁移到新节点,这不是 Azure 用户可以做的事情,因此,如果您遇到这种级别的问题,最好(也是唯一)要做的事情就是联系 Microsoft尽快支持。

我确实建议首先尝试这里的一些其他建议,但如果无法建立任何连接,您将陷入困境。

由于这是在 Azure 上升级数据库的过程中发生的,因此我们在升级数据库之前实施了禁用自动备份的过程作为预防措施,并且该问题没有再次出现。