SQL Server 2014でローカルにインストールされた名前付きインスタンスで同じ問題が発生しました。を使用した接続FQDN\InstanceName
は失敗しますが、私のhostname\InstanceName
作業のみを使用した接続は失敗します。例:接続は機能しmycomputername\sql2014
ましたが、使用mycomputername.mydomain.org\sql2014
は機能しませんでした。DNSは正しく解決され、TCP / IPはSQL構成マネージャー内で有効になり、Windowsファイアウォールルールが追加され(そして、ファイアウォールをオフにして、何もブロックされていないことを確認しました)、どれも問題を修正しませんでした。
最後に、SQL Serverで「SQL Server Browser」サービスを開始する必要があり、接続の問題が修正されました。
SQL Server BrowserサービスがSQL Serverの接続を実際に支援していることに気づかなかった。「browse for more」サーバーをクリックして接続するときに、ドロップダウンに値を入力するのに役立つだけだという印象を受けましたが、実際には、ポート番号が明示的に割り当てられていない場合に、使用する正しいポート番号でクライアント要求を調整するのに役立ちます(同様のWebサイトバインディングが、複数のWebサイトをホストするIIS Webサーバーで同じ問題を軽減するのにどのように役立つかを説明します)。
この接続項目は、SQL Server Browserサービスについての手がかりを与えたものです:https : //connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine-名前
- サーバー名としてwstst05 \ sqlexpressを使用すると、クライアントコードはマシン名をインスタンス名から分離し、wstst05がnetbios名と比較されます。それらが一致しても問題はなく、接続はローカルと見なされます。そこから、我々は必要な情報を取得なし問題なく共有メモリを経由してSQLブラウザおよびSQLインスタンスに接続を連絡します。
- wstst05.capatest.local \ sqlexpressを使用すると、クライアントコードは名前(wstst05.capatest.local)とnetbios名(wstst05)の比較に失敗し、接続を「リモート」と見なします。これは仕様によるものであり、将来的には改善することを検討します。いずれにせよ、リモート接続とそれが名前付きインスタンスであることを考慮すると、クライアントは名前解決にSQLBrowserを使用する必要があると判断します。wstst05.capatest.local(UDPポート1434)でSQLブラウザーに接続しようとしますが、明らかにその部分は失敗します。したがって、エラーが発生します。
TechNetの「SQL Server Browser」サービスの理由(強調は私が追加):https ://technet.microsoft.com/en-us/library/ms181087( v=sql.120 ) .aspx
「SQL Server Browserの使用」セクションから:
SQL Server Browserサービスが実行されていない場合でも、正しいポート番号または名前付きパイプを指定すれば、SQL Serverに接続できます。たとえば、ポート1433で実行されている場合は、TCP / IPを使用してSQL Serverの既定のインスタンスに接続できます。ただし、SQL Server Browserサービスが実行されていない場合、次の接続は機能しません。
- すべてのパラメーター(TCP / IPポートや名前付きパイプなど)を完全に指定せずに名前付きインスタンスに接続しようとするコンポーネント。
- 後で再接続するために他のコンポーネントが使用できるserver \ instance情報を生成または渡すコンポーネント。
- ポート番号またはパイプを提供せずに名前付きインスタンスに接続する。
- TCP / IPポート1433を使用しない場合は、名前付きインスタンスまたはデフォルトインスタンスへのDAC。
- OLAPリダイレクタサービス。
- SQL Server Management Studio、Enterprise Manager、またはQuery Analyzerでのサーバーの列挙。
クライアントサーバーシナリオでSQL Serverを使用している場合(たとえば、アプリケーションがネットワーク経由でSQL Serverにアクセスしている場合)、SQL Server Browserサービスを停止または無効にすると、各インスタンスに特定のポート番号を割り当てて、常にそのポート番号を使用するようにクライアントアプリケーションコードを記述します。このアプローチには次の問題があります。
- クライアントアプリケーションコードを更新して維持し、適切なポートに接続していることを確認する必要があります。
- インスタンスごとに選択したポートがサーバー上の別のサービスまたはアプリケーションによって使用されている可能性があり、SQL Serverのインスタンスが使用できなくなります。
また、「SQL Serverブラウザーのしくみ」セクションの同じ記事の詳細情報:
ので、SQL Serverののインスタンスは1つだけのポートまたはパイプを使用することができます、SQL Server Expressを含む名前付きインスタンスには、異なるポート番号とパイプ名が割り当てられています。既定では、有効にすると、名前付きインスタンスとSQL Server Expressの両方が動的ポートを使用するように構成されます。つまり、SQL Serverの起動時に使用可能なポートが割り当てられます。必要に応じて、SQL Serverのインスタンスに特定のポートを割り当てることができます。接続時に、クライアントは特定のポートを指定できます。ただし、ポートが動的に割り当てられる場合、SQL Serverが再起動されるたびにポート番号が変更される可能性があるため、クライアントは正しいポート番号を認識できません。... SQL ServerクライアントがSQL Serverリソースを要求すると、クライアントネットワークライブラリはポート1434を使用してサーバーにUDPメッセージを送信します。SQLServer Browserは、要求されたインスタンスのTCP / IPポートまたは名前付きパイプで応答します。