SQL Server 数据库的备份详细介绍及注意事项

SQL Server 备份

前言

为什么要备份?理由很简单——为了还原/恢复。当然,如果不备份,还可以通过磁盘恢复来找回丢失的文件,不过SQL Server很生气,后果很严重。到时候你就知道为什么先叫你备份一次再开始看文章了。∩__∩。本系列将介绍SQL Server所有可用的备份还原功能,并尽可能用实例说话。

什么是备份?SQL Server基于Windows,以文件形式存放资料,所以备份就是Windows上SQL Server相关文件的一个某个时间点的副本。根据备份类型的不同,副本的种类和内容也有不同。

备份类型有哪些?SQL Server 目前版本中,可用的备份类型有:完整数据库备份、差异数据库备份、事务日志备份(后称日志备份)、文件和文件组备份、部分备份,根据SQL Server版本不同,有些备份类型不支持,另外根据恢复模式的不同,某些备份类型也不支持。

什么是恢复模式?

很多人只把关注点放在备份上面,而没有在意恢复模式,其实所有的备份都应该从恢复模式作为切入点。恢复模式实际上是一个控制备份还原的行为的数据库级别选项。SQL Server 在当前所有发布版本中只有三种恢复模式:简单恢复模式(后面简称简单模式),大容量日志恢复模式(后面简称大容量模式),完整恢复模式(后称完整模式)。

本文从恢复模式开始,提醒一下,绝大部分的专业属于都会陆续解释,如果读者有不明白,可以继续往下看或者上网搜索:

1.简单模式,Simple recovery model:某些操作可以被最小日志化。这种模式下,不支持日志备份、时间点恢复和页恢复。且文件恢复功能仅限于次要数据文件中的只读文件。

2.大容量日志模式,Bulk-logged recovery model:和完整模式类似,有时候可以理解为完整模式于简单模式的过渡模式。这种模式对某些大容量操作进行最小日志化,支持完整备份中的备份还原策略,但是由于某些操作被最小日志化,所以不能保证时间点恢复。

3.完整模式,Full recovery model: 在这个模式下,所以操作都被完整记录下来,并且支持所有类型的备份还原策略。

默认情况下,新库会继承Model库的配置,包括恢复模式,也就是FULL模式。可以在创建或日常使用过程中修改,并且不需要重启服务。恢复模式最重要的区别在于对待日志的行为。

简单模式:

是三种模式中最容易管理的,可以进行完整,差异和文件备份,但是不能做日志备份。在这种模式下,每当Checkpoint 进程发生时,会自动把日志文件中不活动的日志(在日志备份一文介绍)写入数据文件,写入后,对应的日志文件中的空间就可供新事务使用,注意这种空间重用或者截断并不自动减少日志文件的物理大小,如果需要减少空间,需要使用DBCC SHRINKFILE/DATABASE等命令实现。让日志空间重用的过程叫做截断。在简单模式下这个过程称为自动截断(auto-truncate)。在这种模式下,日志通常不需要管理,但是对于单个的大事务,日志文件可能会增长得很快,这种情况下最好把批处理降为小的批。简单模式最主要的限制是不能进行日志备份,也就是说无法进行时间点还原。在一些测试,开发或者SLA要求不严格的环境下,可以使用这种模式。

完整模式:

这种模式下,所有数据库操作都被完整地记录在日志中,2008出现某些操作在这种模式下也还是最小化日志。并且不是自动截断。它支持任何备份还原策略,特别是时间点还原,在日志还原一章介绍。即使发生Checkpoint ,不活动的事务也不会截断到数据文件中。唯一能控制日志文件的只有日志备份,所以这种模式下日志备份极其重要,一方面提供时间点还原,另外一方面控制日志文件大小。

日志文件会完整保存自上一次日志备份后的事务。使用copy_only或者no_truncate选项均不会截断日志。

大容量日志:

