最初の試行時のSQL Serverタイムアウト


9

Visual StudioのデータソースまたはSQL管理コンソール自体を介して、2台目のコンピューター(Win7 64ビットを実行する両方のコンピューター)で実行されているSQL Server 2008に接続しようとすると、奇妙な問題が発生します。

最初に接続しようとすると、タイムアウトします。2回目の試みはうまくいきます。

2台目のコンピューターの共有に問題なくアクセスできます。アプリケーションインスタンスごとにSQLに接続しようとしたのは初めてのようです。つまり、2つのVisual Studioインスタンスを開くと、どちらも最初の接続では失敗しますが、2回目の接続では成功します。インスタンスごとに2回接続する必要があります(他のアプリケーションでの失敗/成功のシーケンスに関係なく)。

私はそれが理にかなっていると思います。

何かアドバイス?


他のマシンに接続するために使用している命名方法は、IPアドレス(つまり、192.168.1.1)またはMySqlServerなどの名前を使用していますか。これは名前解決の問題だと思います。SQLサーバーの名前をhostsファイルに追加すると、問題が解決することを確認できます。
コーディングGorilla

マシン名別ですが、それは私のホームネットワーク上にあり、マシン名を使用して共有をヒットできます。問題を引き起こすのはSQLだけです。
SergioL

回答:


6

私は解決策を見つけたと思います。少なくとも私の場合、それは機能しています。私はインスタンス名を使用していますが、これは自動的にSQLサーバーサービスの動的ポートを意味します。設定を動的ポートから修正ポートに変更し、そのポートでファイアウォールを開きました。

SQL Server構成マネージャー-> SQL Serverネットワーク構成-> 'InstanceName'のプロトコル-> TCP / IP->プロパティ-> IPアドレス-> IPすべて->

ここには2つのオプションがあります。

  • TCP動的ポート:51250(ランダムに生成)
  • TCPポート:空-ここに1433を配置してから、ファイアウォールを開きました(まだ開かれていない場合)。あなたは好きなポートを置くことができます(それが唯一のインスタンスだったので、私は1433を入れました。複数のインスタンスの場合は、インスタンスごとに異なるポートを選択し、ファイアウォールでそれらを開く必要があります)

このスクリプトは、MSからダウンロードしたポートを開く作業を簡単にするために使用しました。ここではそれを再現しています(コメントはドイツ語ですが、明白なはずです)。

@echo =========  Ports des SQL-Servers  ===================
@echo Aktivieren von Port 1433 für die SQLServer-Standardinstanz
netsh firewall set portopening TCP 1433 "SQLServer" 
@echo Aktivieren von Port 1434 für dedizierte Administratorverbindungen
netsh firewall set portopening TCP 1434 "SQL-Administratorverbindung" 
@echo Aktivieren von Port 4022 für den konventionellen SQL Server-Service Broker  
netsh firewall set portopening TCP 4022 "SQL-Service Broker" 
@echo Aktivieren von Port 135 für Transact-SQL-Debugger/RPC 
netsh firewall set portopening TCP 135 "SQL-Debugger/RPC" 
@echo =========  Ports für Analysedienste  ==============
@echo Aktivieren von Port 2383 für die SSAS-Standardinstanz
netsh firewall set portopening TCP 2383 "Analysedienste" 
@echo Aktivieren von Port 2382 für den SQL Server-Browserdienst
netsh firewall set portopening TCP 2382 "SQL-Browser" 
@echo =========  Verschiedene Anwendungen  ==============
@echo Aktivieren von Port 80 für HTTP 
netsh firewall set portopening TCP 80 "HTTP" 
@echo Aktivieren von Port 443 für SSL
netsh firewall set portopening TCP 443 "SSL" 
@echo Aktivieren des Ports für die Schaltfläche 'Durchsuchen' des SQL Server-Browserdiensts
netsh firewall set portopening UDP 1434 "SQL-Browser" 
@echo Zulassen von Multicast-/Broadcastantwort auf UDP (Aufzählung der Browserdienste OK)
netsh firewall set multicastbroadcastresponse ENABLE

2

ここで私の推測としては、データベースのAUTO_CLOSEがオンになっていると思います。これは、接続時にデータベースをスピンアップする必要があることを意味します。これが初期タイムアウトの原因です。

2番目の推測は、ホスト名の解決に関連している可能性があることです。したがって、最初はホスト名を解決するのに時間がかかりすぎます(おそらくブロードキャストによるのでしょうか)が、その後の接続試行ではキャッシュされます。ホストの解決に何を使用していますか?DNSにありますか?接続文字列をIPポート形式に変更してみてください。つまり、192.168.100.100,1433

ipconfig /flushdns接続が成功した後に実行してみて、同じ動作になるかどうかを確認することもできます。危険な回避策は、HOSTSファイルにルックアップを配置することですが、適切に修正する必要があります。


すべてのデータベースですでにオフ(0)に設定されています。ただし、これはクライアントからの最初の試行だけではなく、クライアントで実行されている各アプリの最初の試行です(SQL Studioの2番目の試行は接続されていますが、実行中はVS2010を起動しますが、最初の接続で失敗しますが、2番目では成功します...スタジオはすでに接続され、実行されていますが)。
SergioL

おそらくそのDNS /ホスト名解決に関連していますか?SQLサーバーのIP /ポートを使用して接続するように接続文字列を変更してみて、それが
なくなる

2

暗闇の中で目隠しをしてロングショットのように感じますが、役立つ場合があります。Microsoft SQL Developerフォーラムには、同じ問題のように見えるものと考えられる修正について説明する古いスレッドがあります。彼のサーバーはWindows Server 2008を実行していますが、Win7セットアップにも関連している可能性があります。

スレッド:

http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/58bd9c4d-0572-4567-8e32-82a7fd600022

スレッドから:

はい、この問題を修正しました。

Windows Server 2008はSASL LDAPバインドを拒否するように設定されていました(警告2886を参照)。

このようなバインドを拒否しないようにサーバーを構成したので、SQL Server 2008の接続は正しく機能します。

LDAP署名設定の変更に関する情報については、Microsoft KB 935834を参照してください(私は新しいユーザーなので、リンクできません)。

それが役に立てば幸い!


0

ファイアウォールを無効にします。テストネットワーク(ping)。SQLサーバーへのネットワークトラフィックを盗聴する(wiresharkを使用)


0

VSまたはSSMSで初めて接続する前にSQLプロファイラーを実行して、SQL Serverで何が起こっているかを確認できますか?

また、イベントログをチェックして、何かが記録されているかどうかを確認しましたか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.