SQL日志备份 - “太新了,无法应用于数据库”

时间:2011-06-10 22:55:46

标签: sql-server-2008 backup restore mirroring

我有一个相当大的数据库(用于我们的硬件设置),我正试图让Mirroring继续进行。我似乎无法使主数据库和镜像数据库足够接近,以允许启动镜像。

完整备份大约需要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   此备份集中的日志从   LSN 61063000000325800001,也是   最近申请数据库。一个   包含LSN的早期日志备份   61063000000117800001可以恢复。   Msg 3013,Level 16,State 1,Line 53   RESTORE LOG异常终止。

我想念的任何想法???

TIA

1 个答案:

答案 0 :(得分:3)

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