这种模式是最少用到的,某些操作会被最小日志化,包含:

  • 使用bcp进行导入
  • bulk
  • insertinsert
  • select *from openrowset(bulk )
  • select into
  • 使用writetext/updatetext插入或附加数据
  • 重建索引

在这种模式下,会用bitmap image记录发生最小日志化的区。如果数据库故障导致数据文件不了用,并且日志尾部包含最小化日志,不能做日志尾部备份,因为这个操作需要访问数据文件中数据修改后的区。这种模式适用于大容量操作,但是如果事务包含最小化日志,则不能进行时间点还原,只能还原到之前。

恢复模式扩展说明:

如上所说,恢复模式是数据库级别的配置项,在创建过程中及后续使用中均可修改,但是由于种种原因,尽量在规划阶段就做好配置,并且在创建过程中明确指定。

这个选项主要用于决定数据库是否可以(或者需要)做日志备份?什么事务需要被记录?还有是否可以做其他类型的备份还原操作等。

简单模式:

某些操作能被最小化日志,这里要说明一下,很多人以为简单模式下“不记录日志”,其实这是很严重的误解,会导致后续使用的很多问题,无论任何恢复模式,都会记录日志,只是记录的形式和内容不同。在简单模式下,日志备份选项被禁用,带来的影响是不支持时间点还原、页还原,而文件还原功能仅限于READONLY文件组中的次要数据文件。

简单模式是最容易管理的恢复模式,在这种模式下,可以进行完整数据库备份、差异数据库备份和文件备份,但是不能进行日志备份。在日志备份一文会详细介绍,但是在这里要提一下,关于日志空间重用的问题,不管任何恢复模式,都会有一个系统进程在后台运行——CHECKPOINT,每当这个进程启动时,会把数据库的日志文件(通常就是LDF文件)中,非活动的事务写入数据文件,然后把这部分的空间标识为“可重用”,这个步骤称为日志截断,在简单模式下称为自动截断(auto-truncate),记住可重用不代表空间被清空,唯一可以清空LDF文件物理大小的操作是收缩数据库/文件操作。简单模式会自动执行这个截断操作,截断后,日志空间可被新事物重新使用,从宏观变现来说,就是LDF文件的物理大小不增加,或者增加缓慢,其实当使用简单模式,并且LDF合适的情况下,如果LDF物理大小还在增长,可能就需要引起注意。

由于日志的自动截断,导致简单模式下无法进行时间点恢复,也无法进行日志备份。但是对于对数据要求不高的系统,或者SLA(在还原基础一文中介绍)没有什么特殊要求的环境,可以使用这种模式,可以最大限度减少对日志的管理。但是不是意味着使用了这种模式,就不用管理日志了,对于一些大规模、长时间运行的批处理,会引起大量的活动事务,此时LDF文件依旧会迅速增长,引起一些潜在的问题。对此,尽可能把批处理拆分为多个、短事务。

简单来说,这种模式的优缺点:

优点:

易于管理,大部分情况下不需要

缺点:

  • 不能进行事务日志备份,无法时间点还原
  • 数据丢失的风险增大

选择依据:根据业务需要选择,对于非常重要的数据库,无论当前数据库大小,都不要使用这种模式,详细内容参考还原基础中SLA的内容。

完整模式:

完整模式很多概念都是相对于简单模式来说的,这种模式下,所有操作被完整地记录在事务日志文件中,并且不会发生自动截断(除了数据库完全没做过最少一次完整备份),事务日志只有在事务日志备份发生时,才会截断到数据文件,并且使对应部分可用。这种模式能够执行所有类型的备份还原选项,特别是可以进行时间点恢复,保证数据接近0丢失。这是几乎所有正式环境(也称生产环境)使用的恢复模式。

优点:

  • 能够完整记录数据库操作
  • 进行时间点恢复,保证数据尽可能0丢失

缺点:

  • 需要严格管理事务日志文件
  • 数据库规模可能会变得难以控制

大容量日志模式:

