web-dev-qa-db-ja.com

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

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

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

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

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

何かアドバイス?

9
SergioL

私は解決策を見つけたと思います、少なくとも私の場合はうまくいきます。私はインスタンス名を使用していますが、これは自動的に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
6
radusun

暗闇で目隠しをしてロングショットのように感じますが、役立つ場合があります。 Microsoft SQL開発者フォーラムには、同じ問題のように見えるものと考えられる修正を説明する古いスレッドがあります。彼のサーバーは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を参照してください(私は新しいユーザーなので、リンクできません)。

それが役に立てば幸い!

2
Simon Peak

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

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

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

2
Nick Kavadias

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

0
bindbn

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

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

0
SQL3D