sp_reset_connection是做什么的?

sp_reset_connection似乎是由SQL Server连接池调用的,以确保从池中重用的连接将其大部分设置重置。 有谁知道它究竟做了什么,但不做?

例如我从这篇文章看到,它不重置事务隔离级别

http://www.sqldev.net/misc/sp_reset_connection.htm (url不再有效)

文本在我的浏览器(火狐)上是白色的…只需用鼠标突出显示它,你就可以看到细节…

只是把它放在这里,因为它很难在该网站上阅读

ODBC,OLE-DB和SqlClient等数据访问API层在重新使用连接池中的连接时调用(内部)存储过程sp_reset_connection。 这样做是为了在重新使用之前重置连接的状态,但是没有logging什么事情被重置。 本文试图logging被重置的连接的部分。

sp_reset_connection重置连接的以下方面:

  • 它重置所有错误状态和数字(如@@错误)
  • 它停止执行并行查询的父EC的子线程的所有EC(执行上下文)
  • 它将等待任何突出的I / O操作
  • 它将通过连接释放服务器上任何保存的缓冲区
  • 它将解锁连接使用的任何缓冲区资源
  • 它将释放所有由连接分配的内存
  • 它将清除由连接创build的所有工作或临时表
  • 它会杀死连接所有的全局游标
  • 它将closures所有打开的SQL-XML句柄
  • 它将删除任何打开的与SQL-XML相关的工作表
  • 它将closures所有的系统表
  • 它将closures所有用户表
  • 它会放弃所有的临时对象
  • 它会中止公开交易
  • 入伍时它将从分布式事务中瑕疵
  • 它将减less当前数据库中用户的引用计数; 这释放共享数据库locking
  • 它将释放获得的锁
  • 它将释放可能已经获得的任何句柄
  • 它会将所有SET选项重置为默认值
  • 它将重置@@ rowcount值
  • 它将重置@@标识值
  • 它将使用dbcc traceon()重置任何会话级跟踪选项

sp_reset_connection不会重置:

  • 安全上下文,这就是为什么连接池匹配连接基于确切的连接string
  • 如果使用sp_setapproleinput了应用程序angular色,则无法恢复应用程序angular色
  • 事务隔离级别

从这个论坛post :

sp_reset_connection存储过程用于重置连接,以便在池中使用该连接时,将不存储以前会话中特定于连接的任何内容。