好久没写技术博文了,上家公司创业公司太忙,几乎没时间写博文。最近入职新公司,开始重拾写博文的习惯。
今天在检查数据仓库服务器上的备份作业时发现SQL Server每晚11点执行数据库差异备份的维护计划一直都是报错状态,手动执行差异备份脚本同样提示错误。
BACKUP DATABASE [DW] TO DISK = N'G:DB_Backupdw_diff_backupDWackup_2021_06_02_143439_4790267.bak' WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'DW_backup_2021_06_02_143439_4790267', SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10
下面是报错信息
Msg 3035, Level 16, State 1, Line 2 Cannot perform a differential backup for database "DW", because a current database backup does not exist. Perform a full database backup by reissuing BACKUP DATABASE, omitting the WITH DIFFERENTIAL option. Msg 3013, Level 16, State 1, Line 2 BACKUP DATABASE is terminating abnormally. Completion time: 2021-06-03T09:28:59.1809444+08:00
说明一下服务器环境
OS:Windows Server 2016 Azure云服务器
SQL SERVER版本:2019
随后我去检查另外一个每周五晚上执行完整备份的维护计划作业,是正常运行的,也就是不存在说没有执行过完整备份的情况。接下里是DEBUG的步骤:
首先先检查SQL Server的备份历史记录
SELECT CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS server_name , bs.database_name , bs.backup_start_date , bs.backup_finish_date , bs.expiration_date , CASE bs.type WHEN 'D' THEN 'Full Backup' WHEN 'I' THEN 'Diff Backup' WHEN 'L' THEN 'Log Bacup' WHEN 'F' THEN 'File Backup' WHEN 'G' THEN 'File Diff' WHEN 'P' THEN 'Partial Backup' WHEN 'Q' THEN 'Partial Diff Backup' END AS backup_type , CASE bf.device_type WHEN 2 THEN 'Disk' WHEN 5 THEN 'Tape' WHEN 7 THEN 'Virtual Device' WHEN 105 THEN 'permanent backup device' END AS backup_media, bs.backup_size/1024/1024/1024 AS [backup_size(GB)] , bs.compressed_backup_size/1024/1024/1024 AS [compressed_backup_size(GB)], bf.logical_device_name , bf.physical_device_name , bs.name AS backupset_name , bs.first_lsn, bs.last_lsn, bs.checkpoint_lsn, bs.description FROM msdb.dbo.backupmediafamily bf INNER JOIN msdb.dbo.backupset bs ON bf.media_set_id = bs.media_set_id WHERE bs.database_name='W' ORDER BY bs.backup_start_date DESC;
结果发现每天凌晨2点都会有一条完整备份记录,但是备份的设备类型是Visual Device。显然这不是我们建的作业执行的。
而通过SQL SERVER Log又发现几乎也是每天凌晨2点都有日志提示“I/O is frozen on database DW”
我之前从来没有接触过这种情况,没想到通过百度居然找到了相关的问题案例,最后在 潇湘隐者 的博客找到了相关详细的资料。不愧是大牛。这里要感谢 潇湘隐者 分享了这么好的案例。
总结一下就是:
这类情况与VM灾备备份方案PlateSpin相关,而PlateSpin所调用的Windows VSS(卷影复制服务)会对SQL SERVER的日志LSN造成影响(体现在LSN日志链条中断),由于每周五晚23:00~次日4:00为数据库完整备份的时间,这段时间恰好与PlateSpin的数据库灾备作业重叠,从所了解到的网上资料案例判断,两者可能是互相影响而导致了LSN中断。从资料案例所得到的信息判断,我们的solution是禁用SQL Server VSS Writer这个服务(不会影响PlateSpin的DR作业)。
为了证实确实是PlateSpin造成的问题,我特地问了Azure Infra运维团队确认了确实每天凌晨会有PlateSpin去做灾备。
参考和资料引用:
https://www.cnblogs.com/kerrycode/p/9014661.html
https://www.cnblogs.com/kerrycode/archive/2016/09/23/5899802.html