热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SQLServer2005中的checksum功能说明

页面checksum是SQL2005的新功能,提供了一种比残缺页检测强大的机制检测IO方面的损坏。以下是详细描述:页面CHECKSUM:在数据库页面从被写入磁盘到被SQLServer读取的这段时间内,有可能由于外界原因发生损坏。比如IO设备的损坏,驱动的损坏或者由于电

页面 checksum 是SQL2005的新功能,提供了一种比残缺页检测强大的机制检测IO方面的损坏。以下是详细描述: 页面 CHECKSUM: 在数据库页面从被写入磁盘到被SQL Server读取的这段时间内,有可能由于外界原因发生损坏。比如I/O设备的损坏,驱动的损坏或者由于电

页面 checksum 是SQL2005的新功能,提供了一种比残缺页检测强大的机制检测IO方面的损坏。以下是详细描述:

页面 CHECKSUM:

在页面从被写入磁盘到被SQL Server读取的这段时间内,有可能由于外界原因发生损坏。比如I/O设备的损坏,驱动的损坏或者由于电源不稳没有写完整。Checksum机制使SQL Server可以检测到这些损坏。需要注意的是,Checksum机制只能使我们确定是不是I/O子系统引起页面损坏,但是不能自动修复它们。作为管理员,我们可以利用这些信息来辨识出并更换损坏的I/O设备,也可以利用重建索引或者修复损坏文件等方法修复已发生的页面损坏。

Checksum功能可以由Alter Database命令在数据库上逐个开启和关闭每一个数据库上的。当开启Checksum时,SQL Server会在页面被写入和被读取的时候计算页面的Checksum。SQL Server基于页面上的位模式计算Checksum,储存在页头部,然后发一个I/O来写页面。SQL Server在读取页面时用相同的方法再计算一次checksum,并与储存在页面头的checksum值进行比较。如果结果相同则说明在读写周期内页面没有损坏。计算checksum的算法是复杂的,因为会涉及到多个页面的读写,增加CPU的负荷,可能会影响系统的吞吐量。此外,checksum不是与页面位模式一一对应的,不同页面也有可能有相同的checksum值,所以有极小的可能性事页面损坏检查不出来。

我们对以下几种情况特别做一些说明:

数据库创建一段时间后才开启checksum

只有在开启checksum功能后每次写页面时才会计算checksum,读取页面时才会重新计算。如果数据库创建之初没有开启Checksum,会有一些页没有记录下checksum。当读取这些页面时SQL Server不会计算checksum,因为没有可以用来比较的checksum,计算就没有意义。目前没有命令或工具强制计算数据库所有页面的checksum。这样做并没有太大的好处。试想,当数据页面已经被破坏时,我们只能计算损坏的checksum,而不知道正常情况下的checksum,损坏也无从检测。当然,如果有这样的命令或工具存在,我们就能检测到由于位损坏(如一个有效的页在被写入到磁盘后发生损坏)引起的页面损坏,或者在数据库文件被转移或者复制到其他媒介的时检测到损坏了。

停止checksum功能

当不希望checksum消耗CPU资源或者确信I/O系统可靠的时候,您可以停止Checksum功能。停止后,不再计算和记录checksum值。这种情况下, SQL Server就可能受到外界造成的页面损坏,一个检测不到的损坏可能导致:

o 数据丢失,除非运行全备份恢复(前提是日志备份没有被破坏)

o 潜在的应用程序异常,特别是在损坏没有改变页面结构而只是改变了某些数据时。

o 降低数据库的可用性,因为必须要执行介质恢复来修正损坏。

如何验证数据库所有页的checksum

使用DBCC CHECKDB命令,最好加上PHYSICAL_ONLY参数以降低资源的消耗。

数据库开启残缺页(torn page)检测

数据库的Checksum检测和残缺页检测不能同时开启。因为checksum机制对于页面损坏的验证比残缺页更严格,而产生checksum匹配但是页面残缺的可能性极小,所以开启checksum相当于自动获取残缺页检测。如果您关闭了页面的checksum功能,那我们建议您开启残缺页检测,用较小的代价尽可能检测I/O子系统异常。

备份checksum

备份checksum和页面checksum算法一样,每当页面做备份时计算checksum,只不过多个页面checksum的值将合并成一个备份checksum值。备份checksum储存在备份媒介,而不是页面中。备份期间您可以选择生成备份checksum用于恢复备份时检测备份时候损坏。另外,如果页面checksum可用,可以在备份和恢复过程中用于确认。

推荐阅读
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 本文总结了优化代码可读性的核心原则与技巧,通过合理的变量命名、函数和对象的结构化组织,以及遵循一致性等方法,帮助开发者编写更易读、维护性更高的代码。 ... [详细]
  • 本文详细介绍了Hive中用于日期和字符串相互转换的多种函数,包括从时间戳到日期格式的转换、日期到时间戳的转换,以及如何处理不同格式的日期字符串。通过这些函数,用户可以轻松实现日期和字符串之间的灵活转换,满足数据处理中的各种需求。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • 本文详细介绍了PHP中的多条件分支结构,包括if、elseif和else语句的使用方法。通过具体示例,解释了如何根据不同的条件执行相应的代码块,并确保每个条件只能触发一次。 ... [详细]
  • 本文介绍了如何在 C# 和 XNA 框架中实现一个自定义的 3x3 矩阵类(MMatrix33),旨在深入理解矩阵运算及其应用场景。该类参考了 AS3 Starling 和其他相关资源,以确保算法的准确性和高效性。 ... [详细]
  • 本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 深入解析RDMA中的队列对(Queue Pair)
    本文将详细探讨RDMA架构中的关键组件——队列对(Queue Pair,简称QP),包括其基本概念、硬件与软件实现、QPC的作用、QPN的分配机制以及用户接口和状态机。通过这些内容,读者可以更全面地理解QP在RDMA通信中的重要性和工作原理。 ... [详细]
  • 本文介绍了一种基于选择排序思想的高效排序方法——堆排序。通过使用堆数据结构,堆排序能够在每次查找最大元素时显著提高效率。文章详细描述了堆排序的工作原理,并提供了完整的C语言代码实现。 ... [详细]
author-avatar
花都色魔l文龙l_419
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有