目标:
1.理解SQLServer2008R2的备份方式(完整,差异,日志备份)和恢复模式;
2.能够进行完整备份,差异备份操作,事务日志备份,并进行恢复操作;
3.使用维护计划实现日常的数据库备份操作;
一、SQLServer2008R2的备份恢复
1、恢复模式类型
所有的数据库都可以设置为三个不同的恢复模式:简单(simple), 完全(full),大容量日志(Bulk-Logged).
A完全恢复模式
完全恢复模式是默认的恢复模式。在完全恢复模式下,需要手工的对事务日志进行管理。使用完全恢复模式的优点是可以恢复到数据库失败或者指定的时间点上。缺点 则是,如果没有
进行管理的话,事务日志将会快速增长,消耗磁盘空间。要清除事务日志,只能通过备份事务日志,或者切换至简单模式。
B简单恢复模式
与完全恢复模式不同的是,在简单恢复模式下,在检查点发生时(checkpoint),当前已的事务日志将会被清除。
因此,在简单恢复模式下,容易造成数据丢失,因为无法将数据库恢复到失败的那一刻。需要注意的是,虽然在简单恢复模式下,系统会自动定期清除日志,但这并不意味着事务日志文件不会增长。例如,如果执行一个批量插入操作时,SQL SERVER会将该相关操作当成一个事务,期间产生的日志量在极端情况下,还是非常可观的。
C大容量日志恢复模式
大容量日志恢复模式与完全恢复模式非常相似,但与完全恢复模式不同的是,批量操作将会尽量被最少记录。
批量操作有以下几种类型:
1. 批量导入数据,例如使用BCP(Bulk Copy Import) , BULK INSERT命令 ,或者是在BULK使用OPENROWSET命令;
2. 大对象操作(LOB),例如在TEXT, NTEXT, IMAGE 列上使用WRITETEXT 或者UPDATETEXT;
3. SELECT INTO 字句;
4. CREATE INDEX, ALTER INDEX, ALTER INDEX REBUILD, DBCC REINDEX
在完全恢复模式下,上述操作产生的日志将会是非常大的。而使用大容量日志恢复模式将会阻止不需要或者非预期的日志增长。
在批量操作发生时,SQL SERVER仅仅记录了相关数据页(data page)的ID, 在SQL SERVER中,SQL SERVER pages 都有内部 ID,如5:547。用这种方式,能够将大量的page ID记录在小的日志文件里。
使用大容量日志恢复模式,将会使数据仓库或者有大批量操作的数据库减少很大的空间。
但使用大容量恢复模式时,会使得恢复变得比较困难,一般来说,只能恢复到最后的事务日志备份点上,但如果所有的事务日志都被备份后,还是可以恢复成功的。
2、改变恢复模式
改变数据库的恢复模式,可以通过以下语句来实现:
ALTER DATABASE database_name SET RECOVEY BULK_LOGGED
改变恢复模式并不需要重启数据库实例。
二、数据库备份介绍
1、备份位置
在SQL Server上,有多种备份位置可以选择,如本地磁盘,网络磁盘,远程地址,磁带等各种备份位置均有自己的优点和缺点。
2、逻辑备份设备
在SQL Server上,可以通过创建逻辑备份设备来完成备份。使用逻辑备份设备的好处是,当变更备份地址时,不需要更改备份脚本,只需要更改逻辑备份设备的定义即可。
创建逻辑备份设备的脚本如下: 
SQL code
EXEC sp_adddumpdevice @devtype=’disk’,@logicalname=’MYBackup’,@physicalname=’D:\backup\mydb.bak’
删除备份设备的脚本: 
SQL code
Sp_dropdevice @logicalname=’MYBackup’
上述脚本只是删除逻辑备份设备的定义,下述脚本将同时删除备份文件: 
SQL code
Sp_dropdevice @logicalname=’MYBackup’,@devfile=’DELFILE’
使用逻辑备份设备的方法如下: 
SQL code
Backup database mydb to MYBackup
当然,还可在逻辑备份设备上指定过期时间等备份属性,如: 
sqlserver备份表语句SQL code
Backup database mydb to MYBackup WITH EXPIREDATE=’13/01/2010’
或: 
SQL code
BACKUP DATABASE mydb to MYBackup WITH RETAINDAYS=7
3、备份集与存储集
每一份备份包含于一个备份集,而一个备份集包含于一个存储集。通过系统GUI进行备份时,SQL Server会自动指定备份集和存储集,目的则是为了简化管理。用T-SQL显示指定则用如下语法:
SQL code
BACKUP DATABASE mydb to MYBackup WITH RETAINDAYS=7,
      NAME=’FULL’,MEDIANAME=’ALLBackups’
NAMEs是指备份集名称,MEDIANAME是指存储集名称。
4、全备份
不管恢复模式是哪一个,所有的备份都必须要有一个全备份,特别是日志备份和差异备份,如果没有全备份的话,将无法进行恢复。
简单的全备份脚本如下所示,也可以通过维护计划来指定全备份: 
SQL code
BACKUP DATABASE mydb to DISK=’D:\Backup\mydb.bak’
但需要注意的是,上述命令是将数据库备份附加到当前的存在的文件上,如果不存在则创建它,并不会覆盖原有文件。要覆盖同名的备份文件,需要指定INIT参数。 
SQL code
BACKUP DATABASE mydb to DISK=’D:\Backup\mydb.bak’ WITH INIT
5、日志备份
在完全恢复模式或者大容量日志恢复模式下,日志备份不仅仅是恢复的需要,同时也是手工管理事务日志文件的一种方式。如果从不进行备份的话,在完全恢复模式或者大容量恢复模式下,事务日志将会持续增长,直至消耗完所在磁盘。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。