web-dev-qa-db-ja.com

バックアップは破損を検出しますが、CHECKDBは検出しません

バックアップコマンドを実行したときにデータベースがある

BACKUP DATABASE [MyDatabase] TO     
DISK =  'G:\Backup\MyDatabase_01_01_2018.bak'   
WITH    NOFORMAT, NOSKIP, COMPRESSION, INIT, BUFFERCOUNT = 100

エラーメッセージが表示される

メッセージ3043、レベル16、状態1、行8
バックアップ「MyDatabase」は、ファイル「F:\ Data\MyDatabase_1.ndf」のページ(1:745345)でエラーを検出しました。
メッセージ3013、レベル16、状態1、行8
BACKUP DATABASEが異常終了しています。

完全なCHECKDBを実行しましたが、正常に戻りました。ページ検証オプションが(自分ではなく)NONEに設定されていることに気付いたので、それをCHECKSUMに変更し、DB内のすべてのインデックスを再構築して、すべてのページに書き込み、チェックサムを生成しました。この後もバックアップは失敗し、checkdbはまだクリーン(変更がない)を示しています。

DBCC CHECKDB('MyDatabase') WITH NO_INFOMSGS, ALL_ERRORMSGS,
DATA_PURITY, EXTENDED_LOGICAL_CHECKS;

sQLログから:

DBCC CHECKDB(MyDatabase)with all_errormsgs、no_infomsgs、xxxによって実行されたdata_purityは0エラーを検出し、0エラーを修復しました。経過時間:0時間21分46秒。内部データベースのスナップショットには、分割ポイントLSN = 000ab776:0000112f:0001と最初のLSN = 000ab776:0000112d:0001があります。

DBCC PAGEを実行しましたが、エラーが発生しました(最初から正しいページが返されていないようです)。印刷オプション2で実行でき、戻りますが、正直なところ、何を探しているのかわかりません。

DBCC PAGE ('MyDatabase',1,745345,3)
ページ:(3:513793)
 
バッファ:
 
 
 BUF @ 0x00000003811F8280 
 
 bpage = 0x00000000F2D70000 bhash = 0x0000000000000000 bpageno =(1:745345)
 bdbid = 5 breferences = 0 bcputicks = 0 
 bsampleCount = 0 bUse1 = 44283 bstat = 0x809 
 blog = 0x5adb215a bnext = 0x0000000000000000 
 
 PAGE HEADER:
 
 
 Page @ 0x00000000F2D70000 
 
 m_pageId =(3: 513793)m_headerVersion = 1 m_type = 2 
 m_typeFlagBits = 0x4 m_level = 0 m_flagBits = 0x0 
 m_objId(AllocUnitId.idObj)= 1075937538 m_indexId(AllocUnitId.idInd)= 2 
 Metadata: AllocUnitId = 633462595911680メタデータ:PartitionId = 0 
メタデータ:IndexId = -1メタデータ:ObjectId = 0 m_prevPage =(3:513795)
 m_nextPage =(3:513820)pminlen = 17 m_slotCnt = 426 
 m_freeCnt = 2 m_freeData = 7338 m_reservedCnt = 0 
 m_lsn =(608841:643611:411)m_xactReserved = 0 m_xdesId =(0:0)
 m_ghostRecCnt = 0 m_tornBits = 0 DB Frag ID = 1 
 
割り当てステータス
 
 GAM(1:511232)= ALLOCATED SGAM(1:511233)= NOT ALLOCATED 
 PFS(1:744096)= 0x40 ALLOCATED 0_PCT_FULL DIFF(1:511238)= NOT CHANGED 
 ML(1:511239)= NOT MIN_LOGGED 

メッセージ2514、レベル16、状態8、行20
DBCC PAGEエラーが発生しました:無効なページメタデータ-ダンプスタイル3は不可能です。

次に試すことができるアイデアはありますか?サーバーのバージョンは

select @@version
 Microsoft SQL Server 2014(SP2-CU11)(KB4077063)-12.0.5579.0(X64)
 2018年2月21日12:19:47 
 Copyright(c)Microsoft Corporation 
 Windows NT 6.3(ビルド9600 :)上のDeveloper Edition(64ビット)(ハイパーバイザー)

DBの互換性レベルは100(SQL 2008)です。

12
Element Zero

この回答は、Paul Randalが作成したSQLskills.comニュースレターの「ページチェックサムエラーでバックアップに失敗するが、DBCC CHECKDBに合格したデータベース」についての問題から引用したものです。

これが発生する可能性があるのは、エクステントが混合エクステントである場合のみです(エクステント内の8ページは、潜在的に8つの異なる割り当て単位に割り当てることができます– こちら を参照)および一部のページは、関連するPFSページによって割り当てられていると誤ってマークされます。

その場合、DBCC CHECKDBは、アロケーションユニットのIAMページ(最初のページは混合エクステントから割り当てられたページをリストする)から読み取るページを取得するため、これらのページを読み取ろうとしません。このケースは、DBCC CHECKDBの破損検出ロジックのギャップです。

[理由] DBCC CHECKDBは破損を検出できなかったため、修正に必要な修復を行うことができませんでした。したがって、 DBCC WRITEPAGE を使用して、誤って割り当てられたページの割り当てステータスに必要な変更を、PFSページで直接実行しました。

これは非常にまれなケースでした。DBCC CHECKDBは失敗するが、バックアップは成功することの方がはるかに一般的です。

私の意見では、Paulの解決策は、あなたがしたようにデータのエクスポートとインポートをはるかに超えているので、あなたは正しいことをしたと思います。

9
Randolph West