データ整合性の概要
Caché データベースの整合性は、このガイドの説明にある機能により、システムの障害から保護されています。
基本的なデータ整合性の保護
一般に、整合性は 2 つの異なるレベルで表示できます。
-
構造的なデータベースの整合性または物理的な整合性は、ディスク上のデータベース・ブロックのコンテンツを指します。構造的な整合性を持つには、データベース・ブロックが自己整合しており、グローバルが検索可能でなければなりません。システム・クラッシュ時の構造的な整合性は、“ライト・イメージ・ジャーナリングとリカバリ” の章に説明があるCaché ライト・イメージ・ジャーナル (WIJ) テクノロジ、および Caché の内部アルゴリズムによって保持されます。
-
論理的な整合性は、データベース内のグローバルによって表現されるデータを指し、アプリケーションによって作成されるデータの自己一貫性、そのトランザクション整合性、および現実との最新性が含まれます。 システム・クラッシュ時の論理的な整合性は、Caché ジャーナリング (“ジャーナリング” の章を参照) およびトランザクション処理によって保持されます。(論理的な整合性の他の点は、インタロック、トランザクション、およびアプリケーションが使用するプログラミング・パラダイムに固有の他のメカニズムを適切に使用することにより、アプリケーション・コードで管理されます。)
自動的な WIJ およびジャーナルのリカバリは、Caché データベースをシステム障害から保護する、インターシステムズの "防弾型" データベース・アーキテクチャの基本的な構成要素です。
整合性の検証とリカバリのメカニズム
システム・クラッシュだけで整合性の低下を招く可能性はないとしても、ストレージ・デバイスに破壊的な障害が生じたり、物理的な損傷を受けたり、改ざんされたりする可能性は常に存在します。その場合、データベース、WIJ、およびジャーナルの整合性が危険にさらされる可能性があります。そうした災害を補償するために、Caché は以下の機能を提供します。
-
データベースの構造的な整合性を確認するためのツール。詳細は、この章の "構造的な整合性の検証" を参照してください。
-
バックアップ・メカニズム。詳細は、“バックアップとリストア” の章を参照してください。
-
ミラーリング ("Caché 高可用性ガイド" の “ミラーリング” の章を参照) およびシャドウイング (このガイドの “シャドウイング” の章を参照) を使用した、自動フェイルオーバーおよび災害復旧のためのジャーナリング・ベースの論理データ・レプリケーション。
-
DataCheck。これは、ミラーリングやシャドウイングなどのテクノロジが複製されたデータのコピーを保持する際に、複数のシステム間のデータの一貫性を確認するツールです (“複数のシステムでのデータ整合性” の章を参照)。
-
Caché 内の ECP ベースの共有ディスク・クラスタ・システムにおけるジャーナリング (“クラスタ・ジャーナリング” の章を参照)。
構造的な整合性の検証
整合性チェックにより、データベースのセット、またはデータベース内のグローバルのサブセットの構造的な整合性を検証します ("基本的なデータ整合性の保護" を参照)。
整合性チェックの実行の利点は以下のとおりです。
-
整合性チェックとバックアップ方法を統合して、バックアップ時にデータベースのコピーが損なわれず、バックアップ自体にエラーが入り込んでいないことを確認できます。詳細説明は、“バックアップとリストア” の章の "外部バックアップ" にあります。
-
整合性チェックでは、破損が生じる前にそれを検出できるため、ユーザが影響を受ける前に計画を立てる時間があります。
-
定期的な整合性チェックにより、検出された構造的な整合性の問題の原因を早めに正確に突き止められるため、根本原因を特定できる可能性が高くなります。
整合性チェックにより、選択したデータベース内のすべてのグローバルの整合性、または指定された単一のデータベースに格納されている選択したグローバルの整合性を検証できます。整合性チェックは、管理ポータルから実行することも、ターミナル・ウィンドウで ^Integrity ユーティリティを使用して実行することもできます。このセクションでは、以下のトピックについて説明します。
整合性チェックの誤検出
揮発性データベースに対して整合性チェックを実行すると、進行中のデータベース更新が原因で、データベース整合性エラーのレポートが誤って生成されることがあります。
"管理ポータルを使用したデータベース整合性のチェック" で説明されているように、整合性チェックが管理ポータルまたはタスク・マネージャから実行される場合、バックグラウンドで実行され、エラーが検出されたすべてのグローバルを自動的に再テストします。この自動の2回目のパスを含む整合性チェックからの出力では、以下の方法でエラーを報告します。
-
グローバルのエラーが1回目のパスでは検出されたが、2回目のパスでは検出されない場合、最初のエラーは誤検出と想定され、エラーは報告されません。
-
2回目のパスで検出されたグローバルのエラーが、1回目のパスで検出されたエラーと異なる場合、2回目のパスのエラーのみ報告され、These errors in global <global_name> differ from the errors prior to the retry というテキストが表示されます。
-
両方のパスでグローバルに同じエラーが検出される場合、エラーは、When retried the errors in global <global_name> remained unchanged というメッセージで報告されます。
"^Integrity ユーティリティを使用したデータベース整合性のチェック" に説明がある ^Integrity ユーティリティまたはエントリ・ポイントのいずれかを使用して手動で実行される整合性チェックでは、1回目のパスでエラーが報告されたグローバルの再テストは行われません。エラーが返される場合、その特定のデータベースのチェックを繰り返します。
一般に、アクティブ・システムに対して実行される整合性チェックの場合、2回目のパスで繰り返されないエラーは誤検出であり、2回目のパスで持続するエラーは実際の整合性の問題を表します。後者のエラーは調査する必要があります。また、前者のエラーも、アクティビティのレベル、エラーの数、以前に誤検出が発生したエクステントに応じて、調査するメリットがあります。調査の種類は、専門知識のレベルや過去の誤検出の経験によって決まります。実行できる手順は以下のとおりです。
-
可能であれば、システム・アクティビティの少ない期間に、整合性チェックを再度実行します。
-
最新のバックアップのリストアされたコピーに対して整合性チェックを実行します。
-
根本原因の手掛かりを得るために、問題となっているデータの範囲を確認します。
-
インターシステムズのサポート窓口Opens in a new tabに問い合わせます。
誤検出の問題は、"Caché データ整合性ガイド" の “バックアップ” の章にある "外部バックアップ" で説明されているような標準のバックアップ手順に、整合性チェックを統合することで回避できます。これにより、データベースは、そのデータベースが存在する論理ディスク・ボリュームのスナップショットが取られた直後にチェックされるようになります。
整合性チェックの出力
整合性チェックは、検出したエラーを報告するだけでなく、各グローバルに含まれるブロックの数と、使用中のそれらのブロックの割合についての情報をブロック・レベルで分割して報告します。その例として、20,000 件のユーザのデータが入力された SAMPLES データベースに対する整合性チェックの出力の一部を次に示します。
File Name: c:\intersystems\20162555dec15a\mgr\integ.txt
Cache Database Integrity Check - Report Created 01/25/2016 10:41:16
System: BBINSTOCK6440 Configuration: 20162555DEC15A
No Errors were found.
Full Listing of Databases Checked
Directory: C:\InterSystems\20162555DEC15A\Mgr\samples\
0 globals with errors found
Global: Aviation.AircraftD 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (6% full)
Data Level: # of blocks=64 512kb (87% full)
Total: # of blocks=65 520kb (85% full)
Elapsed Time = 0.0 seconds, Completed 01/25/2016 10:41:15
Global: Aviation.AircraftI 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (0% full)
Data Level: # of blocks=4 32kb (83% full)
Total: # of blocks=5 40kb (67% full)
Elapsed Time = 0.0 seconds, Completed 01/25/2016 10:41:15
Global: Aviation.Countries 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (0% full)
Data Level: # of blocks=1 8kb (52% full)
Total: # of blocks=2 16kb (26% full)
Elapsed Time = 0.0 seconds, Completed 01/25/2016 10:41:15
Global: Aviation.CrewI 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (1% full)
Data Level: # of blocks=5 40kb (90% full)
Total: # of blocks=6 48kb (75% full)
Elapsed Time = 0.0 seconds, Completed 01/25/2016 10:41:15
Global: Aviation.EventD 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (41% full)
Data Level: # of blocks=377 3,016kb (78% full)
Big Strings: # of blocks=776 6,208kb (72% full) # = 479
Total: # of blocks=1,154 9,232kb (74% full)
Elapsed Time = 0.1 seconds, Completed 01/25/2016 10:41:15
Global: Aviation.EventI 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (0% full)
Data Level: # of blocks=3 24kb (77% full)
Total: # of blocks=4 32kb (58% full)
Elapsed Time = 0.0 seconds, Completed 01/25/2016 10:41:15
...
Global: ROUTINE 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (1% full)
Data Level: # of blocks=6 48kb (78% full)
Total: # of blocks=7 56kb (67% full)
Elapsed Time = 0.0 seconds, Completed 01/25/2016 10:41:16
Global: SYS 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (0% full)
Data Level: # of blocks=1 8kb (0% full)
Total: # of blocks=2 16kb (0% full)
Elapsed Time = 0.0 seconds, Completed 01/25/2016 10:41:16
Global: Sample.CompanyD 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (0% full)
Data Level: # of blocks=1 8kb (35% full)
Total: # of blocks=2 16kb (17% full)
Elapsed Time = 0.0 seconds, Completed 01/25/2016 10:41:16
Global: Sample.CompanyI 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (0% full)
Data Level: # of blocks=1 8kb (9% full)
Total: # of blocks=2 16kb (4% full)
Elapsed Time = 0.0 seconds, Completed 01/25/2016 10:41:16
Global: Sample.PersonD 0 errors found
Top/Bottom Pnt Level: # of blocks=1 8kb (0% full)
Data Level: # of blocks=5 40kb (81% full)
Total: # of blocks=6 48kb (67% full)
Elapsed Time = 0.0 seconds, Completed 01/25/2016 10:41:16
...
管理ポータルからの実行時には、整合性チェックで生成されたエラーと警告があれば、レポートの先頭にそのリストが示されます。^Integrity ユーティリティを使用して実行する場合、エラーの概要は出力の末尾に示されます。
管理ポータルを使用したデータベース整合性のチェック
選択した複数のデータベースの整合性や、1 つのデータベースに格納された複数の選択したグローバルの整合性をチェックするには、管理ポータルの [データベース] ページ ([ホーム]→[システム処理]→[データベース]) に移動し、次の手順を実行します。
-
[整合性チェック] をクリックして、データベースのリストを表示します。
-
確認対象のデータベースのチェック・ボックスにチェックを付けます。
単一のデータベースに格納されたグローバルをチェックする場合は、チェック対象のグローバルが格納されたデータベースのみを選択して [グローバルを選択] をクリックし、選択したデータベースに格納されたグローバルのリストを表示します。チェックするグローバルを選択して、[保存] をクリックします。リストからグローバルを選択していないと、選択したデータベースのグローバルがすべてチェックされます。
-
整合性チェックの出力を保存するログ・ファイルのパスを指定します ("整合性チェックの出力" を参照)。既定の設定 (install_dir/mgr/integ.txt) を受け入れるか、[参照] をクリックして既存のファイルを選択するか、独自のファイル・パスを入力できます。
-
エラー発生時にデータベース整合性チェックを停止する場合、[エラー発生後に停止する] チェック・ボックスにチェックを付けます。
-
[OK] をクリックし、整合性チェックを開始します。整合性チェックのプロセスがバックグラウンドで実行されます。
[整合性ログ] をクリックすると、ポータルを使用して最後に実行した整合性チェックの出力が表示されます。このファイルのパスとファイルの内容は、自動的に表示されますが、新しいパスを入力するか、別のファイルを参照して、[ファイル表示] をクリックすると、代わりにそのファイルを表示できます。
整合性チェックは、また、タスク・マネージャの、スケジュールされた既定のシステム・バックグラウンド・タスクの 1 つです。必要に応じて、追加の整合性チェックをスケジュールすること (異なる時間に異なるデータベースをスケジュールするなど) もできます。システム・タスクのスケジューリングの詳細は、"Caché システム管理ガイド" の “Cachéの管理”の章にある "タスク・マネージャの使用" を参照してください。
^Integrity ユーティリティを使用したデータベース整合性のチェック
手動の整合性チェックは、^Integrity ユーティリティを使用して実行できます。このユーティリティを実行するには、ターミナル・ウィンドウを開き、%SYS ネームスペースに切り替えて、do ^Integrity と入力します。これは管理ポータルの [データベース] ページから整合性チェックを実行することと同等です。ただし、"整合性チェックの誤検出" で説明したとおり、^Integrity ユーティリティは、完了して結果を報告する前に、1 回目のパスでエラーが検出されたグローバルを再チェックすることはできないため、エラーが報告されたグローバルを再チェックして誤検出を排除することが重要になります。
このルーチンには、以下の追加エントリ・ポイントがあります。
-
Do CheckPointer^Integrity は、チェックを開始するディレクトリとポインタ・ブロックを尋ねます。
-
Do Silent^Integrity(logfilename,dirlist) は、選択したデータベース、またはすべてのデータベースで整合性チェックを実行するバックグラウンド・プロセスを開始し、結果を logfilename パラメータで指定されたファイルに出力します。オプションの dirlist パラメータ ($LIST 形式) によって、選択したチェック対象のデータベースが特定されます。dirlist を指定しない場合は、すべてのデータベースがチェックされます。
これは、管理ポータルの [データベース] ページ ([システム処理] > [データベース]) から [整合性チェック] を実行するのと同じです。
-
Do Query^Integrity(logfilename,outdevice) は整合性チェックを実行しませんが、logfilename パラメータで指定されたファイルのコンテンツ (前回の実行で保存された結果) を、現在のデバイスか、またはオプションのパラメータ outdevice で指定されたデバイスに出力します。
指定されていない場合、outdevice は現在のターミナルです。outdevice の例は、プリンタ、別の表示デバイス、または他の OS ファイル名です。OS ファイル名には、logfilename のコピーが作成されます。
-
Do SilentGlobalCheck^Integrity(logfilename,dir,gbllist) は、選択したデータベース内の選択したグローバルの整合性チェックを実行するバックグラウンド・プロセスを開始し、結果を logfilename パラメータで指定されたファイルに出力します。dir パラメータによって、チェック対象のグローバルが格納されたデータベースが特定されます。 必須の gbllist パラメータ ($LIST フォーマット) は、チェック対象の 1 つ以上のグローバルを識別します。
これは、管理ポータルの [データベース] ページ ([システム処理] > [データベース]) から [整合性チェック] を実行するときに [グローバル選択] を選択するのと同じです。
-
Do CheckList^Integrity(outputglobal,dirlist,stopafteranyerror,listofglolist,maxproc) は情報や警告を含む整合性チェックの結果をオプションの outputglobal パラメータで指定されたグローバルに格納します。指定がない場合、結果は ^CacheTempIntegrityOutput($JOB) に格納されます。オプションの dirlist パラメータでチェックするすべてのディレクトリの $LIST を指定します。指定がない場合は、すべてのディレクトリをチェックします。stopafteranyerror パラメータが指定された場合、エラーが見つかるとディレクトリのチェックは停止します。オプションの listofglolist パラメータでグローバル名の $LIST の内の 1 つを指定します。それは dirlist パラメータで指定された各ディレクトリに対して 1 つ存在し、例えば全ディレクトリですべての oddDEF グローバルをチェックする場合は $LB($LB("oddDEF")) と指定します。listofglolist パラメータの要素がディレクトリのリストの要素より少ない場合、最後の要素は残りのディレクトリに使用されます。オプションの maxproc パラメータは、使用されるバックグラウンド・ジョブ数の上限を指定します。このパラメータが <1 の場合は、マシンのコア数 (チェックするディレクトリ数と同じく、マシンのコア数は常に上限として機能します) の分だけ使用されます。このパラメータが 1 の場合は、整合性チェックはフォアグラウンド・プロセスで直接行われます。
-
Do Display^Integrity(integritout,flags,dirsum) で整合性チェックの結果を表示します。オプションの integritout パラメータで整合性チェックが行われた際の結果が置かれるグローバルの名前を (CheckList^Integrity により) 指定します。指定がない場合は、既定の ^CacheTempIntegrityOutput($JOB) になります。オプションの flags パラメータの指定は、0 (すべてのメッセージを表示)、1 (エラーおよび警告のみを表示)、2 (エラーのみを表示) のいずれかとなります。指定がない場合は、既定の 0 になります。オプションの dirsum パラメータが指定されていて 0 ではない場合、表示にはスキャンされたそれぞれの Directory のブロックの概要が含まれます。
-
Do Exclude^Integrity でチェックから除外するためのデータベースのリストを要求します。? を入力してマウントされたデータベースのリストを表示します。
^DATABASE ルーチンの [データベースマウント] オプションを使用すると、どの CACHE.DAT ファイルでもインスタンスからアクセスできるようにマウントできます ("Caché セキュリティ管理ガイド" の付録 “文字ベースのセキュリティ管理ルーチンの使用” を参照)。ただし、これは、管理ポータルのデータベース構成から削除されたデータベースや、その構成に追加されたことのないデータベースに対して実行されると(このガイドの “Caché の構成” の章の "データベースの構成" を参照)、そのデータベースは管理ポータルの構成に追加されないため、ポータルのデータベース操作や一部のルーチンでは使用できなくなり、このセクションで説明した ^Integrity ユーティリティも使用できなくなります。