2016-07-01 3 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

약간 얇은있다 왕이 너에게 나누어주기 위해.

  1. blog에 Accroding, 그것은 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.aspx, https://msdn.microsoft.com/en-us/library/ms187864(v=SQL.100).aspxhttps://msdn.microsoft.com/en-sg/library/ms191432.aspx을 참조하십시오.

+0

헤이 피터, 정보 공유에 감사드립니다. – Chirag

+0

@Chirag 어떤 업데이트가 있습니까? –

+0

Peter : 업데이트가 없습니다. 우리는 여전히 원인을 찾고 있습니다. – Chirag

관련 문제