一、数据库恢复模式
1、完整:能够让数据库恢复到出现故障的时间点和指定时间点(主要是日志文件完
整备份)
2、大容量日志:数据库日志不记录对数据修改的时间(即指定的时间点)效率高只
能通过日志恢复到故障点
3、简单:对事务日志不活跃的逻辑日志文件覆盖重复利用(日志写满后覆盖完成的
提交的事务日志)不能利用日志还原数据库,只能利用完整数据库文件恢
复
1)简单恢复模式 数据库备份和还原策略
数据小 数据变化不大 数据库不能恢复到出现故障的时间点(重复擦写日志文件)
完整数据库备份 完整的数据库备份还原
select count(*) from dbo.Y_档案 查看档案表条数
select * from dbo.Y_档案 查看档案表所有内容
backup database zhanglwto disk=‘D:\zhanglwDB\databackup.bak‘ 备份数据库
restore databasezhanglw from disk=‘D:\zhanglwDB\databackup.bak‘ 还原数据库
backup databasezhanglw to disk=’D:\backup\databackup.bak’ with init 覆盖原有数据库
备份(无with init 为追加备份)
2)简单创建备份设备(可以创建备份设备代替完整的备份文件路径)
图形界面 “服务器设备”—“备份设备”创建然后“创建”
命令创建
use master
go
execsp_addumpdevice ‘disk’,’mybackupfile’,’c:\backup\zhanglwDB.bak’
3)中大型数据库备份还原
恢复模式(完整)能够使用事务日志恢复到出故障的那个时间点
备份策略完整备份(备份数据库和日志)+日志备份+日志备份+日志备份+日志备份
数据库恢复模式(完整)在完整数据库备份后从数据库备份开始以后的日志保留
如果从来没进行过数据库的完整备份,日志不保留和恢复简单模式一样(日志文件重复擦写)
命令还原数据库
查看数据库有几个备份
restore headeronly from disk=’c:\backup\20160121.bak’
还原数据库
restore database zhanglw fromdisk=c:\backup\20160121.bakwithfile=1,replace,norecovery
(还需要用日志再还原 所以写norecovery)
还原日志
restore logzhanglw from disk=’c:\backup\20160121.bak’ with file=2,replace,norecovery
restore log zhanglwfrom disk=’c:\backup\20160121.bak’ with file=3,replace,recovery
(还原最后一个日志需要norecovery变为recovery)
数据库损坏的情况下备份日志文件:
backup log zhanglw todisk=’c:\backup\20160121.bak’ with no_truncate
二、截断事务日志
备份日志释放了不活跃的VLF,增加了日志的可用空间
截断事务日志释放日志占用的磁盘空间
- backup log zhanglw to disk=’c:\backup\20160121.bak’ 将没有活跃事务的VLF变为可用
空间日志文件不能变小
- backup log zhanglw with no_log 截断事务日志,收缩日志文件,释放磁盘空间
- 手动收缩日志文件
- 对数据库再进行完整备份
三、差异备份
- 将数据库恢复模式设置为完整
- 备份策略完整数据库备份+日志备份+差异备份+日志备份+差异备份+日志备份
差异备份实验
- 创建数据库创建表插入10条记录
- 完整数据库备份
- 插入10条记录做日志备份
- 插入10条记录做数据库差异备份
backupdatabase zhanglw to disk=’c:\backup\20160121.bak’ with Differential
- 插入10条记录做日志备份
- 插入10条记录做数据库差异备份
- 还原选择完整备份,在选择最后一次差异备份还原即可
四、大型数据库备份策略
完整数据库备份+日志备份+主数据文件备份+日志备份+副数据文件备份+日志备份+
数据库出现故障后备份的日志
- 创建数据库添加一个副数据库文件zhanglw1
- 创建表插入10条记录
- 完整数据库备份
backupdatabase zhanglw to disk=’c:\backup\20160121.bak’
- 插入10条记录
- 进行日志备份
backuplog zhanglw to disk=’c:\backup\20160121.bak’
- 备份主数据库文件
backupdatabase zhanglw file=’zhanglw’ to disk=’c:\backup\20160121.bak’
- 插入10条记录
- 备份日志
- 插入10条记录
- 备份副数据库文件zhanglw1
backup databasezhanglw file=’zhanglw1’ to disk=’c:\backup\20160121.bak’
11、插入10条记录
12、备份日志
13、插入10条记录
还原数据库的过程
- 备份数据库文件损坏后的日志
backup log zhanglw todisk=’c:\backup\20160121.bak’ with no truncate
- 还原副数据库文件zhanglw1
- 选择还原文件和文件组和日志
五、使用多硬盘备份文件,提高备份速度
exec sp_addumpdevice’disk’,’a1’,’c:\a1.bak’
execsp_addumpdevice’disk’,’a2’,’e:\a2.bak’
backup database zhanglw to a1,a2 withmedianame=’a12’
还原数据库
restoredatabase zhanglw from a1,a2 with replace
六、创建数据库备份的镜像备份
- 创建两个备份设备
use master
go
execxp_cmdshell ‘mkdir c:\backuporginal’
execxp_cmdshell ‘mkdir c:\backupmirror’
execsp_addumpdevice’disk’,’backuporginal’,’c:\backuporginal\backuporginal.bak’
exec sp_addumpdevice’disk’,’backupmirror’,’e:\backupmirror\backupmirror.bak’
- 备份
backup databasezhanglw to backuporginal mirror to backupmirror with format
- 使用其中的任意一个还原
restore databasezhanglw from backuporginal with replace
restoredatabase zhanglw from backupmirror with replace
七、SQL2005数据库快照
- 对数据库进行危险操作之前需要做快照,使用快照还原数据库
- 想要对某个时间点的数据库中的数据进行分析
创建数据库快照
CREATE DATABASE zhanglw1400 ON
( NAME = N‘zhanglw‘, FILENAME =
N‘c:\snapshot\zhanglw_1200.ss‘)
AS SNAPSHOT OF zhanglw
GO
恢复快照
RESTORE DATABASE zhanglw
FROM DATABASE_SNAPSHOT = ‘zhanglw1400‘
GO
八、 备份还原master数据库
1、备份系统数据库
backup databasemaster to disk=‘C:\backup\masterbackup.bak‘
2、停止SQL服务
C:\Documents andSettings\Administrator>net stop mssqlserver
3、以单用户模式启动SQLServer
4、在命令提示符下输入sqlcmd 还原master数据库
restore database master from disk=‘C:\backup\masterbackup.bak‘