关于数据库的差异备份和还原

时间:2021-05-13 14:10:52

问题如下:

数据库环境:
Windows Server 2003 R2
SQL Server 2005
企业版 32+SP2补丁
数据库有全文索引每周完整备份,每天差异备份
现在操作 还原 完整备份+与完整备份匹配的差异备份  
在集群服务器上(64)还原失败,在本地计算机上(32)还原失败,想问一下是什么原因导致这个情况的产生,如何修复?
注:在还原完整备份+完整备份后的第一个差异备份成功
还原完整备份+完整备份后的非第一个差异备份 失败

以下为还原方法:

SQL code

--还原完整备份-------成功

RESTORE DATABASE [w] FROM  DISK = N'E:/bak/Words/Words_backup_200907050000.bak' WITH  FILE = 1, 

    MOVE N'Words' TO N'D:/database/w.mdf', 

    MOVE N'Words_log' TO N'D:/database/w_1.ldf', 

    MOVE N'sysft_Words_FullIndex' TO N'D:/database/w_2.Words_FullIndex', 

    NORECOVERY,  NOUNLOAD,  STATS = 10

GO

/*---------------成功

 

已处理百分之 10

已处理百分之 20

已处理百分之 30

已处理百分之 40

已处理百分之 50

已处理百分之 60

已处理百分之 70

已处理百分之 80

已处理百分之 90

已为数据库 'w',文件 'Words' (位于文件 1 )处理了 243792 页。

已为数据库 'w',文件 'Words_log' (位于文件 1 )处理了 1 页。

已为数据库 'w',文件 'sysft_Words_FullIndex' (位于文件 1 )处理了 4208 页。

已处理百分之 100

RESTORE DATABASE 成功处理了 248001 页,花费 139.573 (14.555 MB/)

*/

 

 

--还原差异备份---------失败

RESTORE DATABASE [w] FROM  DISK = N'E:/bak/Words/Words_backup_200907090100.diff' WITH  FILE = 1, 

    MOVE N'Words' TO N'D:/database/W.mdf', 

    MOVE N'Words_log' TO N'D:/database/W_1.ldf', 

    MOVE N'sysft_Words_FullIndex' TO N'D:/database/w_2.Words_FullIndex', 

    NOUNLOAD,  STATS = 10

GO

 

/*--------------失败

 

消息 3136,级别 16,状态 1,第 1

无法还原此差异备份,因为该数据库尚未还原到正确的早期状态。

消息 3013,级别 16,状态 1,第 1

RESTORE DATABASE 正在异常终止。

 

自己查下在你的差异备和指定全备之间是否还有全备吧:

select  server_name   ,                                                         --'服务器名'

database_name     ,                                                    

round(backup_size/1024.0/1024.0 , 2) as backup_size ,                  

backup_start_date      ,                                               

backup_finish_date    ,                                               

datediff(second , backup_start_date , backup_finish_date) as spendtime ,

type,                                                                   

m.physical_device_name  ,                                               

getdate()                                                

from msdb.dbo.backupset b join msdb.dbo.backupmediafamily m on b.backup_set_id = m.media_set_id

where  backup_start_date > = '2009-07-01 15:39:30.933' --在这里修改时间

order by database_name,backup_start_date

 

总结:中间还有一次全量备份,破坏了我的完整备份和差异备份的连接点,