言葉にできるは武器なるらしい

言葉に文字に残していきます何事も。いつかきっと誰かの役に立つはずだから。

SQLServerで「0x8007007aで失敗」あるいは「エラーメッセージ8630」が出た時の対応

なかなか日本語でちゃんとした説明がなかったので
メモメモ。



内部エラー。ファイルe:¥sql10_katmai_t¥sql¥ntdbms¥storeng¥dfs¥startup¥dstream.cpp、行792の文字列ルーチンがHRESULT 0x8007007aで失敗しました。 
メッセージ8630、レベル16、状態1、行1 
内部クエリプロセッサのエラー:クエリプロセッサで実行中に予期しないエラーが発生しました。

 

 

このエラーに遭遇したのは今回が2回目で、1回目の時は
サーバ再起動でリランしたら問題なかった。
だが、今回はサーバ再起動しても、
Sqlserverで使用可能なメモリを9000Mから4000Mに制限しても
エラーとなった。
そのためいろいろと情報をあさった結果、

結論から言うと、下記の対応でうまく処理できた。
1.処理の対象となっているテーブルのインデックスを全て再構築する
2.念のため、サーバ再起動する
3.SQLServerで使用可能なメモリは4000Mに設定する
4.処理をリランする

この方法で解決しました。

このサイトが参考になりました。
https://feedback.azure.com/forums/908035-sql-server/suggestions/32890099-corrupt-index-after-doing-create-index-with-online


なんとなく雰囲気からすると
テーブルのデータを刷新してインサートしなおした時に
新規列があると?(←これ実は関係ないかも。)
裏でインデックスにもupdateがかかっているっぽいが
そのupdate処理が失敗している。
update+Errorが発生するたびに、エラーログを吐いているが
エラーログが長すぎて「予期せぬエラー」がおこっている。っぽい。
あるいは同時にMDMP(バイナリ クラッシュファイル)が生成されて
それの容量が馬鹿でかくなって「予期せぬエラー」がおこっている。っぽい

雰囲気としてはこんな感じ。