这是用的最少的恢复模式,读者不要给名字忽悠了,见过很多人在进行大容量操作时切换到这种模式,然后操作完再切换回来,这种操作其实比较危险。不建议使用。另外,它支持日志备份,能进行一定程度的时间点恢复。除了前面提到的可最小化日志的操作,其日常使用和管理与完整模式无疑。可以理解为是完整模式和简单模式的过渡。

缺点:

如果数据文件突然变得不可用,并且日志尾部包含了大容量日志模式下进行的最小化日志操作,那么不可能进行日志尾部备份,因为这种备份要求访问数据修改所发生的区,而这个区在最小化日志操作中仅记录“发生了操作”,而没有完整地记录操作内容。导致无法进行时间点还原,存在一定的数据丢失风险。做好事务管理的话,其实这种模式基本上没什么存在的价值。

备份成份:

现在来说说一个备份会包含什么内容,很多人以为,特别是完整数据库备份,就是把所有东西都备份,其实他们被名字迷惑了。在介绍备份成份前,先介绍SQL Server的数据库成份,SQL Server数据库是一系列基于Windows的文件,最简单的模式包含一个数据文件(默认后缀名为MDF)和一个日志文件(默认后缀名为LDF),后缀名能改,但是没有任何理由去改。后果很严重…。这两个文件在创建数据库时就自动创建,在后续运行当中,可能会创建多个数据文件(默认后缀名为ndf),多个日志文件(大部分情况下没必要,在日志备份一文介绍),还有一些文件组,每个文件组包含若干个文件。

数据文件:

数据文件是用于存储系统及用户数据及对象,简单来说,就是数据、表、视图、存储过程、触发器等等。除此之外,还包含权限信息。每个数据库最少要有一个数据文件,默认为主数据文件,primary data file,默认后缀名为.MDF。存储在主文件组(primary Filegroup中),如果需要新加文件,这些文件就是次要数据文件(虽然名字为次要,但是一点都不次要…),默认后缀名为.NDF。

主数据文件包含:所有系统对象和数据、默认情况下所有用户自定义的对象和数据。还有其他次要数据文件的地址。

文件组:

文件组是文件的一个逻辑集合,它可以包含一个或者多个数据文件,默认创建数据库时就会创建一个primary 文件组,存放primary数据文件。这个同时是default文件组,所有数据都会存放到这里,除非额外指定,default文件组可以改,前提是有两个或以上的文件组,这样可以把数据强制写到别的文件组中,有时候通过这种方式可以缓解磁盘的压力。另外primary文件组还存了其他所有文件组的路径。

对于多个文件组的数据库,可以进行文件组备份,这种方式对于超大型数据库(VLDB)非常有效,因为据我工作经验,即使一个150G的库做一个完整备份,也往往要进行20分钟左右,如果是150T的库,恐怕几个小时都搞不定,这时候,文件组备份就起到很重要的作用,把文件组控制在一定的大小,然后每次备份只对单独文件组进行,这样可以把一个连续的备份操作拆分为很多小操作。另外,文件组可以设为只读(read-only),这样可以在纯读操作中,减少锁和等待的产生,对性能方面有一定程度上的帮助。对于文件组配置放在其他章节,这里不累赘。

需要提醒的是,文件组带来性能方面的改进同时,也带来了管理方面复杂度的提升。所以需要慎重考虑。

事务日志:

这部分也有单独的介绍,这里只做简介,所有SQLServer数据库、所有恢复模式下,都有最少一个事务日志文件。虽然后面有专门的文章介绍,但是这里要不厌其烦地提醒,别因为任何模式、或者LDF文件太大就删除LDF让SQLServer,最严重的情况是会导致你的数据库无法使用。

备份类型:

目前微软已发布的SQLServer版本中,支持以下类型的备份:完整数据库备份、差异数据库备份、事务日志备份(后称日志备份)、文件和文件组备份、部分备份,但是如前面所说,根据SQL Server版本不同,有些备份类型不支持,另外根据恢复模式的不同,某些备份类型也不支持。数据文件、文件组及日志文件组成了SQL Server数据库,并且成为了各种备份类型的对象。下面简介一下各种备份类型:

