Known Issue: Microsoft JDBC Driver for SQL Server を使った接続が「SQL Server が不完全な応答を返しました。」のエラーで失敗する。

  SQL Developer Support Escalation Engineer 高橋 理香   みなさん、こんにちは。 最近お問い合わせいただくことが多い事象がありますので、今回はその内容をご紹介したいと思います。   事象 Java アプリケーションから Microsoft JDBC Driver for SQL Server を使用して SQL Server に接続するアプリケーションがある。このアプリケーションからの接続時に以下のエラーが発生することがある。 com.microsoft.sqlserver.jdbc.SQLServerException: ドライバが SSL (Secure Sockets Layer) 暗号化による SQL Server への安全な接続を確立できませんでした。エラー: SQL Server が不完全な応答を返しました。接続が閉じられました。。   対象環境/アプリケーション 上記事象が発生する条件として以下の特徴があります。 Windows Server 2012 R2 に Windows Server 2012 R2 Update1 (2919355) をインストールした環境上で動作する Java アプリケーションから Microsoft…

0

Troubleshooting Connectivity #9 – ローカル接続でネットワーク エラーとはこれいかに?

  高橋 理香 SQL Developer Support Escalation Engineer みなさん、こんにちは。 皆さんの疑問にお答えするブログを書きたいと思い早数年、今回は時々お問い合わせされる方が声にされる「SQL Server が稼動している環境上のほかのアプリケーションやツールから接続した場合にもネットワーク エラーが発生するのはなぜ?」について、その接続の仕組みなどを説明したいと思います。 前提: ローカル接続でトランスポートネットワークエラーが発生する事象について疑問があるとはどういうこと? まず、以下の2つの図を比べてみましょう。 図1 ではクライアント マシン CLIENT01 上の SQL Server Management Studio (以降、SSMS) から物理的にネットワークの回線を介してリモート マシン SERVER01 上で動作する SQL Server に接続するイメージです。接続でエラーが発生するということは、接続のリクエストとその完了の通信経路上で遅延や障害があった場合に生ずるため、図1 のパターンにおいてネットワークに起因した問題があればネットワーク通信におけるエラーが返される可能性があるということは容易に想像できますね。 それでは図2 はいかがでしょう。サーバー マシン SERVER01 上で SSMS を起動し、同じ SERVER01 上で動作する SQL Server に接続するイメージです。この場合、物理ネットワーク回線を介さないはずです。それにもかかわらずネットワーク層のエラーが発生することがある、これが「ローカル接続なのにネットワーク エラーが発生するのはなぜ?」という疑問です。 実際にどちらの構成であっても次のようにネットワークに問題があるようにも見えるエラーが発生します。 SERVER01 に接続できません。 ADDITIONAL INFORMATION: SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL…

0

Troubleshooting Connectivitiy #8 - エラー番号からわかる接続失敗原因 :エラー26

  高橋 理香 SQL Developer Support Escalation Engineer みなさん、こんにちは。 このシリーズの前回のポストから2年半以上経過してしまいましたが、まだ書きたいこともあり、終了はしていません!今回は接続時のエラーのうち、特徴的なエラーであるエラー番号 26 と出力されている場合のトラブルシューティングについて紹介したいと思います。 A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces,…

0

