Alter database Set Single_User

对于任何DBA来说,恐怕都不陌生。在我们需要获取数据库独占访问权来做一些数据库紧急维护的时候,这可能是大多数DBA的首选,但它真的可以实现“独占访问权”吗?

这次我们聊聊Single_User是如何刷新我们认知的

=============================================华丽丽的分割线=============================================

实验目的:测试Single_User模式下是否可以拿到独占权并为所欲为。

照例交代一下我们的环境:Windows 10 + SQL Server 2019,实际上本次实验的结果基本上是覆盖SQL Server全部版本的

并发测试工具:SQLQueryStress(0.9.7.79)

我们先看一下在单用户模式下,持有锁的情况

从上图可以看到,在成功置为Single_User模式后,我们拥有了一个执行Session(id=60)上,DB级别的S锁

这时,我们开启SQLQueryStress,设置查询语句,并发线程数为2,迭代5000次

再次查询持有锁的情况

Session 71、72是我们压力测试工具设置2个线程产生的,可以看到,除了持有S锁外,他们各自还正在申请X锁,只是相互等待而形成了死锁

由上图可以看到,XEvents中存在大量死锁信息,且下图可以看到死锁的细节信息,由Session 71、72导致

此时,当我们再次准备从Session 60中执行语句,将数据库置为Multi_User时,错误发生了:

Session 60也被死锁牺牲了。由此看来,我们并没有真正的获取数据库的“独占访问权”

=============================================华丽丽的分割线=============================================

分析 & 结论:

1、将数据库置为单用户模式在我们长期的认知中,都是绝对的“独占访问权”。但实际上,在有并发+连续访问的情况下,我们仍有可能因外部访问的死锁而丢掉这个“独占访问权”

2、进一步分析,从将数据库置为单用户模式的时候,数据库系统没有直接将Session的锁级别提升至最高(个人理解,从Alter Database触发的动作,置为SCH-X都不为过),而是温和的放置了DB级的S锁,同时对其他访问相同数据库的请求则要求申请X锁,这就导致了,当外部请求访问数据库时,先放置DB级S锁(这里和Single User Session 的DB级S锁且兼容),而后因为要申请X锁,所以和其他访问同样数据库的请求达成了死锁条件。

3、如果在应急处置中仍需要将DB置为Single User模式,建议停掉外部访问(停账号,修改实例端口号,关闭TCP\IP,禁用外部访问网卡,或者修改数据库名称),以免无法置回Multi User模式。

迷之自信的Single_User Mode的更多相关文章

  1. 关于我的OI生涯(AFO){NOIP2016 后}

    这篇我就随意写啦~不用统一的“题解”形式.♪(^∀^●)ノ 也分好几次慢慢更吧~ 对于NOIP2016的总结,我本想善始善终back回,但是心情不足以支撑我,那就只能有始有终了......下面进入我的 ...

  2. 并查集(union-find set)与Kruskal算法

    并查集 并查集处理的是集合之间的关系,即‘union' , 'find' .在这种数据类型中,N个不同元素被分成若干个组,每组是一个集合,这种集合叫做分离集合.并查集支持查找一个元素所属的集合和两个元 ...

  3. Grapher--寂寞无名的神器

    承自上一篇中的函数图形,有人问,能不能别把画个图搞那么复杂,我说当然,只要你有一台mac. 话说出来很潇洒的样子,充斥着一股迷之自信. 可能这就是mac用户典型的特征,尽管也许并没有那么值得骄傲. 其 ...

  4. Struts hibernate Spring 框架原理

    转自:http://www.cnblogs.com/javaNewegg/archive/2011/08/28/2156521.html 原理:1.通过Configuration().configur ...

  5. 《剑指offer》面试题39 二叉树的深度(java)

    摘要: 今天翻到了<剑指offer>面试题39,题目二中的解法二是在函数的参数列表中通过指针的方式进行传值,而java是没有指针的,所以函数要进行改造.然而我翻了下别人的java版本(我就 ...

  6. Bzoj4763 雪辉

    Time Limit: 39 Sec  Memory Limit: 666 MBSubmit: 151  Solved: 80 Description 上次立下的NOIP退役Flag没有成功   这次 ...

  7. 九月回顾 这篇文章和ACM毫无关系= =

    其实不只是九月的回顾吧,我大概想把暑假到现在10.01发生的啥事儿都说下吧~ 嗯,我是一个比较沙茶的人,不过运气比较好吧. 高中啊,这个谈起来话就长了,在校什么风采之星大赛上,我认识了个妹子,当时感觉 ...

  8. COGS727 [网络流24题] 太空飞行计划

    [问题描述] W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪 ...

  9. MongoDB的一些操作技巧

    去年三月底入职上海的一家互联网公司,由于项目使用的是MongoDB数据库所以有机会接触了MongoDB.在项目的开发过程中使用系统原有的一些方法查询MongoDB感觉很费力,用起来也不爽,所以私下里就 ...

随机推荐

  1. day02 java学习

    Java三大版本 Write once,Run anywhere. (基于JVM虚拟机) JavaSE 标准版 JavaME 嵌入式开发 JavaEE 企业级开发 Java三大名词 JDK Java开 ...

  2. python之爬虫(十一) 实例爬取上海高级人民法院网开庭公告数据

    通过前面的文章已经学习了基本的爬虫知识,通过这个例子进行一下练习,毕竟前面文章的知识点只是一个 一个单独的散知识点,需要通过实际的例子进行融合 分析网站 其实爬虫最重要的是前面的分析网站,只有对要爬取 ...

  3. 【JVM】或许,这就是二进制Class吧

    水稻:看你研究盯着这个文档一天了,什么玩意让人心驰神往 菜瓜:前几天意外得到一本武功秘籍<jvms8>,看起来就情不自禁 水稻:这不是Java虚拟机的说明文档吗<PS:投来惊吓的目光 ...

  4. bzoj3446[Usaco2014 Feb]Cow Decathlon*

    bzoj3446[Usaco2014 Feb]Cow Decathlon 题意: FJ有n头奶牛.FJ提供n种不同的技能供奶牛们学习,每头奶牛只能学习一门技能,每门技能都要有奶牛学习. 第i头奶牛学习 ...

  5. bzoj3858Number Transformation*

    bzoj3858Number Transformation 题意: 给一个数n,对其进行k次变换,第i次变换是将当前的n变成大于等于n的最小的i的倍数.求k次变换后n为多少.n≤10^10,k≤10^ ...

  6. iis 0x80070032 Cannot read configuration file because it exceeds the maximum file size

    问题:iis部署了网站,由于webconfig文件过大(251kb,默认250kb)导致网站报错 0x80070032 Cannot read configuration file because i ...

  7. Ethical Hacking - NETWORK PENETRATION TESTING(19)

    MITM-DNS Spoofing DNS Spoofing allows us to redirect any request to a certain domain to another doma ...

  8. RocketMQ在面试中那些常见问题及答案+汇总

    0.汇总 RocketMQ入门到入土(一)新手也能看懂的原理和实战! RocketMQ入门到入土(二)事务消息&顺序消息 从入门到入土(三)RocketMQ 怎么保证的消息不丢失? Rocke ...

  9. CAS底层原理与ABA问题

    CAS定义 CAS(Compare And Swap)是一种无锁算法.CAS算法是乐观锁的一种实现.CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B.当预期值A和内存值V相同时,将内存值V修 ...

  10. Vue全家桶之一Vue(基础知识篇)

    全家桶:Vue本身.状态管理.路由.   异步组件: