浅谈SQL SERVER的备份还原模式

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

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

在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



本文转自 rebelxuan 51CTO博客,原文链接:http://blog.51cto.com/nizhuan/736883

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
SQL Server——SQL Server备份与恢复
SQL Server——SQL Server备份与恢复
116 0
SQL Server——SQL Server备份与恢复
|
SQL 存储 Go
SQL Server 批量完整备份
原文:SQL Server 批量完整备份 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 实现方式一(One) 实现方式二(Two) 实现方式三(Three) 参考文献(References) 二.
1228 0
|
SQL Go 数据库
|
SQL 数据库 Go