首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“当连接关闭并返回到池时,保留上次SET事务隔离级别语句中的隔离级别”?

“当连接关闭并返回到池时,保留上次SET事务隔离级别语句中的隔离级别”?
EN

Database Administration用户
提问于 2013-12-13 09:27:29
回答 3查看 3.2K关注 0票数 10

MSDN在线文章"Server中的快照隔离“指出:

  • “隔离级别具有连接范围,并且一旦为使用set事务隔离级别语句的连接设置,它将一直有效,直到连接关闭或另一个隔离级别被设置为止。当连接关闭并返回到池时,保留上次set事务隔离级别语句中的隔离级别。使用池连接重用的后续连接使用连接池时有效的隔离级别”

这不是自相矛盾的一段(“直到”和“保留”)吗?

然后,如果在关闭连接并将其返回到池之后“保留了最后一组事务隔离级别语句的隔离级别”,那么应该如何理解它:

  • 默认隔离级别将具有任意值(池中的不同连接将具有不同的隔离级别,其值将取决于重新打开的连接)?
  • 还是у池中所有连接上的所有默认值都将更改为最后一个?但手前又一次不知道呢?
EN

回答 3

Database Administration用户

回答已采纳

发布于 2013-12-13 09:48:40

来自池的连接将由上一个客户端设置使用该连接的隔离级别。是的,真的很可怕。

它的长短在于,如果更改连接的隔离级别,则必须在关闭之前显式地将其设置为READ COMMITTED。更好的做法是在任何批处理开始时显式声明所需的隔离级别,以确保您的代码不会受到其他人草率的影响,并在最后将其返回到默认状态。

这种行为,虽然令人困惑,但显然是副设计

票数 15
EN

Database Administration用户

发布于 2013-12-15 03:30:44

这不是自相矛盾的一段(“直到”和“保留”)吗?

对我来说不是,但我可以看到有其他的方式来阅读它。如果您希望更新文档以使其更加清晰,那么请求它的适当位置是在微软上。这里的人不维护Microsoft文档。

默认隔离级别将具有任意值(池中的不同连接将具有不同的隔离级别,其值将取决于重新打开的连接)?

如果您正在重用池连接,那么是的,“预先存在的”隔离级别是上次关闭池连接时生效的隔离级别。最佳实践是显式地设置连接时所需的隔离级别。

还是池中所有连接上的所有默认值都将更改为最后一个?但手前又一次不知道呢?

不是的。

票数 5
EN

Database Administration用户

发布于 2014-09-04 13:36:45

大多数TDS协议版本的服务器2014现在重置池连接的隔离级别。以前的Server版本没有重置隔离级别。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/54943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档