web-dev-qa-db-ja.com

データベースの疑わしいステータスですが、Ola Hallengrenバックアップジョブは正常に完了しました

SQL Serverの環境では、Ola Hallengrenの SQL Server Backup ソリューションを使用しています。今日、[〜#〜] suspect [〜#〜]モードの2つのデータベースがあり、それらのバックアップは不可能でした。ジョブは、これらのデータベース(2つはサスペクトモードでした)ともう1つのデータベースのバックアップを取るようにスケジュールされています。オンラインDBのバックアップは、アルファベット順で最初から完了しており、他の2つは失敗しました。ただし、ジョブは失敗せず、ジョブが成功したことを示しました!ジョブは、データベースのバックアップの作成に失敗した場合、失敗するはずです

enter image description herehttps://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がありません。バックアップが失敗したこと、およびログ全体を検索する必要があることを通知できる不完全なコマンドステートメントのみがあり、失敗のログコンテンツでキーワード検索の概念を使用できる場合、あらゆる種類のレポートは不可能です。

これらの解決策を教えていただければ幸いです。

2

問題は簡単に再現されました。

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())

私の提案は、すべてのデータベースがバックアップされていることを確認するジョブステップを追加し、問題の状況が検出された場合にジョブを強制的に異常終了させることです。

5
Scott Hodgin

疑わしいデータベースをチェックする新しいバージョンをリリースしました。 https://ola.hallengren.com/versions.html

0
Ola Hallengren