2016-07-01 17 views
0

"com.microsoft.sqlserver.jdbc.SQLServerExceptionが発生しました:SQL Serverが不完全な応答を返しました。接続が閉じられました。例外JavaアプリケーションのAzure SQLデータベースで連続したSQLクエリを実行しています。Azure SQLデータベースで実行されているSQLクエリは大量のデータをフェッチしています。データをフェッチしている間に各行で何らかの操作を実行するので実行に時間がかかります。 SQLクエリの実行中に一定期間が経過した後の例外(期間に一貫性がない).SQLサーバのバージョンは12.0.2000.8です。SQL Server 2012接続が閉じられた問題

誰でもこの現象が発生しますか?

コードスニペット

sourceDbConnection = SourceDBConnector().getConnection(); 
     stmt = createStmt(sourceDbConnection); 
     resultSet = stmt.executeQuery(sql query); 
     while (resultSet.next()) { 
      // .. Do some operation. 
     } 

SQLクエリ

SELECT coalesce(rfr.UniqueID,rs.UniqueID) as PGUID, rs.resultname, rs.ResultId, rs.modifieddatetime FROM tblResult rs 
       JOIN tblResultOrg org ON org.CustomerId = rs.CustomerId 
       LEFT OUTER JOIN tblResultFormRef rfr ON rfr.UniqueID = rs.UniqueID 
       WHERE org.ORGID IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25) AND NOT EXISTS (SELECT NULL FROM tblSynchedResult srs WHERE srs.ResultId=rs.ResultId) AND rs.Status=1    
       ORDER BY rs.modifieddatetime 

例外:

com.microsoft.sqlserver.jdbc.SQLServerException: SQL Server returned an incomplete response. The connection has been closed. 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1352) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1339) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3740) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.TDSReader.nextPacket(IOBuffer.java:3687) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.TDSReader.ensurePayload(IOBuffer.java:3663) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.TDSReader.readBytes(IOBuffer.java:3979) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.TDSReader.readWrappedBytes(IOBuffer.java:4001) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.TDSReader.readLong(IOBuffer.java:3971) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.PLPInputStream.makeStream(PLPInputStream.java:73) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.PLPInputStream.makeTempStream(PLPInputStream.java:59) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.PLPInputStream.isNull(PLPInputStream.java:45) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValuePrep(dtv.java:2345) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValue(dtv.java:2408) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.DTV.getValue(dtv.java:176) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.Column.getValue(Column.java:113) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1981) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1966) ~[sqljdbc4-3.0.0.jar:na] 
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(SQLServerResultSet.java:2291) ~[sqljdbc4-3.0.0.jar:na] 
    at org.apache.commons.dbcp2.DelegatingResultSet.getString(DelegatingResultSet.java:199) ~[commons-dbcp2-2.1.1.jar:2.1.1] 
    at org.apache.commons.dbcp2.DelegatingResultSet.getString(DelegatingResultSet.java:199) ~[commons-dbcp2-2.1.1.jar:2.1.1] 
    at com.mso.service.etl.job.prepared.EtlPreparedJob.handleFormsHavingNoRecordings(EtlPreparedJob.java:236) ~[classes/:na] 
    at com.mso.service.etl.job.prepared.EtlPreparedJob.execute(EtlPreparedJob.java:180) ~[classes/:na] 
    at com.mso.service.etl.job.prepared.EtlPreparedJob.run(EtlPreparedJob.java:105) ~[classes/:na] 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_85] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_85] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_85] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_85] 
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_85] 

答えて

0

いくつか薄いがあります。あなたに分かち合うための王。

blogにAccroding
  1. encrypt=true;せずに文字列を接続することによって引き起こされることがないようだが、それでもあなたのJDBC接続は、SSL(Secure Sockets Layer)暗号化を使用して有効にしてください。そしてSOスレッドSQL Server JDBC Error on Java 8: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryptionの同様の問題は、SSL暗号化の欠落が原因です。

  2. この問題は、Azure SQLデータベースのリソース制限によって発生したようです。詳しくは、https://azure.microsoft.com/en-us/documentation/articles/sql-database-resource-limits/を参照してください。この記事の推奨事項を参照して解決してください。また、参考として、問題を把握するためにSQLデータベースのクライアントアプリケーションのSQLエラー・コードについてarticleを参照してください。

あなたのSQL experssionによると、私のexpersionごとに、私はあなたが作成しようとすることを示唆していますAzure SQLのパフォーマンスを最適化するためにSQLクエリーのマテリアライズド・ビューまたは索引付きビューを使用する場合は、設計パターンを知るにはhttps://msdn.microsoft.com/en-us/library/dn589782.aspxhttps://msdn.microsoft.com/en-us/library/ms187864(v=SQL.100).aspxおよびhttps://msdn.microsoft.com/en-sg/library/ms191432.aspxを参照してください。

+0

ちょっとピーター、情報を共有してくれてありがとう。 – Chirag

+0

@Chirag更新しますか? –

+0

Peter:更新はありません。私たちはまだ原因を見つけています。 – Chirag

関連する問題