sp_reset_connection 似乎由 SQL Server 连接池调用,以确保从池中重用的连接重置大部分设置。有谁确切知道它做什么和不做什么?
例如我看到这个帖子它不会重置事务隔离级别
当重新使用连接池中的连接时,数据访问 API 层(例如 ODBC、OLE-DB 和 SqlClient)会调用(内部)存储过程 sp_reset_connection。这样做是为了在重新使用连接之前重置连接的状态。
似乎没有关于重置哪些内容的官方文档,但这里有一个非官方列表。
sp_reset_connection 重置连接的以下方面:
- 它重置所有错误状态和数字(如@@error)
- 它停止作为子线程的所有 EC(执行上下文)
执行并行查询的父 EC
- 它将等待任何未完成的 I/O 操作
- 它将通过连接释放服务器上任何保留的缓冲区
- 它将解锁连接使用的任何缓冲区资源
- 它将释放该连接拥有的所有分配的内存
- 它将清除由创建的任何工作表或临时表
联系
- 它将杀死该连接拥有的所有全局游标
- 它将关闭所有打开的 SQL-XML 句柄
- 它将删除任何打开的 SQL-XML 相关工作表
- 它将关闭所有系统表
- 它将关闭所有用户表
- 它将删除所有临时对象
- 它将中止未完成的交易
- 加入后它将退出分布式事务
- 它将减少当前数据库中用户的引用计数;
释放共享数据库锁
- 它将释放获取的锁
- 它将释放可能已获取的任何句柄
- 它将所有 SET 选项重置为默认值
- 它将重置@@rowcount值
- 它将重置@@identity值
- 它将使用 dbcc traceon() 重置任何会话级别跟踪选项
sp_reset_connection 不会重置:
- 安全上下文,这就是连接池匹配连接的原因
基于确切的连接字符串
- 如果您使用 sp_setapprole 输入应用程序角色,则由于 application
角色无法恢复
- 事务隔离级别
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)