2

我有一个相当大的数据库(用于我们的硬件设置)并且正在尝试进行镜像。我似乎无法使主数据库和镜像数据库足够接近同步以允许启动镜像。

完整备份大约需要 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

**复制文件**


***注意:我更改了主数据库恢复语句以允许稍后正确恢复日志文件。改变了

有了 NORECOVERY,

更换,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

我收到以下错误:

消息 4305,级别 16,状态 1,第 53 行 此备份集中的日志从 LSN 61063000000325800001 开始,该位置太新,无法应用于数据库。可以还原包含 LSN 61063000000117800001 的早期日志备份。消息 3013,级别 16,状态 1,第 53 行 RESTORE LOG 异常终止。

任何想法我错过了什么???

TIA

4

1 回答 1

3

在第一个脚本中,您只想进行完整备份。在这两个脚本中,不要每次都将恢复设置为完全,而是检查它是否已完全,如果它没有停止,那么您将需要找出谁在更改恢复模式。在镜像上使用您显示的脚本仅恢复完整备份 返回主体并进行日志备份 在镜像上使用 norecovery 恢复日志。

于 2011-06-11T11:04:39.160 回答