SQL Server如何校验备份文件

转自:https://blog.csdn.net/tjvictor/article/details/5261666
RESTORE VERIFYONLY与 checksum

  你遇到的最糟糕的事莫过于备份文件无法还原数据库了。我这里并不是说缺少磁盘空间或者类似的事导致的无法还原,而是一个100%确认已经被损坏的备份文件。你会问,那我怎么办呢?别着急,SQL Server有一个完善的还原功能来验证备份文件。

举个例子,当你第一次创建了一个备份文件,它应该是好的,但这仅仅是“应该”。每一次,这个文件被拷贝到另一个地方时,文件就会存在被损坏的风险。确认这个备份文件可以继续使用的最好的方法就是还原它,然后立即运行DBCC CHECKDB。如果当时条件不允许持续还原和检查,那么使用RESTORE VERIFYONLY命令就是你另一个最好的选择了。

不幸的是,这里面有个小问题。在SQL Server 2000里,在RESTORE VERIFYONLY会话期间,会发生下面这种情况:

现在,假如你使用一个16进制的编辑器(比如UE),任意修改备份文件中存储的数据,然后再次运行RESTORE VERIFYONLY,SQL Server仍然会告诉你“备份设备有效(The backup set is valid)”。

在SQL Server 2000里,RESTORE VERIFYONLY仅仅检查文件是否符合Microsoft Tape Format (MTF)规范,是否可以从磁盘读取数据。所以你的备份数据可能含有垃圾数据。

现在在SQL Server 2005里面,缺省的备份设置和2000一样。也就是说,假如你的备份文件在数据备份区域有垃圾数据的话,SQL Server 2005依然会报告:备份设置有效。

那我们应该如何应对呢?答案就是使用备份时使用CHECKSUM选项,例如:

BACKUP DATABASE AdventureWorks TO DISK = 'G:/backups/AdventureWorks_full.bak' WITH CHECKSUM

现在,假如你更改文件数据备份区域的一个字节,然后在那个文件上运行RESTORE VERIFYONLY的话,会产生如下提示:

Server: Msg 3189, Level 16, State 1, Line 1 
Damage to the backup set was detected. 
Server: Msg 3013, Level 16, State 1, Line 1 
VERIFY DATABASE is terminating abnormally.

下图显示了运行过程:

RESTORE VERIFYONLY终于按照我们期望的方式工作了。在备份期间使用CHECKSUM选项会引起SQL Server执行如下操作:

  • 为备份数据计算校验和。这个校验和可来与RESTORE VERIFYONLY过程中产生的校验和进行对比。
  • 校验页的校验和。如果校验失败,备份就会被中止。这也是一个好办法,用于确认你从一开始,就正在备份一个“良好”状态的数据库。

那么,使用CHECKSUM会给你带来什么负面影响呢?

  • 备份和还原时,会占用大量处理器时间
  • 增加备份和还原时间

总之,在SQL Server 2000和2005中,使用默认备份设置的话,RESTORE VERIFYONLY不能检查出来备份文件的数据是否已经被破坏。仅仅在SQL Server 2005中当创建备份时使用了CHECKSUM选项的话,才能验证备份数据的完整性。

但是也许你们部门预算有限,并没有另外购买SQL Server 2005的license,怎么办呢?当然我们可以使用SQL Server 2005的Express版本。虽然SQL Server 2005Express是免费的,但是它仅仅支持4GB以下的数据库。不过很少有人知道,当使用RESTORE VERIFYONLY命令时,Express版本可以工作在大于4GB的文件上。没问题,你可以在你的备份文件服务器上安装Express,然后尽情的验证你的备份文件是否有效。

本文翻译自sqlbackuprestore,更多精彩内容请浏览http://www.sqlbackuprestore.com

