位置: 编程技术 - 正文

SQL Server误区30日谈 第26天 SQL Server中存在真正的“事务嵌套”(sql server 错误)

编辑:rootadmin

误区 #: SQL Server中存在真正的“事务嵌套”错误

嵌套事务可不会像其语法表现的那样看起来允许事务嵌套。我真不知道为什么有人会这样写代码,我唯一能够想到的就是某个哥们对SQL Server社区嗤之以鼻然后写了这样的代码说:“玩玩你们”。 让我更详细的解释一下,SQL Server允许你在一个事务中开启嵌套另一个事务,SQL Server允许你提交这个嵌套事务,也允许你回滚这个事务。 但是,嵌套事务并不是真正的“嵌套”,对于嵌套事务来说SQL Server仅仅能够识别外层的事务。嵌套事务是日志不正常增长的罪魁祸首之一因为开发人员以为回滚了内层事务,仅仅是回滚内层事务。 但实际上当回滚内层事务时,会回滚整个事务,而不是仅仅是内层。这也是为什么我说嵌套事务并不存在。 所以作为开发人员来讲,永远不要对事务进行嵌套。事务嵌套是邪恶的。 如果你不相信我说的,那么通过下面的例子就就会相信。创建完数据库和表之后,每一条记录都会导致日志增加8K。

测试 #1:回滚内部事务时仅仅回滚内部事务? 你可以看到得出的结果是2和,下面我来回滚内部的事务,按照我们的猜想应该只回滚条吧,但事实上你会得到如下结果: 好吧,由Books Online来看,我只能使用外部事务的名称或是将事务名称留空来进行回滚,代码如下:现在我得到结果是0和0。正如Books Online所言,这个回滚操作将外部事务进行了回滚并将全局变量@@TRANCOUNT设置为0。事务中所有的修改都被回滚,如果想部分回滚的话只能使用SAVE TRAN 和ROLLBACK TRAN。测试 #2:嵌套事务中内部事务提交后会保存内部事务的修改吗? 正如我所期待,得到的结果是。这说明内部事务提交是会修改到磁盘的。但是如果这时外部事务回滚的话,那么不应该回滚内部事务… 但运行上面查询后结果是0,这说明外部事务的回滚会影响内部事务。 测试 #3:提交嵌套的事务的内部事务至少可以让我清除日志吧。 在开始这个测试之前我首先清除了日志,然后运行如下代码: 得到结果: 下面我将事务提交后运行CheckPoint(对于简单恢复模式的数据库将会截断日志),得到的结果: 我们发现日志的使用不减反赠,这是由于日志写入了CheckPoint记录(详情请看:How do checkpoints work and what gets logged)。提交内部事务不会导致日志被清除,这是由于外部事务回滚时也会连同内部事务一起回滚(译者注:所以这部分VLF在外部事务提交之前永远不会被标记位reusable)。所以这部分日志在外部事务提交之前永远不会被截断。为了证明这一点,我提交外部事务,然后再来看日志:么样,日志使用百分比大幅下降了吧。 对于嵌套事务来说---Just Say no。(这句话你可以当作来自SQLSkill.com的一个热心的家伙给的福利:-)

推荐整理分享SQL Server误区30日谈 第26天 SQL Server中存在真正的“事务嵌套”(sql server 错误),希望有所帮助,仅作参考,欢迎阅读内容。

SQL Server误区30日谈 第26天 SQL Server中存在真正的“事务嵌套”(sql server 错误)

文章相关热门搜索词:sql server常规错误,sql server报错,sql server 3417错误,sql server 错误,sql server233错误,sql server 错误,sql server 错误,sqlserver1053怎么解决,内容如对您有帮助,希望把文章链接给更多的朋友!

SQL Server误区日谈 第天 使用BACKUP WITH CHECKSUM可以替代DBCC CheckDB 误区#:使用BACKUP...WITHCHECKSUM可以替代DBCCCheckDB错误乍一看,由于BACKUPWITHCHECKSUM会检测所有分配出去的页的校验和的值,这个误区貌似是这么回事,但实

