日期:2014-05-17  浏览次数:20621 次

SQL Server 2008的完全备份和差异备份到底有啥暗藏的玄机啊?
我使用SQL Server 2008的维护计划向导创建了一个备份任务,其中包含一个全备份的子任务,半个小时跑一次,备份的数据单独放到一个文件夹,接着又建立了一个差异备份的子任务,10分钟跑一次。备份的数据存到另外一个文件夹,然后没半个小时的全备份都跑的很Happy,大概九百多兆的数据都能备份上!接着我就更新数据库,在其中几张表中插入新数据,想看到差异备份的结果,结果一直都没有看到有差异备份成功啊!

按照SQL SERVER 官方文档的描述“差异备份所基于的是最近一次的完整备份。这称为差异“基准”。差异备份仅包括自建立差异基准后更改的数据。”,感觉配的没啥问题啊!好郁闷!


------解决方案--------------------
1)完全备份 
------------------------------------------- 
(1)是备份的基准。在做备份时第一次备份都建议使用完全备份。 
(2)完全备份会备份数据库的所有数据文件、数据对象和数据。 
(3)会备份事务日志中任何未提交的事务。因为已提交的事务已经写入数据文件中。 
-------------------------------------------- 
backup database d1 to bak1 with init    --完全备份 
backup database d1 to bak1 with noinit 
---------------------------------- 
2)差异备份 
--------------------------------------------- 
(1)基于完全备份。 
(2)备份自最近一次完全备份以来的所有数据库改变。 
(3)恢复时,只应用最近一次完全备份和最新的差异备份。 
----------------------------------------------- 
backup database d2 to bak2 with init,name='d2_full' --差异备份,第一次备份时应做完全备份 
create table b1(c1 int not null,c2 char(10) not null) 
backup database d2 to bak2 with differential,name='d2_diff1' 
insert b1 values(1,'a') 
backup database d2 to bak2 with differential,name='d2_diff2' 
insert b1 values(2,'b') 
backup database d2 to bak2 with differential,name='d2_diff3' 
insert b1 values(3,'c') 
backup database d2 to bak2 with differential,name='d2_diff4' 
restore headeronly from bak2 
---------------------------------- 
3)事务日志备份 
------------------------- 
(1)基于完全备份。 
(2)为递增备份,即备份从上一次备份以来到备份时所写的事务日志。 
(3)允许恢复到故障时刻或者一个强制时间点。 
(4)恢复时,需要应用完全备份和完全备份后的每次日志备份。 
------------------------- 
backup database d3 to bak3 with init,name='d3_full' --日志备份,第一次备份时应做完全备份 
create table b1(c1 int not null,c2 char(10) not null) 
backup log d3 to bak3 with 
insert b1 values(1,'a') 
backup log d3 to bak3 with 
insert b1 values(2,'b') 
backup log d3 to bak3 with 
insert b1 values(3,'c') 
backup log d3 to bak3 with 
restore headeronly from bak3 
---------------------------------- 
create table b1(c1 int not null,c2 char(10) not null)    --Full+Log+Diff 
backup log d4 to bak4 with 
insert b1 values(1,'a') 
backup log d4 to bak4 with 
insert b1 values(2,'b') 
backup database d4 to bak4 with differential,name='d4_diff1' 
insert b1 values(3,'c') 
backup log d4 to bak4 with 
insert b1 values(4,'d') 
backup log d4 to bak4 with 
insert b1 values(5,'d') 
backup database d4 to bak4 with differential,name='d4_diff2'