数据库备份checksum选项你会用么?

   SQL SERVER有好多好多功能,选项也一大堆,很多功能选项并不常用。但是如果真有这种需求的时候又想不起来~

   本篇我们就来聊聊备份里的选项checksum,这是个啥玩意?听都没听过?来看下图:

   

   就是这个选项!不知道各位看官是否知道是干什么的?怎么用? 我询问了几个群友都没用过,正好手头有环境,那么我就用例子给大家演示一下吧!

--------------博客地址---------------------------------------------------------------------------------------

Expert 诊断优化系列 http://www.cnblogs.com/double-K/

 

废话不多说,直接开整-----------------------------------------------------------------------------------------

  首先我们看一下微软官方文档给的说明:

错误管理选项

使用这些选项可以确定是否为备份操作启用了备份校验和,以及备份操作是否将在遇到错误时停止。

{ NO_CHECKSUM | CHECKSUM }
控制是否启用备份校验和。

NO_CHECKSUM
显式禁用备份校验和的生成(以及页校验和的验证)。 这是默认行为。

CHECKSUM
如果此选项已启用并且可用,则指定备份操作将验证每页的校验和及页残缺,并生成整个备份的校验和。

使用备份校验和可能会影响工作负荷以及备份吞吐量。

  这也许是大多数人的了解“启用了备份校验和,备份操作将在遇到错误时停止”,因为看过官方文档知道怎么用,手头正好有坏库,正好做个示范~

  我们先看一下DBCC CHECKDB的结果 ,目的只是告诉你这是一个有坏页的数据库!

  

  好了,那我们做一下备份看看!

  正常的备份,不加 checksum 成功备份!

  

  

  加上checksum备份,失败!

  

  好像果然和微软文档说的一样!看到这有些看官会想,这不和我做CHECKDB差不多了么?

  

  博主别的不多就是坏库多! 我们再拿一个库试一下!

  我们先看一下DBCC CHECKDB的结果 ,目的只是告诉你也这是一个有坏页的数据库!

  

  我们用checksum 备份一下

  

   哦??成功了???这是啥意思??

   我们先来看一下 backupset的结果 :

   

   那么损坏的页没check出来?我们再看一下 suspect_pages

   

   

    suspect_pages里只查出了Test 库的坏页,那我XB28_3库的坏页哪里去了?

    突然想到 suspect_pages 里面的数据只是 823 错误或 824 错误而失败的页!

    而且使用checksum系统表会被漏掉,本文中XB28_3库的坏页就是一个object_id = 60的 系统表!

     而且并不是数据库中所有的页都会被叫上页校验和,当页损坏发生时,IO系统可不会区分损坏的页是有页校验和还是没有校验和的。所以使用BACKUP ... WITH CHECKSUM就有可能导致一些损坏页不被发现

  

    这也说明备份时使用checksum不能完全取代DBCC checkDB的作用,这和Paul Randal大神的文章一致 : A SQL Server DBA myth a day: (27/30) use BACKUP WITH CHECKSUM to replace DBCC CHECKDB

--------------博客地址---------------------------------------------------------------------------------------

Expert 诊断优化系列 http://www.cnblogs.com/double-K/

 

-----------------------------------------------------------------------------------------------------

  

  总结 :备份的checksum 选项可以用来发现数据库是否损坏,但不是所有类型的坏页都可以发现。

      看官们的疑问:backup with checksum 可以用来取代DBCC checkDB。

     这个观点是不正确的,一些逻辑一致性错误checksum是没法发现的!

        

     数据库损坏不是很常见,很多DBA工作好多年都没有遇到,但是做好CHECKDB检查还是很必要的!万一出现你没有发现就比较悲剧了!

  

  PS : 差异备份也可以使用checksum,但只会校验差异部分~

----------------------------------------------------------------------------------------------------

注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!
若您觉得这篇文章还不错请点击下右下角的推荐,非常感谢!

时间: 2024-08-09 14:44:47

数据库备份checksum选项你会用么?的相关文章

数据库备份那点事儿

写在前面 最近一直在整理数据库最佳实践的东西,我也会将各种文章建议,同步到博客园,希望能够帮助更多的人了解数据库,轻松玩转数据库,同时也减轻运维人员的工作压力,毕竟熟能生巧,熟练既是效率. 数据库备份老生常谈的话题,一搜索数据库备份可能上千上万篇,那么为什么还要写一篇?因为重要!而往往却不能引起运维人员的重视.上周还帮助一个客户恢复了数据,原因是断电,启动服务器后发现磁盘损坏,重要的系统页大面积损坏.使用常规数据库恢复手段全无用,使用第三方恢复工具也只能恢复部分数据,根本无法满足业务的正常运转,

SQL SERVER 运维日记-数据库备份

