SQL Server ::完整备份未记录在msdb.dbo.backupset和日志文件中,异常大

问题描述

我有一台运行sql Server 2019的服务器,但是数据库仍在Compatibility level 110上(因此,这基本上意味着sql Server 2012)。

我们每天晚上都进行完整备份,我确实每天都看到文件备份在正确的文件夹中。但是,如果我运行this query,然后添加backup_finish_date desc来检查上一次完整备份的时间,那么我看到日期已经过去了几个月:

enter image description here

因此,我发现this guide表示这可能是sql Server中的错误,并要求运行此检查:

USE msdb
GO
SELECT server_name,database_name,backup_start_date,is_snapshot,database_backup_lsn
FROM backupset

“ ...结果中,请注意database_backup_lsn列和is_snapshot列。代表实际数据库备份操作的条目具有以下特征: database_backup_lsn列的值不为0。 is_snapshot列的值为0。“

enter image description here

对我来说都很好,看起来像database_backup_lsn column is not 0is_snapshot column is 0

然后,该指南说要运行此查询以验证备份的完整性:

WITH backupInfo AS( SELECT database_name AS [DatabaseName],name AS [BackupName],is_damaged AS [BackupStatus],backup_start_date AS [backupDate],ROW_NUMBER() OVER(PARTITION BY database_name 
ORDER BY backup_start_date DESC) AS BackupIDForDB 
FROM msdb..backupset) SELECT DatabaseName 
FROM backupinfo WHERE BackupIDForDB = 1 and BackupStatus=1 

enter image description here

结果一无所有!

该指南说:“ ...如果此查询返回任何结果,则表示在报告日期之后您没有良好的数据库备份。”

所以现在我担心我们的备份搞砸了。我们使用CHECKSUM进行备份,但是由于没有运行DBCC CHECKDB很久了,因此我们可能(成功并使用CHECKSUM)来备份损坏的数据库。让我们运行:

DBCC CHECKDB('msdb') WITH NO_INFOMSGS,ALL_ERRORMSGS

enter image description here

结果什么都没有,所以看起来一切都很好。

同时,与514GB的数据文件相比,日志文件(155GB)的大小显得异常大

编辑:

我每晚都进行完整备份,每小时进行一次日志备份

编辑2:

布伦特·奥扎尔(Brent Ozar)建议运行SELECT name,log_reuse_wait_desc FROM sys.databases;,结果我到处都有nothing

enter image description here

解决方法

...解决方案是:

我们使用#include <stdlib.h> // ... int *pA = malloc((sizeof *pA) * length); if ( !pA ) { // Deal with the failed allocation,maybe exit(1) } // ... free(pA); // <- Don't leak memory! ,并且备份是在故障转移环境(副本服务器)上进行的。

我在网络上看到很多与我相似的问题,但他们并没有真正的答案。我相信我不是唯一遇到此问题的人