[SQL Database] アプリケーション作成における推奨事項について (Microsoft Azure SQL Database)

  皆さん、こんにちは。 SQL Server/Microsoft Azure SQL Database サポートチーム です。 今回は、Microsoft Azure SQL Database (以下 MASD) を使用したシステムを構築するうえで、推奨されるアプリケーションの実装について紹介します。   MASD は、クラウド上に配置されたデータベースをサービス (Software as a Service : SaaS) として提供しており、高可用性を実現するため、複数レプリカによる冗長性を備えています。また、高可用性を維持していくために、Reconfiguration (リコンフィグレーション) が内部的に行われています。 ※ Reconfiguration (リコンフィグレーション) の詳細については、以下の ブログを参照ください。   [SQL Database] Reconfiguration (リコンフィグレーション) は悪ではない。 http://blogs.msdn.com/b/jpsql/archive/2014/10/22/sql-database-reconfiguration.aspx   そのため、MASD を使用したシステムを構築する場合は、アプリケーション側でも、 アプリケーションからデータベースまでの経路間におけるネットワーク遅延、及び、Reconfiguration (リコンフィグレーション) の発生に伴う、既存セッションの切断、ロールの変更 (セカンダリからプライマリへの昇格など) が完了するまでの期間 (数秒から数十秒程度) における、新規接続の一時的な遅延を考慮した実装を検討する必要があります。 上記の事項を考慮した実装として、アプリケーション側で以下を実装することを推奨しています。   推奨実装 (アプリケーション側) 1)…

0

[SQL Database] Reconfiguration (リコンフィグレーション) は悪ではない。

皆さん、こんにちは。 SQL Server/Microsoft Azure SQL Database サポートチーム です。 今回は、Microsoft Azure SQL Database (以下 MASD) を使用するうえで、必ずお目に掛かる Reconfiguration (リコンフィグレーション) について紹介します。 New! Azure SQL Database v12 環境における既知の問題について Azure SQL Database v12 の Reconfiguration については、現在以下の問題が認識されており、以下のブログに速報をご案内しております。 V12 の Azure SQL Database の sys.event_log に reconfiguration が記録されない http://blogs.msdn.com/b/jpsql/archive/2015/08/21/v12-azure-sql-database-sys-event-log-reconfiguration-document-version-1-0.aspx 上記記事についてはアップデートを随時実施してまいります。速報としてのご案内となりますため、今後の内容が変更される場合がありますが、ご参考になれば幸いです。 [Reconfiguration (リコンフィグレーション) とは!?] Reconfiguration は、MASD 環境上の高可用性を維持するために実装された仕組みであり、ロールの変更 (セカンダリからプライマリへの昇格など) が行われる動作のことを意味します。 具体的には、以下のような場合に発生する可能性のある動作になります。   1. SQL…

0

Troubleshooting Connectivity #7 - 接続タイムアウトエラーまでの時間は?

高橋 理香 SQL Developer Escalation Engineer みなさん、こんにちは。 次は接続エラーを再度・・・と予告していたのですが、今回も接続タイムアウトについての情報を書きたいと思います。 接続タイムアウト値はどこで設定するのか 前回の「Troubleshooting Connectivity #6 – 接続タイムアウトは悪なのか?」に記載したように、接続タイムアウトの設定は、接続確立完了までに要する時間として許容する限界値を定めたものであり、かつ、障害が発生しているかを見極めるための時間の設定です。したがって、接続をしようとしている側 (アプリケーションやツール等) で設定するものであり、サーバー側で設定するものではありません。たとえば、サーバーがダウンしている場合を考えてみてください。接続相手がいない状態でリクエストを行うわけですから、もしサーバー側での設定があったとしたらそれは機能できませんね。 このように、接続タイムアウト値は接続をリクエストする際にそのリクエストを行う側がその接続に要してもいい時間を設定するものですので、基本的にはアプリケーションにてその設定を行うものとお考えください。 接続タイムアウト値はどのように働くのか では、接続タイムアウト値を設定したはいいけど、指定した時間になったらちょうどでエラーになるのでしょうか。 残念ながらか、気が利いているのかは要件によるのですが、ちょうどの時間ではエラーにならないパターンがあります。 先に例にあげたサーバーがダウンしている場合がこのパターンに該当しますので、その動作について以下の2点の機能に分けて説明します。 A:    接続に使用するプロトコルの自動切り替え B:    プロトコル自体のタイムアウトおよび再転送設定 A: 接続に使用するプロトコルの自動切り替え SQL Server へアクセスするドライバーやプロバイダーの多くは、接続時には以下のように複数のプロトコルでの接続試行を行うよう設計されています。     ADO.NET の System.Data.SqlClient (.NET Framework Data Provider for SQL Server) を使用してリモートの SQL Server に接続する場合を例にすると以下の通りです。 1) TCP/IP プロトコルで接続試行する。 2) TCP/IP プロトコルによって OS レベルのセッション確立がタイムアウトした場合、名前付きパイプに切り替えて接続試行する。 3)…

