作品发布     邀请码    设为首页  收藏 

当前位置:文章数据库 → 文章内容 >> 浅谈SQL SERVER的备份还原模式


浅谈SQL SERVER的备份还原模式

更新时间:2012-2-18 15:25:51   作者:华中帝国整理  来源:华中帝国
首先明确文件复制不等同于备份在SQL SERVER中使用先写事务日志来实现事务持续性,每个事务都先写入事务日志,然后才写入数据文件,好处在于1 事务日志确保能够将每个事务恢复到服务器停机前的状态2事务 ...

首先明确文件复制不等同于备份

在SQL SERVER中使用先写事务日志来实现事务持续性,每个事务都先写入事务日志,然后才写入数据文件,好处在于

1 事务日志确保能够将每个事务恢复到服务器停机前的状态

2事务日志使得能够在处理事务时进行备份

3 事务日志降低了硬件故障的影响,出于安全考虑最好把事务日志和数据文件放在不同的分区

SQL SERVER的三种恢复模式

恢复模式

说明

简单

不备份事务日志

用于小型数据库和不经常更改的数据库

完整

保留所有日志,直到事务日志备份

用于生产数据库

大容量日志

完整恢复模式的补充

不将大容量日志操作写入日志

恢复模型

描述

事务持续性

大容量复制操作

简单

事务日志在检查点被截断

否,只能还原到最后

不能写入日志,性能高

大容量日志

不将select into bulk insert操作作为事务写入日志

也许只能还原到最后一次完整备份或差异备份,如果没有执行大容量复制操作将可以还原到最后一次事务日志备份

只标记,性能高,就是具体内容不记下来,只记下来做了什么事

完整

将所有事务都写入日志

是,可以还原到恢复点

速度比简单和大容量慢

数据库的还原模式

完全 对日志备份,可以还原到故障点

简单 不对日志备份,只能还原到备份点

大容量日志:折中的方案,如果没有大容量操作是可以恢复到故障点的,如果有大容量操作,则所有的大容量操作丢失

备份方法

1完全备份 (包含所有的数据信息)

2差异备份(备份至完全备份以来数据的差异量)

3日志备份(备份的日志的内容)

恢复计划

如果是数据库还原模型是完整模式则

先备份故障点的日志

再还原最新完全备份

再还原完全备份后的最新差异备份

再还原差异备份后的所有日志备份

如果数据库还原模式是简单模式

则只需要还原最新的完全备份

然后还原完全备份后的最新的一次差异备份

上图为简单恢复模式,由于没有日志备份,所以当在t5时刻发生故障,只能将数据恢复到T5

上图为完整恢复模式,由于有日志备份,所以当故障发生,先在故障点做一次日志备份,再还原Db_1数据库,再还原log_1,log_2,故障点log,就可以成功恢复数据

数据库恢复模式决定了你的备份类型

备份类型

说明

完整备份

备份完成时刻的数据库

任何其他备份的基准

差异备份

事先已执行过一次完整备份

对上一次完整备份之后所有更改的数据作备份

事务日志备份

事先已执行过一次完整备份

windows增量备份类似

从上一次事务日志备份到当前事务日志的尾部

截断已确认的事务日志

通常备份策略是多种备份方法一起使用

策略

说明

完整备份和还原

小型数据库

数据很少改变或只读

完整+差异备份与还原

数据库频繁更改

想要最少的备份时间

完整+事务日志备份与还原

数据库和事务日志备份相结合

数据库经常更改

完整备份时间过长

完整备份和还原

只能选择任意的一个完整数据库备份进行还原,还原到10,11,12

完整备份+差异备份与还原

如果需要还原到11时的数据库状态

先还原备份1,再还原备份2

如果需要还原到12:30时的数据库状态

方法1 先还原备份2,再还原备份3

方法2 先还原备份1,再还原备份3

完整备份+日志备份与还原

clip_image010

如果需要还原到11时的数据库状态

完整备份1+日志备份1+日志备份2

如果需要还原到12:30时的数据库状态

方法1完整备份2+日志备份3

方法2 完整备份1+日志备份1+日志备份2+日志备份3

如果需要恢复到10:45时的状态

完整备份1+日志备份1+日志备份2 再指定到10:45的恢复即时点

常用备份和恢复语句

完全备份

backup database xscj to mybak

备份到一个文件里

backup database xscj to disk='e:\a.bak'

差异备份

要保证一定已经做过了一次完全备份

backup database xscj to mybak with differential ,nopoint

日志备份

backup log xscj to mybak with noinit

注意:还原模式为简单时,不允许做日志备份

故障点备份

实际就是日志备份,备份的是你上一次日志备份后到你的故障点之间的日志

backup log xscj to myback with no_truncate

如何去截断日志,节省磁盘空间

backup log xscj with truncate_only

从备份中恢复

恢复数据备份

restore database xscj from mybak

恢复日志备份

restore log xscj from mybak

从一个备份文件中恢复

restore database xscj from disk='c:\xs_full.bak'

如果备份集中有多个备份

restore database xscj from mybak with file=1

--recovery 还原到数据库为可以使用状态,以后再还原任何日志

--norecovery 数据库没有被还原到可用状态,要等待其他的还原

实践

--1创建一个数据库,设置数据库还原模式为完整模式

--2创建一张表,做一次完全备份

use test

go

create table xs( name char(10),age tinyint)

go

--创建备份设备

exec sp_addumpdevice 'disk','xs_bak','c:\xs_bak.bak'

backup database test to xs_bak

--3插入两条数据库,做一次差异备份

select * from xs

insert into xs values('tom',1)

insert into xs values('mary',2)

backup database test to xs_bak with differential

--4更新数据库做一次日志备份

update xs

set age =10

where name='tom'

go

select * from xs

go

backup log test to xs_bak

--5插入数据库,不做任何备份

insert into xs values('bob',3)

--6损坏数据库

--停止服务,删除数据库test的数据文件

--注意不要删除日子文件,否则就无法恢复到故障点

--7要求还原到最后插入数据的状态(也就是故障点)

--a 做故障点备份

backup log test to xs_bak with no_truncate

--b还原最近的一次完全备份

restore database test from xs_bak with file=1,norecovery

--c还原完全备份后的最近一次差异备份

restore database test from xs_bak with file=2,norecovery

--d还原差异备份后的所有日子备份

restore log test from xs_bak with file=3,norecovery

restore log test from xs_bak with file=4,recovery

检测

use test

go

select * from xs

本文出自 “逆转的前奏” 博客,请务必保留此出处http://nizhuan.blog.51cto.com/1041326/736883

   免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

责任编辑:华中帝国        



本文引用网址: 

浅谈SQL SERVER的备份还原模式的相关文章
发表评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码