(4.9)SQL Server如何校验备份文件的更多相关文章

  1. SQL Server 数据库基于备份文件的【一键还原】

    1. 备份与还原的基础说明 我们知道在DBA的日常工作中,SQL Server 数据库的恢复请求偶有发生,可能是用作数据的追踪,可也可能能是数据库的灾难恢复. 数据库常用的备份命令如下: ----完整 ...

  2. 更改SQL Server中默认备份文件夹

    当你安装SQL Server时,安装路径一般如下:C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL.在这个目录下也有数据文件的文件夹和备份文件的文 ...

  3. SQL Server 数据库本地备份文件通过OSS工具上阿里云(恢复还原数据库)

    SQL Server数据库上云,通过备份文件上传进行恢复. 1.通过OSS工具上传备份文件. 相关知识和操作步骤请参考: https://blog.csdn.net/weixin_35773751/a ...

  4. SQL Server 数据库bak备份文件还原操作和mdf文件附加操作

    前言:现在任何软件都离不开数据的支持,数据的价值是无价的,因此数据目前显得尤为重要,日常软件生产库的数据定时或实时备份必不可少,备份出的文件也需要进行验证,下边我将介绍SQL Server数据的的备份 ...

  5. SQL Server 通过备份文件初始化复制

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 疑问(Questions) 参考文 ...

  6. SQL Server 通过备份文件初始化复制 – 听风吹雨

    一.背景 MySQL在对有历史数据的数据库进行搭建复制(Master/Slave)的时候,可以通过在Master服务器备份历史数据,利用这个备份文件 在Slave进行还原:这样做的好处是可以更加快速的 ...

  7. SQL Server 2014 Backup Encryption

    转载自: Microsoft MVP Award Program Blog 来源:Microsoft MVP Award Program Blog 的博客:https://blogs.msdn.mic ...

  8. sql server 备份与恢复系列七 页面还原

    一.概述 当数据库发生损坏,数据库的每个文件都能打开,只是其中的一些页面坏了,这种情况可以借助DBCC CHECKDB进行数据库检查修复.如果要保证数据库不丢失,或修复不好,管理员只能做数据库完整恢复 ...

  9. 阿里云RDS SQL Server 2008 R2 使用本地SQL备份文件还原全过程

    最近公司准备全面转向阿里云,写了好几个方案,最终决定购买一台ECS和一台RDS搭配使用.开始对阿里的RDS产品陌生,加上公司的数据库文件近20G,诸多担心,生怕产品买来了不能用,给公司造成损失.后来联 ...

随机推荐

  1. 利用HTML5 Canvas和Javascript实现的蚁群算法求解TSP问题演示

    HTML5提供了Canvas对象,为画图应用提供了便利. Javascript可执行于浏览器中, 而不须要安装特定的编译器: 基于HTML5和Javascript语言, 可随时编写应用, 为算法測试带 ...

  2. excel文件打开乱码解决

    Excel在读取csv的时候是通过读取文件头上的bom来识别编码的,如果文件头无bom信息,则默认按照unicode编码读取.(这个bom是微软自己定义的一种文件头部协定,顾名思义存储在文件头部,存储 ...

  3. SpringCloud系列八:自定义Ribbon配置

    1. 回顾 上文使用Ribbon实现了客户端侧的负载均衡.但是很多场景下,我们可能需要自定义Ribbon的配置,比如修改Ribbon的负载均衡规则. Spring Cloud允许使用Java代码或属性 ...

  4. Atitit.python web环境的配置 attilax 总结

    Atitit.python web环境的配置 attilax 总结 1. 下载modpython/1 1.1. 安装python2.5.11 1.2. 安装modpython1 2. 设置py文件的u ...

  5. Atitit.数据库分区的设计 attilax  总结

    Atitit.数据库分区的设计 attilax  总结 1. 分区就是分门别类的文件夹 (what)1 2. 分区的好处(y)1 3. 分区原则(要不要分区,何时分区)how2 4. 主要的分表类型有 ...

  6. Atitit. 订单管理 收银单持久化 功能设计  基于ecshop订单结构

    Atitit. 订单管理 收银单持久化 功能设计  基于ecshop订单结构 1. 54.order_info  订单 数据结构1 2. Ecshop 的订单api1 2.1. 生成订单 code b ...

  7. iOS: 与 insertRowsAtIndexPaths 在 UITableview 中插入多个行

    我有 10 行已经在连接中想做什么添加另一个 10 行,我使用的 insertRowsAtIndexPaths,但我要的错误. 以下是我使用的代码 -(void)insertDownloadedAct ...

  8. 如何修改SESSION的生存时间

    php中session过期时间设置网上很多人给出了解答:修改php配置文件中的session.gc_maxlifetime.如果想了解更多session回收机制,继续阅读.(本文环境php5.2) 概 ...

  9. CentOS 6.5 MySQL5.6.26源码安装

    一.源码安装cmake工具 从mysql5.5起,mysql源码安装开始使用cmake wget http://cmake.org/files/v3.2/cmake-3.2.3.tar.gztar z ...

  10. Linux & windows 应用服务器&Oracle数据库服务器备份

    Linux篇 tomcat启动加入开机启动项   vi /etc/rc.d/rc.local service iptables stop /usr/local/tomcat/bgyappserv01/ ...