0

[SQL Connectivity] 名前付きパイプでの接続時トラブルシューティング

佐藤美菜 SQL Developer Support Engineer SQL Server へのアクセスは各種プロトコル( TCP/IP、名前付きパイプ、共有メモリ) で行えます。 SQL Server 2000 以降、既定のプロトコルは TCP/IP となっており、TCP/IP での接続がメインとなっているのが昨今です。 TCP/IP に比べ、名前付きパイプは古いテクノロジーで忘れがちですが、忘れがちだからこそ、ということで、今回は、名前付きパイプでの接続時のトラブルシューティング方法を紹介します。接続できなかった場合にはチェックしてみてください。   問題箇所特定のための切り分け接続テスト 名前付きパイプでのトラブルシューティングに入る前に、まずは、問題箇所を特定するために、以下で案内している 「2-2. 再現性がある場合に、切り分けのために実施いただきたい接続テスト」を試してみてください。 Troubleshooting Connectivity #4 – 接続エラーの調査方法 名前付きパイプの接続時の問題かどうかを切り分けるには、接続テスト時のサーバー名に使用するプロトコルを指定して確認します。 TCP/IP での接続 : tcp:接続先SQLServerホスト名 名前付きパイプでの接続 : np:接続先SQLServerホスト名 共有メモリでの接続 : lpc:接続先SQLServerホスト名 接続テストの結果、名前付きパイプでの接続に問題があることが特定できたら、次に進みます。   名前付きパイプでの接続トラブルシューティング はじめに : 名前付きパイプでの接続時の動作について 名前付きパイプ プロトコルによる通信では、サーバー側の IPC$ という共有名に対して接続要求を行います。ユーザー情報を渡し、適切である場合に接続が確立されます。クライアント上で動作しているアプリケーションの実行ユーザーが、このサーバーの共有にアクセスする権限を持っていないと名前付きパイプの接続が失敗します。 ※ SQL Server 認証の場合でも、名前付きパイプを使用する場合は、Windows ユーザーの認証処理がプロトコル…

0

Troubleshooting Connectivity #6 - 接続タイムアウトは悪なのか?

