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(バイナリ クラッシュファイル)が生成されて
それの容量が馬鹿でかくなって「予期せぬエラー」がおこっている。っぽい
雰囲気としてはこんな感じ。