sql server 备份与恢复系列三 简单恢复模式下的备份与还原
2018-08-09 10:04
519 查看
一.概述
前面讲了备份的一些理论知识,这篇开始讲在简单恢复模式下的备份与还原。在简单模式下是不能做日志备份的,发生灾难后,数据库最后一次备份之后做的数据修改将是全部丢失的,所以在生产环境下,数据又很重要,一般不建议使用这种模式。 例如对一个数据库有5次完整数据备份,时间是t5, 之后发生灾难,就会部丢失。![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/26ee12c9394b259305e38e1789a15ffc.png)
当数据库越来越大,完整备份时间会越来越长,为了减少丢失风险,引入差异备份。例如下图演示:在第一次建立数据库完整备份后,建立了三次差异备份,之后再建立完整备份,从而建立新的差异基准。不管是完整备份还是差异备份,一般只能在晚间进行。如果数据比较庞大又不允许长时间数据丢失,那简单恢复模式是不能满足的。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/b4f28d016c5857e42bff0e40489b5d6e.png)
二.备份演示
在简单恢复模式下主要的备份是完整备份和差异备份。我这里有TestLog库,库里有二个表。假设周日做一次完整备份,周一到周六晚上每天做一次差异备份,到第二周的周日时开始新的基准线。如下所示use test exec sp_addumpdevice 'disk', 'BackupTestDevice','F:\SqlService\backup\BackupTestBackup.bak'
![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/c040fe4e2c6f1888b35339dabf8c3476.png)
--设置恢复模式为简单恢复 ALTER DATABASE TestLog SET RECOVERY simple go -- 做一次完整备份到备份设备中(备份基准) 假设在周日晚上 backup database TestLog to BackupTestDevice go
![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/77f8cf487546487cdb25cc12bfb4343e.png)
go --差异备份 周一晚 backup database TestLog to BackupTestDevice with differential go --差异备份 周二晚 backup database TestLog to BackupTestDevice with differential go --差异备份 周三晚 backup database TestLog to BackupTestDevice with differential go --差异备份 周四晚 backup database TestLog to BackupTestDevice with differential go --差异备份 周五晚 backup database TestLog to BackupTestDevice with differential go --差异备份 周六晚 backup database TestLog to BackupTestDevice with differential go --完整备份 周日晚(新基准) backup database TestLog to BackupTestDevice with differential go --差异备份 周一晚 backup database TestLog to BackupTestDevice with differential
在备份设备中查看备份集
![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/700f59aeba8e6748736012f3f2fc2495.png)
-- 通过脚本查看
select distinct s.first_lsn,s.last_lsn,s.database_backup_lsn,s.position,
s.backup_finish_date,s.type,y.physical_device_name,s.backup_size
from msdb..backupset as s inner join
msdb..backupfile as f on f.backup_set_id=s.backup_set_id inner join
msdb..backupmediaset as m on s.media_set_id=m.media_set_id inner join
msdb..backupmediafamily as y on m.media_set_id=y.media_set_id
where s.database_name='TestLog'
order by s.position asc
![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/658229ade51a4b78efd6aaeff4b69da5.png)
三. 还原演示
将一个数据库还原,需要构造一个正确的还原顺序。在还原过程中,备份文件结尾使用norecovery事务不恢复(正在还原。。)不可读写,在最后一个备份文件结尾使用recovery事务恢复。数据库恢复正常。-- 切换到master库 use master
--设置单用户模式(否则执行下面报错:“因为数据库正在使用,所以无法获得对数据库的独占访问权”) ALTER DATABASE TestLog SET OFFLINE WITH ROLLBACK IMMEDIATE
-- 从备份恢复一个全备份 ,norecovery(正在还原...)不可读写. file指备份集位置号 restore database TestLog from BackupTestDevice with file=1, norecovery
![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/60dfbc3512123719cb285915ebe73b77.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/f38f297c0cff75ec9011dee646845fab.png)
-- 恢复到差异备份文件3,跳过差异备份2 ,看是否备份成功 restore database TestLog from BackupTestDevice with file=3, recovery
![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/720ba7e00afb7bf25df6a155bc20dcb6.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/4e16ee838be93bbe7352596eabef0596.png)
-- 备份结束之后,结束单用户模式 ALTER database TestLog set online
下面在来演示还原差异文件,使用旧基准。还原看会怎么样
-- 从旧基准中恢复一个全备份 ,norecovery(正在还原...)不可读写. file是1 restore database TestLog from BackupTestDevice with file=1, norecovery --新基准file是8, 恢复到差异备份文件9 restore database TestLog from BackupTestDevice with file=9, recovery
![](https://oscdn.geek-share.com/Uploads/Images/Content/201808/d09994f04c44b99bf5fecc12db1c54bd.png)
总结:对于简单恢复模式,没有日志备份,恢复只需要一个完整数据库备份,以及最后一个差异备份。 对于多个差异备份文件,在还原时不需要LSN的连续性(在同一个基准内)。
相关文章推荐
- SQL Server 恢复模式、备份方式和还原方式之间的简单关系
- 完整数据库还原(简单恢复模式)
- sql server 备份与恢复系列一 必备知识
- SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验)
- 使用Symantec Backup Exec 对Exchange 2010 进行备份还原和灾难恢复系列之七
- SQL Server 备份与恢复之七:还原的阶段与顺序
- sql:sql server 2005中备份模式与恢复模式的区别
- SQL Server 2008数据库备份还原和数据恢复
- 使用Symantec Backup Exec 对Exchange 2010 进行备份还原和灾难恢复系列之八
- 恢复SQL Server简单模式下误删除堆表记录
- SQL Server 数据库备份还原和数据恢复
- 深度剖析 SQL Server简单恢复模式
- 使用Symantec Backup Exec 对Exchange 2010 进行备份还原和灾难恢复系列之一
- SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验)
- SQL Server 备份与恢复之八:还原数据库
- SQL Server日志在简单恢复模式下的角色
- 新数据库必须要做一次完全备份之后才能保留日志,在做备份之前还原模式就是简单,不管你选什么!
- 使用Symantec Backup Exec 对Exchange 2010 进行备份还原和灾难恢复系列之三
- SQL Server 简单模式下,误删除堆表记录如何恢复(绕过页眉校验)
- 备份与恢复系列 八 丢失所有数据文件的还原与恢复