SQL Serverの環境では、Ola Hallengrenの SQL Server Backup ソリューションを使用しています。今日、[〜#〜] suspect [〜#〜]モードの2つのデータベースがあり、それらのバックアップは不可能でした。ジョブは、これらのデータベース(2つはサスペクトモードでした)ともう1つのデータベースのバックアップを取るようにスケジュールされています。オンラインDBのバックアップは、アルファベット順で最初から完了しており、他の2つは失敗しました。ただし、ジョブは失敗せず、ジョブが成功したことを示しました!ジョブは、データベースのバックアップの作成に失敗した場合、失敗するはずです。
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
DBバックアップが成功したときにログに記録する場合とは異なり、DBバックアップが失敗してもログに[FAILED]として報告しないもう1つのシナリオ-結果:成功。
失敗したバックアップの情報をログから取得するにはどうすればよいですか?ログでfailed backupsを検索するときに検索できるTagまたはKeywordがありません。バックアップが失敗したこと、およびログ全体を検索する必要があることを通知できる不完全なコマンドステートメントのみがあり、失敗のログコンテンツでキーワード検索の概念を使用できる場合、あらゆる種類のレポートは不可能です。
これらの解決策を教えていただければ幸いです。
問題は簡単に再現されました。
Creating a SUSPECT Database のコードを使用して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
suspect
データベースをバックアップしないことに加えて、(少なくとも) Ola HallengrenのMaintenance Solutionがバックアップしない3つのケースがあります。データベース 。
この投稿のMajorの要点は次のとおりです。
msdb backup history または
master.dbo.CommandLog
テーブルのいずれかを常にダブルチェックして、重要なバックアップが取られたことを確認する必要があります。
Scriptのサンプルを使用して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())
私の提案は、すべてのデータベースがバックアップされていることを確認するジョブステップを追加し、問題の状況が検出された場合にジョブを強制的に異常終了させることです。
疑わしいデータベースをチェックする新しいバージョンをリリースしました。 https://ola.hallengren.com/versions.html