数据库版本 SQL SERVER 2012 企业版,版本号:11.0.5582.0
问题场景: 数据库配置Alwayson环境,同机房2节点同步自动切换+跨机房异步,在异步机房中选取同一节点做完整备份和日志备份,完整备份为COPY_ONLY方式,完整备份从0:35开始至1:40成功结束,日志备份从00:00开始每15分钟一次日志备份。DBA在0:48左右手动对数据库日志文件进行一次收拾操作,收缩操作顺利完成,未报任何错误。主数据库处于正常提供服务,每15分钟产生约200MB的日志备份文件(压缩备份方式)。
下面是备份出错情况:
0:30 备份成功
0:45 备份成功
1:00 备份成功
1:15 备份失败
1:30 备份失败
1:45 备份成功
错误信息:
2017-01-16 01:15:09.59 *** 错误: 备份 对于 服务器“SERVER_XXXX”失败。 (Microsoft.SqlServer.SmoExtended) ***
2017-01-16 01:15:09.59 *** 错误: 执行 Transact-SQL 语句或批处理时发生了异常。(Microsoft.SqlServer.ConnectionInfo) ***
2017-01-16 01:15:09.59 *** 错误: 辅助副本上数据库“DB_XXX”的日志备份失败,因为来自主数据库的最后一个备份 LSN (0x000840fc:00000420:0001)大于当前本地重做 LSN (0x000840fc:00000418:0001)。此时不需要备份任何日志记录。请在以后重试该日志备份操作。
BACKUP LOG 正在异常终止。(.Net SqlClient Data Provider) ***
该问题在无人干涉条件下自动恢复,因事务日志备份作业失败被发现。
--=========================================================================--
原因猜测:
单独对类似配置的数据库做日志文件收拾操作不会有类似问题,而单独对类似配置的数据库做COPY_ONLY也不会出现问题,很有可能是因为在做COPY_ONLY的完整备份时做日志文件收缩导致。
虽然COPY_ONLY从字面意思上理解不会对日志文件有任何影响,但完整备份期间会影响到CHECKPOINT操作,CHECKPOINT操作又影响到数据库日志,由于在辅助节点上进行完整备份,因此主节点和辅助节点之间必定达成一致来避免CHECKPOINT问题,但此时DBA手动执行数据库日志收缩被当成“一个事务日志备份”来处理,因此报主数据库最后一个备份LSN大于本地重做LSN。
最后当完整COPY_ONLY备份完成后,主数据库上的最后一个备份LSN被调整会正确状态,从而默默地修复了该问题。
--=========================================================================--
夜深啦,随便找个妹子镇贴,各位凑合下!