日期:2014-05-18  浏览次数:20497 次

差异备份及其恢复的问题。
A机器对一数据库做完整备份后,定期做增量备份。
B机器将最初的完整备份进行完全恢复,并选择NORECOVERY。之后对增量备份进行还原。因为每次对增量备份还原后要求使用数据库,所以用了RECOVERY。但问题来了,难道我每一次做增量备份的还原操作时,都要进行一次完整备份的完全恢复吗?
有什么办法可以让数据库的状态变成NORECOVERY,那么我就可以直接做增量备份的还原了。

各位有什么高见,不妨赐教,谢谢了。

------解决方案--------------------
增量备份需要最近一次的完整备份的 这个木有办法。
------解决方案--------------------
B机器应该还原成一个只读库就可以了 .这个库都是从A的备份里还原的.
------解决方案--------------------
测试代码如下,
SQL code

-- 建测试数据库wangl
create database wangl

-- 改为简单恢复模式
alter database wangl set recovery simple

-- 打开数据库wangl
use wangl

-- 建测试表wangl001
create table wangl001(id int)

-- 插入测试数据(1)
insert into wangl001(id) values(1)

-- 数据库全备份
backup database wangl to disk='D:\wangl_full.bak' with format,init

-- 插入测试数据(2)
insert into wangl001(id) values(2)

-- 数据库差异备份
backup database wangl to disk='D:\wangl_diff1.bak' with DIFFERENTIAL

-- 插入测试数据(3)
insert into wangl001(id) values(3)

-- 数据库差异备份
backup database wangl to disk='D:\wangl_diff2.bak' with DIFFERENTIAL



-- 删除数据库wangl
use master
drop database wangl

-- 用全备份还原,用standby参数
restore database wangl_B from disk='D:\wangl_full.bak' 
with replace,standby='D:\wangl_temp.trn'

-- 可以查询
select * from wangl_B.dbo.wangl001

id
-----------
1

-- 用差异备份还原
restore database wangl_B from disk='D:\wangl_diff1.bak' 
with standby='D:\wangl_temp.trn'

-- 可以查询
select * from wangl_B.dbo.wangl001

id
-----------
1
2

-- 继续用差异备份还原
restore database wangl_B from disk='D:\wangl_diff2.bak' 
with standby='D:\wangl_temp.trn'

-- 依然可以查询
select * from wangl_B.dbo.wangl001

id
-----------
1
2
3

-- 还原为recovery状态.
restore database wangl_B from disk='D:\wangl_diff2.bak' 
with recovery

-- 依然可以查询
select * from wangl_B.dbo.wangl001

id
-----------
1
2
3