web-dev-qa-db-ja.com

アクセスできない場合、Azure SQLデータベースへの接続を停止するにはどうすればよいですか?

今日、AzureSQL V12に移行しました。今夜、次のメッセージの問題が続いているため、サイトがオフラインになっています。

リソースID:3。データベースのLoginLimit制限は90で、達しています。詳細については、「 http://go.Microsoft.com/fwlink/?LinkId=267637 」を参照してください。 (Microsoft SQL Server、エラー:10928)

私は以下を試しました:

  1. Webサイトのサーバーを再起動しました(iisresetを試し、Webアプリを再起動しました)
  2. AzureポータルのすべてのIPフィルターを削除(Azureサービスからのアクセスを含む)
  3. Azureの次の層にアップスケール(「進行中」で動かなくなって変更されていないため、接続によってアップスケールが妨げられていると思います)

SSMS経由でデータベースに接続できません。同じエラーメッセージが表示されます。これは何時間も続いており、私のサイトは完全にオフラインですが、ログイン数は変化していません。

これらの接続の一部を切断して、問題が何であるかを診断できるようにする方法が必要です。

17
dylanT

この問題は、Azure自動バックアップがセッションを正しく終了できないことが原因でした。他の回答はどれも機能しませんでした。いずれもデータベースに接続できる必要があるため、私はこれを行うことができませんでした。私は電話でMicrosoftサポートに数時間話しかけましたが、その間、同じ理由でデータベースに接続できませんでした。

解決策は、データベースを新しいノードに移行することでしたが、これはAzureユーザーが実行できることではないため、このレベルの問題が発生した場合、Microsoftに連絡することが最善の(そして唯一の)ことです。できるだけ早くサポートします。

ここでは他のいくつかの提案を最初に試すことをお勧めしますが、接続を確立する機能がないと、行き詰まってしまいます。

これはAzureでデータベースをアップグレードするプロセス中に発生したため、予防策としてデータベースをアップグレードする前に自動バックアップを無効にする手順を実装しましたが、問題は再発していません。

4
dylanT

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)
40
azec-pdx

これらの接続がまだハングしていてタイムアウトにならない場合は、t-sql KILLコマンドを使用してそれらを強制終了できます。

別のオプションは、DACを使用することです。詳細はこちら [〜#〜] msdn [〜#〜] をご覧ください。

これらのオプションのいずれでも解決しない場合は、Microsoft dot comのshantanu dot kurhekarでサーバーとDBの詳細をメールで送ってください。

3
Shantanu

オンプレミスのSQLと同様のDAC管理接続を使用して、セッションが不足したときに接続を強制終了できます。詳細は、@ http://www.sqlindepth.com/2015/05/diagnostic-connections-to-sql-db-v12-databases/ で確認できます。

2

解決策:結局、Microsoftに電話をかけて数時間後、彼らは従来の方法でサーバーにアクセスできなくなり、接続がクリアされる前にデータベースを別のノードに移行する必要がありました。

そもそも何が原因なのかはまだわかりませんが、Web EditionからStandard S0層に移行し、データベースをV11からV12にアップグレードしたところ、何かがうまくいかなかったと思います。

私はDACを試すために以下の提案が好きです。問題が再発した場合は、問題を解決して報告します。

更新2:誰かが興味を持っている場合に備えて、現時点では、Microsoftから受け取った情報に基づいて、自動バックアップに問題があり、何らかの方法で問題が発生し、データベースへの接続がドロップされなかったように見えます。これ以上聞いたことがある場合は、更新を投稿しますが、当面は、SQL Azureインスタンスの階層をアップグレード/変更する前に、バックアップジョブを無効にすることをお勧めします。

0
dylanT

あまり知られていない別のオプションです。この制限は、使用しているティア(S1、S2、P1など)に基づいています。したがって、ティアを上に移動して、問題を解決できる可能性のあるより高いログイン量を取得できます。

多くの場合、そのような階層を上に移動すると、現在のノードが移動し、誤ったログインも削除されます。

0
cbattlegear