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

时间:2015-06-15 11:58:30

标签: 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的下一层(它停留在“正在进行中”并且没有更改,所以我猜连接正在阻止高档)
  4. 我无法通过SSMS连接到我的数据库。我收到相同的错误消息。这已持续了几个小时,我的网站完全脱机,但登录次数没有变化。

    我需要一些方法来断开其中一些连接,以便我可以继续并诊断出问题所在。

6 个答案:

答案 0 :(得分:35)

要查看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

要杀死除了我的所有连接(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)

答案 1 :(得分:4)

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

从最后开始,解决方案是将数据库迁移到新节点,Azure用户无法执行此操作,因此,如果遇到此级别的问题,实际上最好的(也是唯一的)操作是尽快联系Microsoft支持。

我确实建议先在这里尝试其他一些建议,但是由于无法建立任何连接,您会被卡住。

由于这种情况是在Azure上升级数据库的过程中发生的,因此为了预防起见,我们实施了在升级数据库之前禁用自动备份的过程,并且该问题并未再次发生。

答案 2 :(得分:3)

如果这些连接仍然挂起且未超时,则可以使用t-sql KILL命令将其终止。

另一种选择是使用DAC。请参阅MSDN的详细信息。

如果这些选项都没有帮助,请通过microsoft dot com向我发送电子邮件给我的shantanu dot kurhekar上的服务器和数据库的详细信息,我可以提供帮助。

答案 3 :(得分:2)

您可以使用类似于内部sql的DAC管理连接,并在会话用尽时终止连接。您可以找到详细信息@ http://www.sqlindepth.com/2015/05/diagnostic-connections-to-sql-db-v12-databases/

答案 4 :(得分:0)

此处另一个鲜为人知的选项,该限制是基于您所在的层(S1,S2,P1等)所以您可以向上移动一层以获得更高的登录量,这可能会让您解决问题。

通常,向上移动这样的层也会移动您所在的节点,这也将删除错误的登录。

答案 5 :(得分:0)

解决方案:最后,经过几个小时的电话,他们无法通过传统方式访问服务器,并且必须在连接清除之前将数据库迁移到其他节点。

我仍然不知道是什么原因引起了这种情况,但是我们已经从Web版迁移到标准S0层,然后将数据库从V11升级到V12,我认为一路上出现了问题。

我确实喜欢下面的建议来试用DAC,如果问题再次出现,我会给它一个去报告。

更新2:以防万一其他人感兴趣,此时它根据我从微软收到的信息向我看来,自动备份存在问题,不知怎么会出现问题并且没有丢失与数据库的连接。如果我听到更多,我会发布更新,但与此同时我建议在升级/更改SQL Azure实例的层之前禁用任何备份作业可能是谨慎的。