SQL Server误区日谈 第天 有关大容量事务日志恢复模式的误区 误区#:有关大容量事务日志恢复模式的几个误区a)常见的DML操作可以被最小记录日志不是。在大容量事务日志恢复模式下只有一小部分批量操作可以被

SQL Server误区日谈 第天 有关堆碎片的误区 误区#:可以通过对堆建聚集索引再DROP后进行堆上的碎片整理Nooooooooooooo!!!对堆建聚集索引再DROP在我看来是除了收缩数据库之外最2的事了。如果你通过sy

标签: sql server 错误

本文链接地址:https://www.jiuchutong.com/biancheng/347841.html 转载请保留说明!

上一篇:SQL Server误区30日谈 第25天 有关填充因子的误区(sql server错误和使用情况报告)

下一篇:SQL Server误区30日谈 第27天 使用BACKUP WITH CHECKSUM可以替代DBCC CheckDB(sql语句错误提示)

  • 医院怎么开发票
  • 汇票没到期可以撤回吗
  • 福利费是计提还是结转
  • 电子发票冲红后算金额吗?
  • 分公司亏损是否也分摊所得税
  • 资本公积什么时候做账
  • 房地产收到客户房款如何做账
  • 虚减利润如何进行账务调整?
  • 股票属于现金及股票吗
  • 小规模纳税人未申报怎么处理
  • 所得税汇算清缴后发现有误怎么办
  • 企业所得税怎么做
  • 仓储费用的增值税计入哪里
  • 减免附加税的账户有哪些
  • 外资企业所得税优惠政策
  • 合作社开具的免税普票计算抵扣
  • 公司员工餐费会计分录
  • 小微企业行业划分标准 工信部
  • 企业亏损可以不缴纳公积金吗
  • 代销的价格怎么定
  • 银行存款收款凭证属于什么凭证
  • 完成交易预付账怎么做账
  • 应收票据冲转是什么科目
  • mac怎么恢复出厂值
  • deepin如何
  • cpu资源占用高怎么办
  • 编译安装php7
  • ctrl起什么作用
  • 蓝桥杯等级
  • PHP:finfo_open()的用法_fileinfo函数
  • hbuilderx的使用视频
  • 低值易耗品是怎样的
  • 科研项目财政拨款多少
  • 生育津贴有什么补贴
  • wordpress 函数
  • 【深度学习】目标检测的性能评价指标,mAP_0.5,mAP_0.5,0.95,0.05
  • PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
  • 厂房维修费是制造费用还是管理费用
  • 老项目简易征收税务需要的资料有哪些
  • 回迁房会被收回吗
  • 深度学习的通道到底是什么?有什么用?(小白可看)
  • 实名办税人员承担什么责任
  • tomcat的安装配置
  • 融资租入固定资产的改建支出
  • 临时工交押金会扣钱吗
  • 员工辞退补偿金扣个税吗
  • 支付中间人佣金违法吗
  • 进项大于销项怎么办
  • T-SQL语句修改数据表属性
  • sql server 2008 r2数据库备份
  • sql server怎么恢复
  • 已开票未收到款怎么做账
  • 建筑工程机械设备租赁属于什么行业
  • 进出口代理的账务怎么做
  • 工程结算编制收费标准
  • 个人独资企业需要缴纳哪些税种
  • 企业固定电话费收费标准
  • 制造费用包括哪些部门
  • 票据行为的构成要件
  • 发票每月上报汇总怎么弄
  • 会计中的记账是什么意思
  • Python MySQL进行数据库表变更和查询
  • windows自带截图保存在哪里
  • 电脑总是关不了怎么办
  • window web
  • win8应用商店废了
  • 磁盘限制
  • win7升级win10系统版本软件还有吗
  • win7系统使用ituns设置iphone铃声图文教程
  • windows8安装itunes
  • shell脚本case语句判断成绩
  • js修改内容
  • Unity3D之Vector3.Dot和Vector3.Cross的使用
  • js会话
  • android开发遇到的技术难点
  • 提高税务干部七种能力的意义
  • 租车费为何不能抵扣
  • 开健身会所国家有补贴吗
  • 房地产契税2023年最新政策
  • 福建莆田社保局在哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设