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


12

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

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
ブログ= 0x5adb215a bnext = 0x0000000000000000          

ページヘッダー:


ページ@ 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
メタデータ: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)=割り当て済みSGAM(1:511233)=割り当てなし     
PFS(1:744096)= 0x40 ALLOCATED 0_PCT_FULL DIFF(1:511238)=変更されていません
ML(1:511239)= 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)です。


この質問へのコメントはチャットに移動しました
ポールホワイト9

回答:


9

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

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

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

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

これは非常にまれなケースでしたDBCC CHECKDB 。失敗することはよくありますが、バックアップは成功します。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.