临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

数据库损坏(SQLServer数据库损坏检测以及简单的修复办

6月10日 不将就投稿
  数据库损坏(SQLServer数据库损坏、检测以及简单的修复办法)
  在一个理想的世界中,不会存在任何数据库的损坏,就像我们不会将一些严重意外情况列入我们生活中的日常一样,而一旦这类事情发生,一定会对我们的生活造成非常显著的影响,在SQLServer中也同样如此,或许几年内您没有遇见过数据库中出现这类情况,而一旦遇见这类情况,往往伴随着数据的丢失,宕机,严重甚至您本身的职业生涯也会受到影响。因此对于这类情况,我们需要了解数据库损坏方面的知识,以便我们能够事前准备,事后能够处理。本篇文章会对数据库损坏的原因、现象、事前和事后的一些处理方法以及简单的修复方法进行探讨。
  数据库为什么会损坏?
  在了解数据库损坏之前,首先我们要了解SQLServer是如何将数据保存到数据文件(MDF、NDF等)。无论更新还是插入数据,数据都需要首先在内存中的BufferPool驻留,然后通过CheckPoint和LazyWriter等过程将内存中的数据持久化到磁盘。在这个过程中,数据脏页由内存写入持久化的IO子系统,在此期间,按照IO子系统的不同,数据可能经过这几层:
  Windows(写数据一定调用的是WINDOWSAPI)
  Windows底层的中间层(杀毒软件,磁盘加密系统)
  网卡、路由器、交换机、光钎、网线等(如果IO子系统不是直连的话)
  SAN控制器(如果使用了SAN)
  RAID控制器(IO子系统做了RAID)
  磁盘或SSD等持久化存储器
  因此,数据页被写入持久化存储期间,可能经过上述列表中的几项。在经历上述过程中,硬件环境会受到很多方面的影响,比如说电压是否稳定、断电、温度过高或过低、潮湿程度等,而软件方面,由于软件都是人写的,因此就可能存在BUG,这些都可能导致数据页在传输过程中出现错误。
  此外,影响磁盘的因素也包括电压是否稳定、灰尘等因素,这些也有可能引起磁盘坏道或整体损坏。
  上面提到的所有因素都可以被归结为IO子系统。因此,造成数据损坏的情况绝大部分是由IO子系统引起的,还有非常非常小的概率内存芯片也会导致数据页损坏,但这部分情况微乎其微,因此不在本文的讨论之列。
  上面提到的这些导致数据损坏的原因都属于天灾,还有一些人祸。比如说通过编辑器等手动编辑数据文件、数据库中还有需要Redo和Undo的事务时(也就是没有CleanShutdown)删除了日志文件(通常会导致数据库质疑)。
  发现数据库损坏
  在我们知道可能造成数据库的损坏原因之后,接下来我们来看SQLServer是如何监测数据库页损坏的。
  在SQLServer的数据库级别,可以设置页保护类型,一共有三个选项:None,CheckSum,TornPageDetection,如图1所示:
  图1。页保护的三种选项
  关于这三种选项,首先,请无视None,请不要在任何场景下选择该选项,该选项意味着SQLServer不对页进行保护。
  其次是TORNPAGEDETECTION,在SQLServer中,数据的最小单位是页,每一页是8K,但是对应磁盘上往往是16个512字节的扇区,如果一个页在写入持久化存储的过程中,只写了一半的页,这就是所谓的TORNPAGEDETECTION,SQLServer通过每个扇区提512字节中前2位作为元数据,总共16个扇区32位4字节的元数据(页头中标识为:mtornBits),通过该元数据来检测是否存在部分写的TORNPAGE,但该类型的页验证无法检测出页中的写入错误,因此在SQLServer2005及以上版本,尽量选择CheckSum。
  在SQLServer2005及以上版本,引入了CheckSum,CheckSum可以理解为校验和,当数据页被写入持久化存储时,会根据页的值计算出一个4字节的CheckSum存于页头(页头中标识同为:mtornBits),和数据在同一页中一起保存在数据库中。当数据从IO子系统被读取到内存中时,SQLServer会根据页内的值再次计算CheckSum,用该重新计算的CheckSum和页头中存储的CheckSum进行比对,如果比对失败,则SQLServer就会认为该页被损坏。
  由CheckSum的过程可以看出,只有在页被写入SQLServer的过程中才会计算CheckSum,因此如果仅仅改变数据库选项的话,则页头中的该元数据并不会随之改变。
  与IO相关的三种错误
  通过上述CheckSum的原理可以看出,SQLServer可以检测出页损坏,此时,具体的表现形式可能为下述三种错误的一种:
  823错误,也就是所谓的硬IO错误,可以理解为SQLServer希望读取页,而Windows告诉SQLServer,无法读取到该页。
  824错误,也就是所谓的软IO错误,可以理解为SQLServer已经读取到该页,但通过计算CheckSum等值发现不匹配,因此SQLServer认为该页已经被损坏。
  825错误,也就是所谓Retry错误。
  其中,上述823和824错误都是错误等级为24的严重错误,因此会被记录在Windows应用程序日志和SQLServer的错误日志中,而引起该错误的页会被记录在msdb。dbo。suspectpages中。SQLServer错误日志中也会记录到出错页的编号,如图2所示。
  图2。824错误在SQLServer错误记录中的描述
  因此,如果我们存在完善的备份的话,我们可以通过备份进行页还原(在此再次强调一下对于DBA来说,有备无患),一个简单的页还原代码如代码清单1所示。USE〔master〕RESTOREDATABASE〔CorruptDB〕PAGE39;1:15539;FROMDISKN39;C:xxx。bak39;WITHFILE1,NORECOVERY,NOUNLOAD,STATS5
  代码清单1。一个简单的页还原代码,从备份中还原文件ID1中的第155页
  记得我们前面说的,在读取页计算校验和时出错,这既可能是被写入持久化存储的页本身出错,也可能是在页被读取的过程中出错,此时SQLServer会尝试从IO子系统中再次读取该页,最多可能是4次尝试,如果在4次尝试过程中校验和通过,则会是825错误,否则是824错误。这里要注意,与823和824错误不同的是,825错误是一个等级仅为10的信息。
  因此,由于有固定的错误编号,因此可以在SQLServerAgent中对823和824设置警报。
  备份CheckSum
  上述页CheckSum只有在页被使用时才会被校验页的正确性。在备份数据库时,可以指定CheckSum选项来使得备份读取的页也计算校验和,从而保证了被备份的数据库是没有损坏的。在图3的备份选项我们可以注意到这两条:
  图3。CheckSum和ContinueAfterError选项
  如果启用了CheckSum,当备份过程中发现了页校验和错误时,就会终止备份,而启用了ContinueAfterError选项的话,在检测到校验和错误时,仍然继续从而使得备份成功。
  备份如果启用了CheckSum选项,除去检测每一页的校验和之外,还会在备份完成后,对整个备份计算校验和并存储于备份头中。
  此外,对于备份,我们还可以通过RestoreVerifyonlywithCheckSum来验证备份,来保证备份的数据没有被损坏。
  DBCCCheckDB
  前面提到SQLServer发现错误的方法有两种,分别为在读取页时和在备份时(本质上也是读取页)。但如果我们希望对于数据一致性的检查更加的激进,那我们应该定期使用CheckDB来检查数据的一致性,而不至于在生产时间数据被读取时才能发现错误。
  CheckDB命令会对整个数据库做所有的一致性检查。当检查对象是Master数据库时,CheckDB还会检查ResourceDB。
  CheckDB最简单的用法如代码清单2所示,在当前数据库上下文中直接执行CheckDB,将会检查当前数据库中所有的一切。DBCCCHECKDB
  代码清单2。CheckDB最简单的用法
  CheckDB命令在企业版中会使用多线程来进行,会对整个数据库进行一致性检查,在该过程中,使用了内建数据库快照的方式进行,因此不会造成阻塞,但CheckDB会消耗大量的CPU、内存和IO。因此CheckDB要选择在维护窗口时间或是系统闲时进行。
  默认情况下,CheckDB命令会将输出所有的信息,但通常我们并不关心这些信息,而是只关心错误信息,因此实际中通常给DBCC指定不显式信息的参数,如代码清单3所示。DBCCCHECKDBWITHNOINFOMSGS;
  代码清单3。CheckDB通常搭配NoInfoMsgs参数
  实际上,CheckDB是一套命令的汇总,CheckDB会依次检查下述内容:
  初次检查系统表
  分配单元检查(DBCCCHECKALLOC)
  完整检查系统表
  对所有表进行一致性逻辑检查(DBCCCHECKTABLE)
  元数据检查(DBCCCHECKCATALOG)
  SSB检查
  索引视图、XML索引等检查
  首先,当发现系统表损坏时,只能通过备份进行恢复(这也是为什么备份除TempDB之外的系统表非常重要)。其次,在一个大数据库中,做一次CheckDB时间会非常长,维护窗口时间或系统闲时的时间可能无法Cover这段时间,那么我们可以将CheckDB的任务分散到CHECKALLOC、DBCCCHECKTABLE、DBCCCHECKCATALOG这三个命令中。
  更多关于CheckDB的详细信息,请参阅:http:technet。microsoft。comenuslibraryms176064。aspx。
  数据库损坏的修复
  数据库损坏最行之有效的办法就是存在冗余数据,使用冗余数据进行恢复。所谓的冗余数据包括热备、冷备、和暖备。
  使用镜像或可用性组作为热备,当检测到错误时,可以自动进行页修复(镜像要求2008以上,可用性组是2012的功能)。镜像当主体服务器遭遇824错误时,会向镜像服务器发送请求,将损坏的页由镜像复制到主体解决该问题。对于可用性组,如果数据页是在主副本上发现的,则主副本将会向所有辅助副本发送广播,并由第一个响应的辅助副本的页来修复页错误,如果错误出现在只读辅助副本,则会向主副本请求对应的页来修复错误。在这里有一点值得注意的是,无论是哪一种高可用性技术,都不会将页错误散播到冗余数据中,因为SQLServer中所有的高可用性技术都是基于日志,而不是数据页。
  其次是使用暖备或冷备来还原页,我已经在代码清单1中给出了详细的代码,这里就不细说了。
  如果没有合适的备份存在,如果损坏的数据页是存在于非聚集索引上,那么你很幸运,只需要将索引禁用后重建即可。
  如果存在基准的完整备份,并且日志链没有断裂(包括差异备份可以Cover日志缺失的部分),则可以通过备份尾端日之后还原数据库来进行修复。
  最后,如果基础工作做的并不好,您可能就需要通过损失数据的方式来换回数据库的一致性,我们可以通过DBCCCheckDB命令的REPAIRALLOWDATALOSS来修复数据库。使用该方法可能导致数据损失,也可能不会导致数据损失,但大部分情况都会通过删除数据来修复一致性。使用REPAIRALLOWDATALOSS需要将数据库设置为单用户模式,这意味着宕机时间。
  无论是哪种情况修复数据库,都要考虑是否满足SLA,如果出现了问题之后,发现无论用哪种方式都无法满足SLA的话,那只能检讨之前的准备工作并祈祷你不会因此丢了工作。
投诉 评论 转载

生活知识科普江西特产有哪些在我们的生活当中有很多的常识性的知识大多数人都是不知道的,就好比最近就有很多小伙伴咨询小编问小编关于江西特产有哪些的这些知识点,这就说明了现在人们也开开渐渐关注起了江西特产有哪……数据库损坏(SQLServer数据库损坏检测以及简单的修复办数据库损坏(SQLServer数据库损坏、检测以及简单的修复办法)在一个理想的世界中,不会存在任何数据库的损坏,就像我们不会将一些严重意外情况列入我们生活中的日常一样,而……除疤产品(七款性价比超高的祛疤药膏)除疤产品(七款性价比超高的祛疤药膏)对于祛疤膏我简直是最有发言权的了,疤痕体质霉运体质一身烂疤!一直在祛疤的路上摸爬滚打,也算是颇有研究了,尝试过各种各样的祛疤膏,……毕业论文陈述(论文陈述如何写?)毕业论文陈述(论文陈述如何写?)什么是论文陈述论文陈述要求陈述论文的主题和目的。一个好的论文陈述将指导你写论文的结构,并使读者理解你将在论文中讨论的观点。论文……芙蓉出水形态(清水出芙蓉的艺术境界!)芙蓉出水形态(清水出芙蓉的艺术境界!)清水出芙蓉,天然去雕飾。艺术之美是有内涵的。其内涵在于吻合了艺术美学的景,情交融,情与景会。景为清水。清水是芙蓉所处之背景,自……手机使用电脑网络(手机怎么连接电脑上网)手机使用电脑网络(手机怎么连接电脑上网)我们现在上网越来越方便了,无论是移动还是联通的无线网络都已经覆盖了很多的地区,我们的电脑可以随时随地的进行上网。当我们的电脑已经连……查手机话费(如何查询话费余额?)查手机话费(如何查询话费余额?)用短信的方式查询,操作步骤如下:萊垍頭條1、打开手机中的短信标识。頭條萊垍2、列表中选择中国移动(注意号码是10086,没有就……生活知识科普脱脂牛奶和全脂牛奶的区别在我们的生活当中有很多的常识性的知识大多数人都是不知道的,就好比最近就有很多小伙伴咨询小编问小编关于脱脂牛奶和全脂牛奶的区别的这些知识点,这就说明了现在人们也开开渐渐关注起了脱……2寸(二寸照片到底有多大)2寸(二寸照片到底有多大)生活、工作、学习中我们常常会被要求提供各种尺寸的证件照一寸照、二寸照、小二寸、大一寸。。。。。。那你知不知道他们到底有多大?……20个元音音标(英语音标88分好资料)20个元音音标(英语音标88分好资料)本文是干货资料,大家耐心看完。想学英语音标的网友,下面的音标卡片,都取材于(下方)我讲的《英语音标课》,有3600位英语爱好者……中美文化差异(中美文化差异有多大)中美文化差异(中美文化差异有多大)简单的翻阅美国历史可以得知,这个国家实际是由西班牙、荷兰、法国、英国等国家移民组成,18世纪时英国还在现今美国大西洋海岸线建立了13个北……科学计算器使用方法(电脑自带的科学计算器怎么使用?)科学计算器使用方法(电脑自带的科学计算器怎么使用?)电脑是一个强大的工具,所以大家要充分利用,下面小编就为大家详细介绍电脑自带的科学计算器怎么使用方法,不会的朋友可以参考……
微信好友定位精确定位免费(微信好友定位精确定位)微信聊天记录无故消失(微信聊天记录无故)日常知识白莲花是什么意思不懂球的胖子(不懂球的)打不出汉字怎么办(电脑输入法不能打出中文解决)白帝城位于什么地方(白帝城位于什么)房屋常识套内面积怎么算具体有公式吗生活知识科普去毛球器怎么打开飞夺泸定桥教学设计(敌人为啥只拆木板不毁桥)哑铃卧推(哑铃的正确锻炼方法)倾国倾城是什么意思(诠释倾国倾城)生辰八字起名字大全(五行八字起名大全)国足世预赛生死战,一人主力大概率被拿下!代替人选已浮出水面皮肤出问题?食疗来帮忙理发记沐浴露用多了会致癌吗护肤品热卖排行榜10强(热门护肤品排行榜前10名)死神千烟(7)选正确的绩效技术指标白芸豆瘦身夜间版效果好不好?招吃海鲜保鲜去腥营养更美味钉钉APP如何办理企业健康码?宝妈们宝宝抱抱也是有变化的简施聘之

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找