概述 昨天下午突然看到,<炉石传说>游戏数据库发生宕机并引发数据丢失事故的新闻.刚看到时,满满的不可思议.暴雪啊,网易啊. 都是很牛叉的公司.他们出的游戏我都是很喜欢的. 当我看到,第一时间着手抢修,重启服务器,并尝试数据恢复时,我的想法是他们的高可用方案呢?为什么不马上切换? 当我看到相关备份数据库也出现故障时,就更无语了.其实这样的事情在我们的客户每年都会遇到很多.前不久就有一个医院, 数据库和备份都同时损坏,而且没有高可用的方案. 虽然最终帮他们修复了好数据库,但还是丢失部分数据,而且中

xtrabackup进行MySQL数据库备份/还原

http://hongge.blog.51cto.com/ 使用xtrabackup进行MySQL数据库备份 前面介绍mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用mysqldump备份就不太适合了. 这时就需要一种好用又高效的工具,xtrabackup就是其中一款,号称免费版的InnoDB HotBackup. Xtrabackup实现是物理备份,而且是物理热备 目前主流的有两个工

backup1:开始数据库备份

数据库备份分为数据文件备份和日志文件备份,数据文件的备份分为:完整备份和差异备份.在SQL Server 2012中,能够将数据分布式备份到不同的存储设备上,一般情况,只将数据备份到一个备份文件(.bak)中,只有在备份超大的数据库时,才需要分布式备份. 数据库备份的策略一般是:一周一次完整备份,一天一次差异备份,一小时一次事务日志备份,根据数据容灾的要求,适当增减备份的时间间隔. 为了便于管理数据备份文件,推荐的做法是: 数据/日志的每次备份都使用一个单独的备份文件,数据备份的扩展名是 .ba

mssql server 2005还原数据库bak文件与“备份集中的数据库备份与现有的xx数据库不同”解决方法

mssql server 2005还原数据库bak文件,网站使用虚拟主机建站会经常遇到,一般情况下,主机商有在线的管理程序,但有时候没有的话,就需要本地还原备份sql数据库了.这种情况mssql server 2008也同样会出现,有时候会出现“备份集中的数据库备份与现有的xx数据库不同”的错误提示,本文也一并把解决方法说道说道. 第一部分,mssql server 2005(2008)还原数据库bak文件. 一.连接上数据库,右键数据库,选择新建数据库,输入你要还原数据库的名称. 二.确定后右

MySQL几种方法的数据库备份

MySQL有几个方法来备份 最近博客一直想写点.可是不知道写什么,感觉自己近期的知识没有什么添加,今天想到了一篇能够写的博客.曾经试过依据data目录备份MySQL.可是从来没有成功过.前几天帮助朋友还原MySQL,最终成功的将备份的data目录还原成功了. MySQL数据库算是经常使用的数据库中最好使用的数据库了,对于备份的操作也不例外. 所以今天分享一下MySQL数据库的备份的几种方式. 方式一:使用命令行的方式. 命令行的方式较为快捷.仅仅须要在命令行中使用mysqldump命令就可以,默

使用exp&amp;imp工具进行数据库备份及恢复

使用exp&imp工具进行数据库备份及恢复1.exp/imp使用方法介绍exp/imp为一种数据库备份恢复工具,也可以作为不同数据库之间传递数据的工具,两个数据库所在的操作系统可以不同.exp可以将数据库数据导出为二进制文件,imp可以将导出的数据文件再导入到相同的数据库或不同的数据库.数据库导出有四种模式:full(全库导出).owner(用户导出).table(表导出).tablespace(表空间导出).full(全库导出):导出除ORDSYS.MDSYS.CTXSYS.ORDPLUGIN

使用LVM快照进行数据库备份

使用mysqldump备份时,如果存储引擎为MyISAM,则只能实现温备份,并需使用选项--lock-all-tables锁定所有表.如果存储引擎为InnoDB,则加上--single-transaction选项,可以实现热备.使用mysqldump进行逻辑备份,还存在如下问题:浮点数据丢失精度: 备份出的数据更占用空间:不过可压缩后以大大节省空间 不适合对大数据库(如一个库超过10G)做完全备份 另外对InnoDB而言,需要使用mysql> FLUSH TABLES WITH READ LOC

SQL Server 数据库备份与还原

1.相同SQL Server版本(2008为例)之间数据库备份与还原 (1)数据库备份 相同SQL Server服务器版本之间数据库的备份还原操作相对来说比较简单. 首先找到需要备份的数据库实例,[右键]->[任务]->[备份...],界面下边选择备份路径,点击确定,备份成功后即可在选择的备份路径下找到后缀名为.bak的备份文件. (2)数据库还原 对于需要还原的.bak数据库文件,一般会先拷贝到 C:\Program Files\Microsoft SQL Server\MSSQL10.MS