【问题标题】:Socket error on server only仅服务器上的套接字错误
【发布时间】:2016-09-06 13:57:27
【问题描述】:

有一个 java 程序试图向 sql server 数据库插入大约 150k 条记录,但在生产服务器上失败并出现以下错误。

[Microsoft][SQLServer 2000 Driver for JDBC]建立套接字时出错

在数据量(即插入次数)增加后开始看到这些错误。 SQL Server 连接工作正常。

我尝试通过如下设置最大连接池来更改 JDBC 字符串

String DB_URL= "jdbc:sqlserver://example.com:11111;SelectMethod=Direct;DatabaseName=DB1;Max Pool Size=100000"

在本地机器上,程序运行良好。这说明程序没有问题。

只有在产品服务器上尝试运行相同的程序时才会出现问题。即使在服务器上仅在数据量增加后才看到此错误。在此之前,即使在服务器上程序也能正常工作。

套接字错误主要是网络问题吗?需要同样的帮助。

这是堆栈跟踪

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getImplConnection(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.setupImplConnection(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.<init>(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.<init>(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.prepareStatement(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.prepareStatement(Unknown Source)

【问题讨论】:

标签: java sockets networking jdbc


【解决方案1】:

如果由于连接泄漏而导致数据库服务器连接不足(数据库服务器中的并发连接有限制,请参阅服务器文档),可能会发生这种错误。您还没有提交代码,因此很难说,但是,值得检查以下内容:

1) 您是否有机会在每个连接中只插入一条记录并获得一个新连接来插入下一条记录? 2) 插入记录后是否关闭连接?

如果可能,使用 PreparedStatement 和 addBatch 对插入进行批处理,看看有什么不同。

【讨论】:

  • 感谢您帮助我。我也在做批量插入和关闭连接。终于弄清楚问题是什么并解决了这个问题。该程序正在加载 sql server 2000 和 2008 驱动程序。我下载了新的 sql server 驱动程序并只使用了它。之后程序运行正常。再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-04-24
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
相关资源
最近更新 更多