はじめに
IRIS/Cacheが不具合を起こす事が希な事ですが、端末の異常に巻き込まれる形でIRIS/Cach不具合を起こす事があります。
過去に、ストレージの劣化と共にデータベースにも不具合が発生し、データの不整合が発生するケースがありました。
データベースの不整合は、ぱっと見で判断するのは困難です。
その時に確認する方法として、「^INTEGRIT」コマンドがあります。
^INTEGRIT
レイドを組んでいたサーバ機で、ハードディスクに障害が発生しました。
念のため、Cacheに何らかの影響が発生していないか、調査を行いました。
Cacheのスタジオを立ち上げた際に、見たこともない強烈なエラーが表示されていました。
エラー名:<DATABASE>
エラー内容:「Caché がデータベースの劣化を検出しました」
丁度OSが発しているエラーと同じ内容のエラーが出ていますね。
→怪しさ満点ですが、この時はまさかデータベース自体に問題が発生しているとまでは思っていませんでした。
そこで「^INTEGRIT」コマンドの登場です。
%SYSネームスペースにて実行します。
zn "%SYS"
d ^INTEGRIT
SAMPLE>zn "%SYS"
%SYS>d ^INTEGRIT
This utility is used to check the integrity of a database
and the pointer structure of one or more globals.
Output results on
Device:
「Output results on Device:」と聞かれるので、出力先をファイル名を含めた絶対パスで入力します。
Device: xxxxxxx\integrit.log
Parameters? "WNS" => [Enter]
Stop after any error? No=> [Enter]
Do you want to check all databases? No=> [Y]
全データベースのチェック(Do you want to check all databases?)だけは「Y」にして、後はそのままEnterで良いです。
その後チェックロジックが走り、結果は「Device:」で入力したログファイルに出力されます。
※かなりマシンに負荷がかかるのでご注意下さい。
出力されたログファイル(integrit.log)を確認すると、下記エラーが出力されていました。
Global: ISC.oddMETA
トップ/ボトムポインタレベル: ブロック数=1 8kb (充填率 9%)
データレベル: ブロック数=1 8kb (充填率 0%)
合計: ブロック数=2 16kb (充填率 4%)
経過時間 = 2.1 秒 11/12/2021 01:21:48
**********グローバル ISC.oddMETA に問題があります**********
ポインタブロック 46 を処理中にタイプ 33 のエラー
ノード 10 を処理中にエラーが発生しました
which is ^ISC.oddMETA("PRESUS","%Studio.General","cpp-dyn","tree","%Studio.General",3,"K") pointing to the lower level block 185
ブロックの照合 #15 がグローバルディレクトリの照合 #5 と一致しません
データベースに不整合が発生しているのを確認できましたが、よりにもよってmgrフォルダ配下のcacheのDATファイルで発生していました。
この他にも、クリティカルなDATファイルで同様にエラーが出力されていました。
幸いな事に、データ自体はバックアップがあったので、Cacheをアンインストールからの再インストールを行い、バックアップデータをリストアする事で、何とか復旧まで漕ぎつけています。
おわりに
不慮の事故は極力遭遇したくないものです。
ただ、稀に遭遇してしまうのは仕方のない話です。
その時は、慌てず色々と調査のコマンドを実施する必要があります。
転ばぬ先の杖。
知っていて損はないコマンドのご紹介でした。