数据库备份:把主数据文件和次要数据文件(如果有)上面的数据和对象存入备份文件中,这类细分为:

  • 完整数据库备份:备份特定数据库的所有文件的所有数据和对象,还有足以用于在故障时恢复数据库到一致性状态的日志部分。
  • 差异数据库备份:备份特定数据库上自最近一次完整数据库备份之后发生修改的所有数据文件的数据和对象。事务日志备份:把特定数据库自上一次日志备份后写入LDF文件的日志记录写入备份文件。

文件备份:把数据文件或者文件组中的数据及对象写入备份文件,可以细分为:

  • 完整文件备份:备份在特定数据文件或文件组上的所有数据和对象。
  • 差异文件备份:备份从上一次完整文件备份后特定数据文件或文件组中修改的数据和对象。
  • 部分备份(完整部分备份):备份数据库中除只读文件/文件组外(除非特殊指定)的所有可写部分。
  • 差异部分备份:备份自上一次完整部分备份后发生变更的数据和对象。

再次说明,这些备份类型不是总是可用的,有些先决条件,特别是恢复模式,本系列将逐步演示这些操作。

备份需要考虑的因素:

备份时需要考虑以下几个因素,不能认为备份是简单操作,作为任何数据库管理(包括专业DBA或者兼职管理人员),备份都是第一要务,所以要认真对待:

  • SLA
  • 备份存放位置
  • 备份周期及备份类型组合
  • 备份文件存放周期
  • 执行备份的工具
  • 对性能的影响

这些部分将在后续陆续介绍。

What's the next?

1、准备环境,本系列主要使用Windows Server 2012 R2+SQL Server 2008 R2企业版+AdventureWorks 2008 R2数据库及为了演示而额外创建的一些数据库。

