Dev*_*ava 2 sql-server backup ola-hallengren
我们在我们的 SQL Server 环境中使用Ola Hallengren的SQL Server 备份解决方案。今天,有 2 个数据库处于SUSPECT模式,无法对它们进行备份。一项作业计划备份这些数据库(其中两个处于可疑模式)和另一个数据库。在线数据库的备份已完成,因为它是按字母顺序排列的第一个,对于其他两个,它失败了。但是,作业并没有失败,并且显示作业成功!如果该作业无法备份任何数据库,则该作业应该失败。
https://i.stack.imgur.com/n8Ww1.png
来自日志的消息:
Date and time: 2018-03-18 03:12:55
Database: [ABC]
Status: SUSPECT
Standby: No
Updateability: READ_WRITE
User access: MULTI_USER
Recovery model: FULL
Differential base LSN: 5334862000009909000054
Last log backup LSN: N/A
Date and time: 2018-03-18 03:12:55
Database: [CDE]
Status: SUSPECT
Standby: No
Updateability: READ_WRITE
User access: MULTI_USER
Recovery model: FULL
Differential base LSN: 4543119000022597000098
Last log backup LSN: N/A
Date and time: 2018-03-18 03:12:55
Run Code Online (Sandbox Code Playgroud)
另一种情况,数据库备份失败但它没有在日志中将其报告为[FAILED],这与在数据库备份成功时记录时不同 - 结果:成功。
我们如何从日志中获取失败备份的信息?没有标签或关键字,可搜索寻找,当备份失败的记录。只有不完整的命令语句可以告诉备份已失败,为此您必须搜索整个日志,并且在我们可以在日志内容中使用关键字搜索失败的概念的情况下,不可能进行任何类型的报告。
如果您能告诉我们这些问题的解决方案,那就太好了。
您的问题很容易重现。
我使用了创建可疑数据库中的代码在suspect我的本地实例上创建了一个数据库,然后运行了 Ola 的backup脚本。脚本执行没有错误(如您所述)。输出确实将数据库报告为suspect,但脚本没有错误。
Date and time: 2018-03-18 06:20:07
Database: [DemoSuspect]
Status: SUSPECT
Standby: No
Updateability: READ_WRITE
User access: MULTI_USER
Recovery model: SIMPLE
Encrypted: No
Differential base LSN: N/A
Last log backup LSN: N/A
Run Code Online (Sandbox Code Playgroud)
除了不备份suspect数据库之外,Ola Hallengren 的维护解决方案在(至少)三种情况下不会备份数据库。
一个主要由这个职位外卖是:
您应该始终仔细检查msdb 备份历史记录 或
master.dbo.CommandLog表,以确保进行了任何重要的备份。
有多种方法可以使用脚本中的示例来查询成功备份,以检索 SQL Server 数据库备份历史记录和无备份。例如,查找今天尚未备份的任何数据库。
SELECT d.NAME
,bck.last_db_backup_date
FROM sys.databases d
LEFT JOIN (
SELECT CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS SERVER
,msdb.dbo.backupset.database_name
,MAX(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_date
FROM msdb.dbo.backupmediafamily
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
WHERE msdb..backupset.type = 'D'
GROUP BY msdb.dbo.backupset.database_name
) bck ON bck.database_name = d.NAME
WHERE bck.last_db_backup_date IS NULL
OR convert(DATE, bck.last_db_backup_date) <> convert(DATE, sysdatetime())
Run Code Online (Sandbox Code Playgroud)
我的建议是添加一个额外的作业步骤来验证所有数据库都已备份,并在检测到问题情况时强制中止作业。
| 归档时间: |
|
| 查看次数: |
312 次 |
| 最近记录: |