前段时间9月24日因为本身的误操做误删除了SQL Server2005数据库一个表的数据...人生第一次误删数据!当时紧张恐慌而后胃疼...最终在同事的帮助下经过完整备份和事务日志备份恢复了,为了搞明白原理趁着想学的劲上网学习,根据本身的理解作了笔记和实验,供你们参考,有问题多多指教。
sql
1.完整备份+日志备份数据库
2.完整备份+差别备份+日志备份服务器
1. SQL Server 把事务日志文件划分为多个VLF(Virtual LogFile),即虚拟日志文件ide
2.虚拟日志文件是能够从新使用的空间的单位。只能截断仅包含不活动日志记录的虚拟日志文件。不能截断事务日志的活动部分(“活动日志”)学习
3.事务日志是一种回绕的文件。当建立数据库时,逻辑日志文件从物理日志文件的始端开始。新日志记录被添加到逻辑日志的末端,而后向物理日志的末端扩张。测试
4.经过删除不活动的虚拟日志文件来释放逻辑日志中的空间。spa
1.完整模式:可以利用事务日志让数据库恢复到出故障时间点或指定时间点命令行
2.大容量日志:数据库日志不记录对数据修改的时间能够恢复到故障点 效率高可是没法恢复到指定时间点3d
3.简单:经过覆盖重复利用不活跃的逻辑日志文件 不能利用日志还原rest
注:当选用完整恢复模式时,若是历来没有对数据库进行完整备份,数据文件会增加可是事务日志文件不会增加,由于事务日志不知道起点,因此会经过覆盖重复利用已有的日志文件,若是执行过完整备份后,以后的日志都会保留,事务日志就会增加
1.命令行建立
use master
go
exec sp_addumpdevice 'disk','备份设备名称','实际备份路径,例:e:\test.bak'
2.图形建立
经过点击服务器对象而后点击备份设备来建立
3.使用
backup database test to 备份设备名称
restore database test from 备份设备名称
1.数据备份
backup database test to disk='d:\test.bak'
2.事务日志备份
backup log test to disk='d:\test.bak'
3.查看备份中的文件以及备份的类型等详细信息
restore headeronly from disk='d:\test.bak'
4.命令行使用完整和事务日志还原
restore database test fromdisk='d:\test,bak' with file=1,replace,norecovery
restore log test from disk='d:\test,bak'with file=2,replace,norecovery
restore log test from disk='d:\test,bak'with file=3,recovery
5.还原指定时间点
restore log test from disk='d:\test,bak'with file=3,recovery,stopat='2015-09-30 15:31:000'
6.参数含义:
file:表示要恢复数据文件的位置
replace:表示覆盖现有数据库
norecovery:表示还原后没有提交的事务不进行回滚,即还有可能要继续使用事务日志还原
Differential: 表示使用差别备份
init:表示进行覆盖已经有的备份文件
noinit:表示进行追加已经有的备份文件(默认)
7.截断事务日志命令
backup log test with no_log
截断后能够手动收缩日志文件
截断并不减少物理日志文件的大小,减少日志文件的物理大小须要收缩文件。
事务日志备份会截断日志,释放了不活跃的VLF 增长了日志的可用空间
注:手动截断事务日志必定要谨慎!注意备份操做!
8.查看在线事务日志信息
select * from SYSFILES
它的文件后缀名通常是.LDF
9.差别备份的命令
backup database test to disk='d:\test.bak'with Differential
“结尾日志备份”捕获还没有备份的任何日志记录(“结尾日志”),以防丢失所作的工做并确保日志链完整无缺。在将 SQL Server 数据库恢复到其最近一个时间点以前,必须先备份数据库的事务日志。结尾日志备份将是数据库还原计划中相关的最后一个备份。
建立测试库命名为test
create database test
建立测试表命名为test
use test
create table test (id int, name varchar(10))
insert into test values (1,'zhangsan')
insert into test values (2,'lisi')
backup database test to disk='c:\backup\test.bak' with init
注:想利用事务日志恢复到指定时间点,数据库的恢复模式必须是完整模式
insert into test values (3,'wangwu')
backup log test to disk='c:\backup\test_log1.bak'
insert into test values (4,'zhaoliu')
drop table test
注:插入数据的时间和删除操做的时间点要记清楚,为了实验操做方便最好间隔几分钟
use master
backup log test to disk='c:\backup\test_log2.bak'with norecovery
注:为了演示备份的这个过程,我把完整备份和事务日志备份以及尾部日志备份的恢复操做分开来操做的,固然也能够用上面提到的命令恢复更快更方便。我这里用的测试机直接进行备份恢复模拟的实验来讲明原理,实际工做须要根据实际状况,最好不要直接在生产数据库上作恢复操做