今朝、次の電子メールアラートが受信されました:
日付/時刻:2018年2月28日9:26:42 AM
説明:データベース9の論理ページ(1:3948712)をフェッチしようとして失敗しました。これは、72059184917512192ではなく、アロケーションユニット72057594045857792に属しています。
コメント:(なし)
ジョブ実行:SQL Sentry 2.0アラートトラップ
セカンダリレプリカのイベントログを見ると、同じメッセージが3回発生しています。
ソースspid138
メッセージデータベース9の論理ページ(1:3948712)をフェッチしようとして失敗しました。これは、72059184917512192ではなく、アロケーションユニット72057594045857792に属しています。
セカンダリレプリカ(2ノードの同期可用性グループ)で以下を実行します。
DBCC TRACEON(3604)
dbcc page (9, 1,3948712,3)
go
DBCC TRACEOff(3604)
いずれかのレプリカの結果の抜粋:
Page @0x00000070DAB8C000
m_pageId = (1:3948712) m_headerVersion = 1
m_type = 3 m_typeFlagBits = 0x0 m_level = 0
m_flagBits = 0x8200 m_objId (AllocUnitId.idObj) = 129 m_indexId
(AllocUnitId.idInd) = 256 Metadata: AllocUnitId = 72057594046382080
Metadata: PartitionId = 72057594040811520
Metadata: IndexId = 1 Metadata: ObjectId = 197575742
m_prevPage = 0:0) m_nextPage = (0:0) pminlen = 0
m_slotCnt = 2 m_freeCnt = 1634 m_freeData = 6568
m_reservedCnt = 0 m_lsn = (46041:1506360:18)
m_xactReserved = 0 m_xdesId = (0:0)
m_ghostRecCnt = 0 m_tornBits = -99702035 DB Frag ID = 1
プライマリレプリカで以下を実行します。
select OBJECT_NAME (197575742)
plan_persist_plan
plan_persist_plan
テーブルのクラスター化インデックスが破損していると私は言っていますか?以下を実行するための最良/唯一の修正です:
ALTER DATABASE MyDatabase SET QUERY_STORE CLEAR;
#2が最善の修正である場合、削除されるクエリストアのデータを保持するための良い方法はありますか?
ガイダンス に従ってWindowsシステムイベントログを確認しました。これにより、「情報」イベントのみが生成され、エラーは発生しません。
DBCC CHECKTABLE ('sys.plan_persist_plan');
結果:
DBCC results for 'sys.plan_persist_plan'. There are 12562 rows in 240 pages for object "sys.plan_persist_plan". DBCC execution completed. If DBCC printed error messages, contact your system administrator.
インデックスを再構築するための正しいコマンドを確立できません。以下は機能しません。
ALTER INDEX PK_plan_persist_plan_cidx ON sys.plan_persist_plan REBUILD;
上記のコメントで述べたように、クエリストアの内部テーブルで同様の破損の問題がありました。
あなた自身が私がALTER DATABASE MyDatabase SET QUERY_STORE CLEAR;
問題の修正を試みましたが、問題なく動作しました。 MicrosoftはSQL Server 2017で、データをクリアする前に試行できる修復手順を追加しました:sp_query_store_consistency_check
( ソース )
データを保持したい場合、おそらく唯一の方法はテーブルをコピーすることです-そのためのスクリプトを作成した人を見つけることができません。
通常、破損するとディスクも心配になりますが、この場合、クエリストア自体に問題があるのではないかと少し疑っています。
質問3に答えるには
#2が最善の修正である場合、削除されるクエリストアのデータを保持するための良い方法はありますか?
「 クエリストアデータをエクスポートするにはどうすればよいですか? 」を参照してください。ほとんどの場合、QSデータをエクスポートすることは難しくありません。エラーがエクスポートに影響するかどうかはわかりません。
エクスポート時に一部のデータが欠落する場合があります。 クエリストアの詳細が欠落している理由をご覧ください
データベースの互換性レベルを110から130に変更するエラーを修正しました(SQL Server 2016)。
インスタンスのビルドバージョンは13.0.5062.0ですが、データベースは古いバージョンから移行され、互換性レベルは変更されていません。