SQL 服务器 :: msdb.dbo.backupset 中未记录完整备份且日志文件异常大
SQL Server :: FULL backup not recorded in msdb.dbo.backupset and log file unusually large
我有一台 运行ning SQL Server 2019 的服务器,但数据库仍在 Compatibility level 110
上(所以这基本上意味着 SQL Server 2012)。
我们每晚都进行完整备份,我确实每天都看到文件备份在正确的文件夹中。但是如果我 运行 this query ,我添加 backup_finish_date desc
来检查最后一次完整备份的时间,我看到日期是几个月前的:
所以我发现 this guide 说它可能是 SQL 服务器中的一个错误,并要求 运行 这个检查:
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."
对我来说很好,看起来像 database_backup_lsn column is not 0
和 is_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
结果什么都没有!
指南说:“...如果此查询 returns 有任何结果,则表示您在报告日期后没有良好的数据库备份。”
所以现在我担心我们的备份搞砸了。我们使用 CHECKSUM
进行备份,但我们已经 运行 DBCC CHECKDB
很久没有备份了,所以我们可能(使用 CHECKSUM
成功地)对损坏的数据库进行备份。让我们 运行:
DBCC CHECKDB('msdb') WITH NO_INFOMSGS, ALL_ERRORMSGS
结果什么也没有,所以看起来一切都很好。
同时日志文件的大小 (155GB) 与 514GB 的数据文件大小相比显得异常大
编辑:
我每晚进行完整备份,每小时进行一次日志备份
编辑 2:
Brent Ozar 建议 运行 SELECT name, log_reuse_wait_desc FROM sys.databases;
结果我几乎到处都有 NOTHING
:
...解决方案是:
我们使用 Always On availability groups
并且备份是在故障转移环境(副本服务器)上进行的。
我在网上看到很多与我类似的问题,但他们并没有真正的答案。我相信我不是唯一遇到这个问题的人
我有一台 运行ning SQL Server 2019 的服务器,但数据库仍在 Compatibility level 110
上(所以这基本上意味着 SQL Server 2012)。
我们每晚都进行完整备份,我确实每天都看到文件备份在正确的文件夹中。但是如果我 运行 this query ,我添加 backup_finish_date desc
来检查最后一次完整备份的时间,我看到日期是几个月前的:
所以我发现 this guide 说它可能是 SQL 服务器中的一个错误,并要求 运行 这个检查:
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."
对我来说很好,看起来像 database_backup_lsn column is not 0
和 is_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
结果什么都没有!
指南说:“...如果此查询 returns 有任何结果,则表示您在报告日期后没有良好的数据库备份。”
所以现在我担心我们的备份搞砸了。我们使用 CHECKSUM
进行备份,但我们已经 运行 DBCC CHECKDB
很久没有备份了,所以我们可能(使用 CHECKSUM
成功地)对损坏的数据库进行备份。让我们 运行:
DBCC CHECKDB('msdb') WITH NO_INFOMSGS, ALL_ERRORMSGS
结果什么也没有,所以看起来一切都很好。
同时日志文件的大小 (155GB) 与 514GB 的数据文件大小相比显得异常大
编辑:
我每晚进行完整备份,每小时进行一次日志备份
编辑 2:
Brent Ozar 建议 运行 SELECT name, log_reuse_wait_desc FROM sys.databases;
结果我几乎到处都有 NOTHING
:
...解决方案是:
我们使用 Always On availability groups
并且备份是在故障转移环境(副本服务器)上进行的。
我在网上看到很多与我类似的问题,但他们并没有真正的答案。我相信我不是唯一遇到这个问题的人