【问题标题】:How do I resolve mssql resetting connections如何解决 mssql 重置连接
【发布时间】:2015-06-15 13:29:59
【问题描述】:

当我使用 mssql 测试应用程序时,我总是随机收到此错误,并且不知道我可以做些什么来纠正这个问题。

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b):
org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException:
Connection reset ClientConnectionId:a2fb508d-0e8e-48b0-92ed-2d1f262b4db1 Error Code: 0

我的设置包括

  1. Eclipselink 作为 ORM
  2. sqljdbc v4.1
  3. sql server 2014
  4. Java 8

我相信问题可能是 sql-server 中的一个设置,尽管我没有看到任何可以纠正的东西。该应用程序在 postgres 和 mysql 上运行完美,但客户只想使用 mssql。

【问题讨论】:

  • 背景是什么?您是否运行任何 sql 更新/选择?有什么手续吗?您可以在 ssms 中手动运行它们而不会出现任何错误吗?他们跑了多长时间?也许您已将超时设置为低?
  • @Ionic 是的,有一些守护程序应用程序会不断访问数据库以检查不同的条件。主要是他们以大约 20:1 的比例进行小更新的选择,没有删除和插入。这些守护进程应该一直在运行。文档中的默认超时 [eclipse.org/eclipselink/documentation/2.4/jpa/extensions/… 为 0,因此它们不会超时。
  • 我有时也有同样的经历。服务器本身的超时值为 0,这意味着它不会超时。但是我的 c# 应用程序有它自己的超时终止。您可能需要查看 sys.dm_tran_locks 以检查应用程序运行时是否存在锁。也许这有帮助。这里是一个例子:SELECT * FROM sys.dm_tran_locks WHERE resource_database_id = DB_ID() and request_session_id = [YOURSESSION]
  • @Ionic 这个锁应该在哪里启动。查询不会产生任何结果。
  • 嗯,我不知道它是否会产生任何东西。因为我不知道您运行的是哪个查询。 :-)

标签: java sql-server eclipselink mssql-jdbc


【解决方案1】:

MSFT JDBC 驱动程序不会调用 sp_reset_connection 过程来清除上一个会话。

我认为此错误来自正在与其他数据库一起清理的遗留问题。

您需要对所有连接运行 SQL 配置文件跟踪,直到错误发生才能查看实际原因。

更多信息请访问: What does "exec sp_reset_connection" mean in Sql Server Profiler?

【讨论】:

  • 所以这意味着这是一个 jdbc 问题?那你会推荐我使用哪个 jdbc 驱动程序?
  • 我使用的唯一其他驱动程序是 jTDS,它也不会调用那个 MS 特定程序。您必须查看您的连接池管理器是否有一个在从池中分发连接之前调用的验证方法,并从那里调用重置过程。我对 EclipseLink 的了解还不够,无法帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 2019-06-25
相关资源
最近更新 更多