2011-06-10 68 views
2

我有一个相当大的数据库(用于我们的硬件设置),并且试图让镜像继续下去。我似乎无法将主数据库和镜像数据库同步到足够近以允许镜像启动。SQL日志备份 - “最近不适用于数据库”

完整备份大约需要10分钟,再加上8分钟才能将BAK传输到镜像服务器,另外需要10分钟才能将其恢复。所以,要尽量把事情尽可能靠近在一起,我能我也照本宣科了以下工作:

**在主**

SET NOCOUNT ON 
USE master 


DECLARE @dbFileName  VARCHAR(75) 
     , @logFileName VARCHAR(75) 

SELECT @dbFileName  = 'F:\SQL_Backups\RIVFramework_Prod1\Mirror\prod1.mdf.' + CONVERT(VARCHAR(10), GETDATE(), 102) + '.bak' -- formats date in YYYY.MM.DD -- 
SELECT @logFileName = 'F:\SQL_Backups\RIVFramework_Prod1\Mirror\prod1.ldf.' + CONVERT(VARCHAR(10), GETDATE(), 102) + '.bak' -- formats date in YYYY.MM.DD -- 

SELECT @dbFileName  
SELECT @logFileName  

/** 
** 1 - Make sure your database is in full recovery mode 
**/ 
ALTER DATABASE RIVFramework_Prod1 
SET RECOVERY FULL 

/** 
** 2 - Backup the database 
**/ 
BACKUP DATABASE RIVFramework_Prod1 
TO DISK = @dbFileName 

/** 
** 3 - Backup the database log 
**/ 
BACKUP LOG RIVFramework_Prod1 
TO DISK = @logFileName 

SET NOCOUNT OFF 

**复制文件**


***注意:我更改了主数据库恢复语句,以便日后文件能够正确恢复。改变

WITH NORECOVERY,

WITH REPLACE, NORECOVERY,


**上镜**

SET NOCOUNT ON 
USE master 

/** 
** Restore backup to Mirror server: 
** MIRROR SERVER 
** 4 - Restore to the mirror database with no recovery option 
**/ 
RESTORE DATABASE RIVFramework_Prod1 
FROM DISK = 'F:\XFer\prod1.mdf.2011.06.10.bak' 
WITH REPLACE, NORECOVERY, -- You need to have both options in here so the later log file restore works. 
MOVE 'RIVFramework_Prod1' TO 'F:\SQL2008\RIVFramework_Prod1.mdf', 
MOVE 'CampaignAnalytics' TO 'F:\SQL2008\RivFramework_Prod1_CampaignAnalytics.ndf', 
MOVE 'SalesAnalytics' TO 'F:\SQL2008\RivFramework_Prod1_SalesAnalytics.ndf', 
MOVE 'RIVFramework_Prod1_log' TO 'G:\SQL2008\RIVFramework_Prod1_log.ldf' 


/** 
** 5 - Restore the mirror database logs with no recovery 
**/ 
RESTORE LOG RIVFramework_Prod1 
FROM DISK = 'F:\XFer\prod1.ldf.2011.06.10.bak' 
WITH NORECOVERY 
GO 

现在,我约30分钟不同步。所以,我做的:

**在主**

SET NOCOUNT ON 
USE master 


DECLARE @logFileName VARCHAR(75) 

SELECT @logFileName = 'F:\SQL_Backups\RIVFramework_Prod1\Mirror\prod1.ldf.a.' + CONVERT(VARCHAR(10), GETDATE(), 102) + '.bak' -- formats date in YYYY.MM.DD -- 

SELECT @logFileName  

/** 
** 1 - Make sure your database is in full recovery mode 
**/ 
ALTER DATABASE RIVFramework_Prod1 
SET RECOVERY FULL 

/** 
** 3 - Backup the database log 
**/ 
BACKUP LOG RIVFramework_Prod1 
TO DISK = @logFileName 

SET NOCOUNT OFF 

**复制文件**

**上镜**

SET NOCOUNT ON 
USE master 

/** 
** 5 - Restore the mirror database logs with no recovery 
**/ 
RESTORE LOG RIVFramework_Prod1 
FROM DISK = 'F:\XFer\prod1.ldf.a.2011.06.10.bak' 
WITH NORECOVERY 
GO 

而且我迎接以下错误:

Msg 4305, Level 16, State 1, Line 53 The log in this backup set begins at LSN 61063000000325800001, which is too recent to apply to the database. An earlier log backup that includes LSN 61063000000117800001 can be restored. Msg 3013, Level 16, State 1, Line 53 RESTORE LOG is terminating abnormally.

任何想法我失踪?

TIA

回答

3

在你想做一个完全备份的第一个脚本。 在这两个脚本中,不要每次都将恢复设置为满,但要检查它是否已全部完成,如果尚未停止,则需要确定谁正在更改恢复模式。 在镜像中使用您显示的脚本仅恢复完整备份 返回到prinicpal并执行日志备份 在镜像中使用norecovery恢复日志。

+0

当我使用REPLACE进行完全备份和恢复时,出现尝试恢复日志文件的错误:“数据库日志尾部”RIVFramework_Prod1“未备份。使用BACKUP LOG WITH NORECOVERY进行备份如果日志包含你不想丢失的工作,请使用RESTORE语句的WITH REPLACE或WITH STOPAT子句来覆盖日志的内容。“ – 2011-06-13 20:38:57

+0

当我使用NORECOVERY进行完整备份和恢复时,出现了我的问题中提到的错误。我错过了什么? – 2011-06-13 20:39:45

+0

我终于找到了我失踪的东西。当我恢复我的数据库(完全备份)时,我需要将其标记为REPLACE,NORECOVERY而不是NORECOVERY。这一个简单的改变治愈了我的大部分错误。 (请参阅我的问题中的说明) – 2011-06-14 15:05:20