2、下文将演示完整数据库备份,需要注意,是完整数据库备份,而不是完整备份,虽然大部分情况下这是等价的,但是完整备份实际上包含完整文件备份,为了减少误解,这里需要说明是数据库备份。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解决方法

    以前一直使用SQL Server2000,现在跟潮流都这么紧,而且制定要求使用SQL Server2005,就在现在的项目中使用它了.  对于SQL Server 2005,有几个地方是要注意的,比方在还原数据库时,不像2000里边将数据库和文件区分的很细,统一均为文件,这就使还原的数据库文件制定为. bak.那么想还原2000的数据库(备份数据库文件,无后缀名的),就需要自己手工选择. 选择下拉框中的"所有文件",这时就会显示"备份数据库文件"了,选择-确定 最主

  • SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法

    以下仅为参照,如果有多个实例,可能会有些许不同: 本环境是SQL Server 2005 Standard Version 64-bit 和 SQL Server 2008 Standard Version 64-bit 双实例同时安装在一个 Windows Server 2008 Standard Version 64-bit OS上: 代码 复制代码 代码如下: Windows Server 2008 Standard Version 64-bit SQL Server 2005 Stand

  • sql server 2005数据库备份还原图文教程

    首先.点击桌面的"SQL Server Management Studio"打开,sql2005的管理器,点击"连接"登录,如图: 一.新建数据库 1.新建数据库 右键点击"数据库"--"新建数据库",如图: MSSQL2005备份还原图文教程 填写数据库名,如mydata,选择数据库保存路径,一般可以保持默认地址,点击"确定". 2.新建用户 右键点击"安全性"--"登录名&

  • SQL Server导入、导出、备份数据方法

    一.导出导入SQL Server里某个数据库 1.在SQL Server企业管理器里选中要转移的数据库,按鼠标右键,选所有任务->备份数据库. 2.备份 选数据库-完全, 目的 备份到 按添加按钮 文件名 在SQL Server服务器硬盘下输入一个自定义的备份数据库文件名(后缀一般是bak) 重写 选重写现有媒体 最后按确定按钮. 如果生成的备份数据库文件大于1M,要用压缩工具压缩后再到Internet上传输. 3.通过FTP或者remote desktop或者pcanywhere等方法 把第二

  • SQLServer2005 按照日期自动备份的方法

    SqlServer自动作业备份 1.打开SQL Server Management Studio 2.启动SQL Server代理 3.点击作业->新建作业 4."常规"中输入作业的名称 5.新建步骤,类型选T-SQL,在下面的命令中输入下面语句 复制代码 代码如下: DECLARE @strPath NVARCHAR(200) set @strPath = convert(NVARCHAR(19),getdate(),120) set @strPath = REPLACE(@s

  • sql server 2000数据库备份还原的图文教程

    MSSQL是微软公司的一款数据库管理系统,本文将详细介绍MSSQL2000中数据库的备份和还原功能. 1.首先请保证您的备份文件是bak文件,并且备份文件能够正常还原. 2.打开"企业管理器"→"数据库",选择您要还原的数据库,右键"所有任务"→"还原数据库".如图: MSSQL2000数据库备份还原的图文教程 3.如果需要还原以前备份过的文件,直接在"还原"选择"数据库",然后在下方选

  • SQL Server 数据库备份和还原认识和总结 (一)

    可能许多同学对SQL Server的备份和还原有一些了解,也可能经常使用备份和还原功能,我相信除DBA之外我们大部分开发员队伍对备份和还原只使用最基础的功能,对它也只有一个大概的认识,如果对它有更深入的认识,了解它更全面的功能岂不是更好,到用时会得心应手.因为经常有中小型客户公司管理人员对数据库不了解或掌握不牢,会请我们技术人员出马找回丢失的数据或硬件损坏移动数据的现象,或其它情况的发生. 首先从数据库[恢复模式]说起,因为数据库如果恢复模式设置不正确,会导致数据无法还原. SQL Server

  • sqlserver2005打造自动备份的维护计划图解教程

    其使用方法如下: (1)启动[sql server Management Studio],在[对象资源管理器]窗口里选择[管理]--[维护计划]选项. 2)右击[维护计划],在弹出的快捷菜单里选择[维护计划向导]选项 ,弹出如图所示的[维护计划向导]对话框,单击[下一步]按钮 3)弹出如图所示[选择目标服务器]对话框,在[名称]文本框里可以输入维护计划的名称:在[说明]文本框里可以输入维护计划的说明文字:[在服务器]文本框里可以输入要使用的服务器名:最后选择正确的身份证信息,单击[下一步]按钮.

  • SQL Server 2008 备份数据库、还原数据库的方法

    SQL Server 2008 备份数据库: 1.打开SQL , 找到要备份的数据库 , 右键 >> 任务 >>备份 2.弹出 [ 备份数据库对话框 ] ,如图: 3.点击添加 [ 按钮 ] . 如下图: 4.选择要备份的路径 和 备份的文件名 点击 [ 确定 ]. 5.然后就一直点击确定就可以了 . 然后我们来到D:\ 看看 6.这个时候 , 你可以把它压缩打包什么的 , 要用的时候 , 在文件后面加 .bak 后缀 就可以用SQL 来还原了,还原可以来看这里~ SQL Serv

  • 将备份的SQLServer数据库转换为SQLite数据库操作方法

    操作方法:先要安装好SQLServer2005,并且记住安装时自己设置的用户名和密码.下面以恢复SQLServer下备份的数据库文件epdmdb20101008.bak为SQLite数据库为例来说明操作的步骤. ① 打开SQLServer2005,如下图所示: 在登陆界面输入登录名和密码,点"连接". 登录之后的界面如下: ② 新建一个数据库. 点左边导航栏的数据库,右键-新建数据库:如下图所示: 在弹出的新建数据库窗口中输入"数据库名称",点"添加&qu

随机推荐