我使用名为s2jdbc的java框架属于seasar2。它在Sql Server 2008 R2 SP1(10.50.2500)中运行良好,但是当谈到Azure中的Sql Database(11.0.9213)时,有时会发生jdbc错误08S01。
通常,当s2jdbc想要从池中获取连接时,它会执行sql" SELECT 1"验证连接是否存在。但有时它似乎是 由sql server断开连接。超过15分钟后,sqlserver jdbc将超时超时。有一个commandTimeout设置为10分钟或更短,但没有工作。 这是堆栈跟踪。 (对不起,日语)
org.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[select 1], Message=[0], ErrorCode=08S01, SQLState={3})が発生しました
at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.wrapException(PreparedStatementWrapper.java:72)
at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.wrapException(PreparedStatementWrapper.java:67)
at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.executeQuery(PreparedStatementWrapper.java:83)
at org.seasar.extension.dbcp.impl.ConnectionPoolImpl.validateConnection(ConnectionPoolImpl.java:404)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 接続がタイムアウトしました
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1352)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1339)
at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1654)
at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3694)
at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:5022)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:388)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
上述消息"接続がタイムアウトしました"意味着,连接超时。
而且,我的服务器在CentOS 6.5上运行。
任何建议,并提前感谢你。
答案 0 :(得分:0)
正如它在锡上所说的那样,连接超时。如果DB没有问题,您可以尝试重新启动Centos盒作为第一个停靠点。如果经常发生此问题,请求Azure团队(提出支持服务单)将Centos VM移动到另一个虚拟机管理程序。