バックアップコマンドを実行したときにデータベースがある
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)です。
この回答は、Paul Randalが作成したSQLskills.comニュースレターの「ページチェックサムエラーでバックアップに失敗するが、DBCC CHECKDB
に合格したデータベース」についての問題から引用したものです。
これが発生する可能性があるのは、エクステントが混合エクステントである場合のみです(エクステント内の8ページは、潜在的に8つの異なる割り当て単位に割り当てることができます– こちら を参照)および一部のページは、関連するPFSページによって割り当てられていると誤ってマークされます。
その場合、
DBCC CHECKDB
は、アロケーションユニットのIAMページ(最初のページは混合エクステントから割り当てられたページをリストする)から読み取るページを取得するため、これらのページを読み取ろうとしません。このケースは、DBCC CHECKDB
の破損検出ロジックのギャップです。[理由]
DBCC CHECKDB
は破損を検出できなかったため、修正に必要な修復を行うことができませんでした。したがって、DBCC WRITEPAGE
を使用して、誤って割り当てられたページの割り当てステータスに必要な変更を、PFSページで直接実行しました。これは非常にまれなケースでした。
DBCC CHECKDB
は失敗するが、バックアップは成功することの方がはるかに一般的です。
私の意見では、Paulの解決策は、あなたがしたようにデータのエクスポートとインポートをはるかに超えているので、あなたは正しいことをしたと思います。