ローカルSQL Server上にいくつかの純粋なSQLクエリをテストしようとしています(これはパフォーマンスをテストする最良の方法ではないでしょうが、大まかな見積もり)。私はJavaのPreparedStatementとMS JDBCをSQL Server用に使用していますが、それぞれConnection
の100スレッドをインスタンス化します。複数のJDBC接続をSQL Serverに作成できません
SQL Server Expressエディション(11.0.210)が既にインストールされていました。残念ながら、Express Editionは複数のクエリを並列に実行することはありません(Pro版と同様)ので、私のテストはあまり役に立ちません。
私はSQL Developer 2014を使用することができますが、私はいくつかの設定が難しいため、何かを忘れてしまった可能性があります。私はsysadmin(sa)アカウントでそれを使用し始めました。
Connection
をJDBCで1つ作成し、クエリを期待どおりに実行します。
Connection
を作成しようとしている
:
String SQLSERVER_CONNECTION_STRING = "jdbc:sqlserver://localhost\\SQLDEVELOPPER:55372";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c1 = DriverManager.getConnection(SQLSERVER_CONNECTION_STRING, USER, USER_PWD);
Connection c2 = DriverManager.getConnection(SQLSERVER_CONNECTION_STRING, USER, USER_PWD);
まず私はstderr
にこのメッセージが表示されます。
nov. 08, 2017 10:41:00 AM com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin
AVERTISSEMENT: ConnectionID:1 ClientConnectionId: bfb1d22d-a5fb-4f74-9be8-60fb91c9d701 Prelogin error: host localhost port 55372 Error reading prelogin response: Software caused connection abort: recv failed ClientConnectionId:bfb1d22d-a5fb-4f74-9be8-60fb91c9d701
そして、このエラーを16回取得:
をnov. 08, 2017 10:41:01 AM com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin
AVERTISSEMENT: ConnectionID:1 ClientConnectionId: fcd64c62-ba9a-48ee-b195-11307e7bad30 Prelogin error: host localhost port 55372 Error reading prelogin response: Une connexion existante a dû être fermée par l’hôte distant ClientConnectionId:fcd64c62-ba9a-48ee-b195-11307e7bad30
翻訳: "既存の接続は遠隔ホストによって閉じられなければなりませんでした"(私は最初の "遠いホストによって既存の接続が閉鎖されているかもしれませんが、@ fabのコメントが指摘する通り、それは間違っているかもしれません)
は、このスタックトレース:
Exception in thread "main" java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException: Une connexion existante a dû être fermée par l’hôte distant ClientConnectionId:0fa4b1cb-ae03-407a-bcc3-54a0cd85005c
at fr.aso.sandbox.utils.SQLServerConnectionManager.getConnection(SQLServerConnectionManager.java:24)
at fr.aso.sandbox.myComp.myComp.test.KeycopterTest.doubleConnectionThreadTest(KeycopterTest.java:78)
at fr.aso.sandbox.myComp.myComp.test.KeycopterTest.main(KeycopterTest.java:49)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Une connexion existante a dû être fermée par l’hôte distant ClientConnectionId:0fa4b1cb-ae03-407a-bcc3-54a0cd85005c
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2397)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2384)
at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1884)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.Prelogin(SQLServerConnection.java:2137)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1973)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at fr.aso.sandbox.utils.SQLServerConnectionManager.getConnection(SQLServerConnectionManager.java:22)
... 2 more
私はこれについてSO質問と回答を見つけましたが、それらのほとんどのために働いていない単一の接続についてだったしました。
ここでは、同じユーザーと2つ以上の接続を試したときに問題が発生するため、「TCPが有効になっていません」と「ファイアウォールブロックSQL Server」の問題が排除されています。
SQL Developerバージョンがある:私は、複数の時間にSQL Expressの上で同じ接続を行う可能性があるため
Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64)
Jun 17 2016 19:14:09
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
、私はこれは、SQL Serverの設定の問題であると考えていますが、関連する何かを見つけることができませんでした。
私はどこかに恋をしましたか?もっと明示的なエラーを出す方法はありますか?
エラーを理解することが重要になる可能性があるので(私が間違っていると私を修正する)、翻訳は "既存の接続*を遠方のホストによって閉じなければなりませんでした"と信じています – fab
@fabありがとう!私はあなたが正しいと思う、私は質問を編集しました。 – Asoub