高橋 理香 SQL Developer Support Escalation Engineer みなさん、こんにちは。 数年以上前からずっと個人的にいつかきっとわかってもらえる…と思いながら今日まで心の中でしまっていたこと。それが接続タイムアウトの存在意義。(いえ、実際にはお問い合わせいただいた方にはそれとなく、もしくははっきりとお伝えしたこともあるのですが、、、) そんな接続タイムアウトについての考え方について今回は書きたいと思います。 接続タイムアウトとは? 接続タイムアウトとは、アプリケーションからの接続要求が一定時間内に完了しなかった事象を指します。また、その際に返されるエラーが、タイムアウト エラーです。 例えばこんなエラーがありますね。(接続時に発生するエラーとしてどんなエラーがあるかはまた後日に別のトピックにてご紹介予定です。) Timeout に達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません           ログイン タイムアウトが時間切れになりました。 「一定時間内に完了しない」というのがどういうことかについては、このシリーズをご覧くださっている皆様ならお分かりいただけると思いますが念のため列挙します。 OS レベルのセッション確立に遅延が生じた。 ログイン認証の処理に遅延が生じた。 データベース アクセスに遅延が生じた。 ではそれぞれに遅延が生ずる主な理由は・・・ はい、皆様、以前のブログに書いていますので、そちらをご覧くださいね。 Troubleshooting: Connectivity #2 – エラー情報からわかる失敗原因 とにかくです。どこかに遅延が生じて、時間がかかってしまったという状況を指すわけです。   遅延を許容するか?それともエラーで中断させるか? さてさて、ネットワーク等のインフラが整ってきた昨今ですが、いつどんな環境でも同じ程度のレスポンスって約束されているんでしょうか??? 私が自宅で使っている PC は CPU のクロック数はそこそこであるもののメモリは少なく、また、ネットワークのスピードも、さっき下り 75Mbps だったのが今は 10Mbps くらいになっているなど、会社と同じようにインフラが整ってます!とは言いがたい状況です。会社で作業していたとしても、一部メンテナンスでつながりにくいことなどもあります。つまり、「いつどんな環境でも」という点でいえば、いまだそこまでは High Performance が保証されてはいないのが現実だと思います。 ではこの遅い状況もあるだろうという昨今の環境において、その遅い状況に遭遇した場合を考えてみましょう。あなたはどちらを望みますか? 遅いことを示すメッセージを出して後で再試行するのがいいですか? それとも・・・ 遅くてもいいからエラーは出さないで終わってほしいですか? 少なくとも私が自宅にてちょっとした興味でどこかのサイトでお買い物なんかを行っているような状況の場合、メッセージが出て処理が中断されても問題ありません。むしろ、混雑していることを教えてもらえれば後日にやればいいだけということもあります。 勢いでクリックしたものなんかは考える余地ができます(笑)…

0

[Windows Azure] ゲスト OS アップグレード後、ゲスト OS 上のSQL Server Native Client を使用している WebRole/Worker Role アプリケーションで例外エラーが発生する (Ver 2.0)

2013 年 7 月以前の Windows Azure の ゲスト OS には、SQL Server 2008 Native Client (以下 SQLNCLI10)が含まれていましたが、7 月リリースの Azure ゲスト OS (バージョン 1.24 / 2.16 および 3.4) には、SQL Server 2012 Native Client (以下 SQLNCLI11) に置き換えられました。SQL Databaseに接続するクライアント アプリケーションにおいて Azure ゲスト OS に含まれる SQLNCLI10 を使用していた場合、この変更によってデータソース接続ができなくなり、例外がスローされるなどの問題が発生することになります。 Note : 2013/08/09 Update – 過去バージョンの Guest OS のリタイアについて 対処方法として、SQLNCLI10 の含まれる June release…

0

Kerberos Configuration Manager for SQL Server

  神谷 雅紀 SQL Server Escalation Engineer       リンクサーバーなど複数のサーバー間で資格情報の受け渡しが必要となる処理を行おうとした場合、Kerberos を用いた認証が必須になります。しかし、Kerberos 認証を行うためには、いくつかの設定が必要です。それらの設定が正しく行われていない場合には、資格情報の受け渡しが行えず、正常に機能しません。 先日、Kerberos の設定に関わるトラブルシューティングを行うためのツールを公開しました。 ツールは、以下の URL よりダウンロードすることができます。   Microsoft® Kerberos Configuration Manager for SQL Server® http://www.microsoft.com/en-us/download/details.aspx?id=39046   使い方は非常に簡単で、KerberosConfigMgr.exe を実行した後、Connect メニューで対象サーバーへ接続します。サーバー名やユーザー名を指定せずに接続すると、ローカルサーバーに接続します。設定の確認に必要な操作はこれだけです。 接続すると、以下のように、そのサーバー上の SQL Server インスタンスとサービスアカウントに関して、SPN の登録状態や委任 (Delegation) の設定状態が表示されます。       表示されている内容を確認し、不足していたり、誤った設定が報告されている場合には、それを正します。 委任の設定については手動で行う必要がありますが、SPN に関しては、ツール実行者に権限があれば、ボタン一つで必要な SPN 設定を行うことができます。          

0