ユーザーセッションは、一連の Adabas コールから成り、OP コマンドで開始し、CL コマンドで終了させることができます。 ユーザーとは、バッチモードプログラム、あるいは端末を使用する人を意味します。 ユーザーは 8 バイトのユニークな ID を OP コマンドで指定できます。 このユニークな ID により、Adabas はセッション終了後も再スタート情報(ET データ)を保持できます。
端末ユーザーは、CPUID、VMID、アドレススペースおよび端末 ID で識別され、これにより各ユーザー ID が確実にユニークになります。
Adabas セッション中(Adabas がアクティブとなってから終了するまでの間)、Adabas ニュークリアスは、データベース内のすべての変更内容を反映する正確な履歴シーケンスに、一連のプロテクションエントリを作成します。 このプロテクションエントリは、WORK データセット(パート 1)に書き込まれ、さらにプロテクションログへもブロックごとに書き込まれます。 各ブロックにはニュークリアスのセッション番号、固有のブロック番号およびタイムスタンプが含まれています。
このドキュメントでは、次のトピックについて説明します。
WORK データセットのパート 1(ADARUN の LP パラメータ)には、最新のプロテクションエントリがラップアラウンド方式で格納されます。
WORK データセットのプロテクションエントリは、BT コマンドの実行およびシステム障害後に Adabas ニュークリアスを再アクティブ化するときの自動再スタート/自動バックアウトの実行に使用されます。 プロテクションレコードには次の情報が含まれています。
データレコードのビフォー/アフターイメージ
インバーテッドリスト(DVT)エレメントのビフォー/アフターイメージ
インバーテッドリストブロックの特別なビフォーイメージ(システム障害後、データベースを自動修復するためのもの)
チェックポイントエントリ
ET データを含む ET エントリ
内部再スタート処理に必要なスペシャルエントリ
Adabas は、プログラムの最初の Adabas コール時に、ストアクロック(STCK)値をチェックすることにより、バッチユーザーを識別します。
プロテクションログには、WORK データセットパート 1 と同じエントリが含まれます(ただし、「WORK データセット」に記載した特殊なビフォーイメージは除きます)。 その他、WORK データセットに格納されないプロテクションログ上のエントリとして、たまにしか使用されない C5 データ用のエントリや、バッファフラッシュ中に書き込まれるアソシエータまたはデータストレージブロックのアフターイメージがあります。ただし、後者のバッファフラッシュ中の書き込みは、ADASAV ユーティリティのオンライン SAVE 機能実行中に発生します。
ニュークリアスによって作成されたすべてのプロテクションログエントリは、正確な履歴順でデータベースに行われた修正を記述します。 各ブロックはブロックシーケンス番号に関連付けられます。
シーケンシャルプロテクションログ(DD/SIBA)データセットに直接書き込まれます。
マルチプロテクションログ(DD/PLOGR1、DD/PLOGR2、...DD/PLOGR8)データセットに書き込まれます。
注意:
Adabas は現在でも DUALPLD/S とユーザー出口 2
を使用したデュアルプロテクションロギングをサポートしています。
マルチプロテクションログデータセットは、それぞれ同じサイズおよびブロック長の物理データセットで、ランダムにアクセスされ、連続して使用されます。 これは、ニュークリアスによる使用と書き込みが可能なのはデータセットの 1 つで、その間他のデータセットはアーカイブ処理のために順番にコピーされていることを意味します。
シーケンシャルプロテクションログデータセットは、セッション開始時にニュークリアスでオープンされ、セッション終了時にクローズされます。 一般的にこのデータセットはテープに割り当てて、予期しない異常終了を招くことがあるディスクスペースの問題を回避します。 プロテクションログデータセットに書き込まれるデータの量は、すべてのユーザーのアクティビティの量に依存するため、ディスクスペースを見積ることは困難です。
Adabas セッションの終わりに、テープにエンドオブファイルマーク(EOF)が書き込まれ、セッションの終了を示します。 Adabas はマルチボリュームプロテクションログデータセットをサポートしています。 すべてのプロテクションエントリを格納するのに 1 リールでは足りない場合は、テープリールを交換して使用できます。
ニュークリアスは各ボリュームにチェックポイントを書き込みます。 このチェックポイントには、セッション番号、ボリュームシリアル番号、およびブロックシーケンス番号の情報が含まれます。
このようなシーケンシャルプロテクションログデータセットをアーカイブ目的でコピーするには、ADARES COPY 機能を使用する必要があります。
ニュークリアスセッションが異常終了した場合、テープの最後の EOF マークは書き込まれないことがあります。 プロテクションログを ADARES BACKOUT または REGENERATE 機能への入力として直接使用している場合、これにより問題が発生します。 そこで、ADARES のCOPY 機能を使うと、プロテクションログ I/O の論理的な終わりが検知され、出力に正しく EOF マークが書き込まれます。 ADARES はニュークリアスが行うのと同様に、各出力ボリュームにチェックポイントを書き込みます。
注意:
テープ上のシーケンシャルプロテクションログを使用する場合、ニュークリアスのセッション中、常に Adabas
ニュークリアス用にテープユニット(テープデッキ)を 1 つ割り当てておく必要があります。
つまり、非常に長時間に渡ってセッションが続いた場合にも、ログテープユニットは、そのセッションの間中使用可能でなければなりません。このため、シングルシーケンシャルプロテクションログをテープに保存する方法が適さない場合もあります。
マルチプロテクションロギングの使用をお勧めします。
Adabas マルチデータセットプロテクションログは、次の属性を持つ 2~8 個のデータセット(DD/PLOGRn、n はデータセットのシーケンシャル番号)から構成されます。
固定ブロック長
必ず DASD 上に存在
あらかじめ ADAFRM でフォーマットされている
すべてのデータセットが同数のブロック、同一ブロック長
すべてのデータセットは、ニュークリアスと 他のユーティリティ(ADARES)で共有される
新たにフォーマットされたデュアルまたはマルチプロテクションログデータセットがある場合、Adabas は起動時に DD/PLOGR1 を選択し、これにプロテクションログエントリの書き込みを開始します。 書き込みはブロック 2 から開始します。 ブロック 1 にはデータセットに関するステータス情報が含まれています。 このとき、他の PLOG データセットはまだ使用されていません。 プロテクションログエントリは、シーケンシャルログに書き込まれるときと同じ順番でマルチプロテクションログデータセットに書き込まれます。
各プロテクションログデータセットは、1 セッションのすべてのプロテクションログを格納できるほど大きくする必要はありません。 1 つのデータセットがいっぱいになると、次のようにプロテクションログの切り替えが行われます。
現在使用しているプロテクションログデータセットを終了するため、ブロック 1 にステータス情報が書き込まれます。
別のデータセットに切り替わります。
オペレータおよびログ出力にメッセージが書き込まれます。
ユーザー出口 12 がコールされます(下記参照)。
ニュークリアスが引き続きもう一方のデータセットにプロテクションログエントリを書き込んでいる間に、最初のプロテクションログデータセットは ADARES PLCOPY でシーケンシャルデータセットにコピーされます。 ADARES は、手動かユーザー出口 12 を使用して開始できます。このユーザー出口 12 は、1つのデータセットから別のデータセットへの切り替えが発生するたびにコールされます。 ADARES は出力ボリュームごとにチェックポイントを書き込みます。 このチェックポイントには、セッション番号、ボリュームシリアル番号およびブロックシーケンス番号が含まれています。
プロテクションログの切り替えは、単一のセッションで何度も発生することがあります。 各プロテクションログデータセットの内容は、単一のシーケンシャルデータセットにコピーする必要があります。 1 セッションで作成されたプロテクションの全コピーは、論理的にはニュークリアスがシーケンシャルプロテクションログ(SIBA/DDSIBA)に書き込むものと同じです。
すべてのシーケンシャルコピーを連結して、セッションのすべてのプロテクションログエントリを含む単一のシーケンシャルデータセットを構成できます。 シーケンシャルコピーは、ADARES ユーティリティの BACKOUT/REGENERATE 機能の入力に必要です。
注意:
シーケンシャルプロテクションログのエントリを格納するためにテープユニットが必要となるのは、ADARES の PLCOPY
実行中のみです。
マルチプロテクションロギングを使用しているときに、ADARES PLCOPY をコールするユーザー出口 12 を使用できない場合、プロテクションログの切り替えは次のように行われます。
現在のログデータセットがクローズされます。
他に空のデータセットがない場合、次のメッセージが発行され、古いデータが上書きされます。
Now it's too late to copy DDPLOGRn (or
PLOGRn)
この場合(上書きされた場合)、プロテクションログ情報は失われます。
プロテクションエントリが必要となるのは、次のいずれかの障害が発生した場合です。
ユーザーアプリケーションプログラム
Adabas
オペレーティングシステム
ハードウェア
このセクションでは、次のトピックについて説明します。
トランザクションの途中のプログラムが、そのトランザクションを正常に完了できないことを検出することがあります。 トランザクションの最初の部分を削除(バックアウトまたはロールバック)するには、BT コマンドを実行します。
BT コマンドは、WORK データセットを逆方向に読み込み、特定のトランザクションのエントリを逆向きに実行します。アフターイメージはデータベース中のエントリを削除するために使用され、ビフォーイメージはデータベース内にエレメントを挿入するために使用されます。 エレメント内のスタートトランザクションビットが、BT 処理の停止インジケータとして使用されます。
Adabas ニュークリアスが異常終了する原因となるような何らかの障害(Adabas の障害、オペレーティングシステムの障害、ハードウェア障害)が発生した後、Adabas を再アクティブ化すると、自動プロシージャが実行されデータベースが物理的、論理的に整合性のとれた状態になります。 部分的に実行された更新コマンドはすべてリセットされます。 不完全なトランザクションはすべてバックアウトされます。
この自動プロシージャは、次の 3 段階に分けて実行されます。
データベースの修復
自動再スタート
自動バックアウト
データベースの修復は、障害発生時にバッファのフラッシュが完了していた場合のステータスにデータベースを修正するために必要となります。 言い換えれば、アドレスコンバータ経由でデータストレージレコードを、アッパーインデックス経由でノーマルインデックスエントリをアドレスすることによって、データベースのすべてのブロックをニュークリアスが正常に実行できるステータスにするということです。
自動再スタートは、システム障害発生時に部分的に実行されていた単一の更新コマンドをバックアウトします。 自動バックアウトは、システム障害発生時に部分的に実行されていたユーザートランザクションの更新をバックアウトします。
自動再スタートおよび自動バックアウトで、主に使用されるプロテクションエントリは、データストレージおよびインバーテッドリスト(DVT)のビフォーイメージとアフターイメージです。
ハードウェアによっては、I/O 処理中に電源障害が発生すると、処理していた Adabas ブロックが破壊されることがあります。 このような損傷は自動再スタート中に検出することができないため、反映されなかったデータベース更新のために予測できないレスポンスコードを受け取るなど、後で問題が発生することがあります。
注意:
アベンドの原因が電源障害の場合、ADASAV および ADARES
ユーティリティを使用して影響を受けたファイルをリカバリすることを強くお勧めします。詳細については、「データベースのリカバリ」を参照してください。
Adabas セッションを IGNDIB=YES パラメータで再起動すると、アソシエータの既存のセッションコミュニケーションブロック(DIB)を無視して強制的に新規セッションが開始されます。このとき、Adabas は、アベンドが発生したときバッファフラッシュがアクティブだったかどうかをチェックします。 バッファフラッシュが処理中だった場合、自動再スタートはシャットダウンし、ADAN58 メッセージを発行します。
ADAN58 | BUFFER-FLUSH START RECORD DETECTED DURING AUTORESTART. THE NUCLEUS WILL TERMINATE AFTER AUTORESTART. IN CASE OF POWER FAILURE, THE DATABASE MIGHT BE INCONSISTENT... |
メッセージには、バッファフラッシュが処理中だったときに更新されていたファイルリストも含まれます。 この場合、DBA はアベンドの原因が電源障害かどうかをチェックする必要があります。
アベンドの原因が電源障害とはまったく関係ない場合、出力ハードウェアの情報の整合性が保証できるのであれば、データベースをすぐに再アクティブ化できます。 データベースのリカバリは必要ありません。
自動再スタート管理(ARM)は、ニュークリアスが ABEND するときに、自動的にニュークリアスを再スタートするために使用されます。 パラメータエラーの結果アベンドが発生した場合など、アベンドが意図的な場合、自動再スタートは抑止されます。
ARM はクラスタおよび非クラスタ環境の Adabas ニュークリアスで使用することができます。
ADARUN パラメータ ARMNAME は、ARM ポリシーでアクティブ化する要素を識別するために使用されます。 各要素で、いつ、どこで、どのくらいの頻度で自動再スタートが試行されるかを指定します。 ARM policy が定義されていない場合、ARMNAME パラメータは有効になりません。
Adabas やオペレーティングシステム、またはハードウェアに障害が発生し、それでも物理的にデータベースが読み込みが可能な場合(通常の場合)、Adabas ニュークリアスは必要な手順をすべて自動的に行い、データベースの処理が、通常通り続行できるようにします。
データベースリカバリについては次の各項目で説明します。
ヘッドクラッシュ(データベースの物理障害)やアプリケーションプログラムのエラー(データベースの論理障害)またはバッファフラッシュ中の電源障害(「電源障害後の再スタート」参照)が発生した場合は、データベースを再構築するためにユーティリティ ADASAV および ADARES を使用する必要があります。
データベース全体のリストアおよび再生成
直近のデータベースのコピーを含むシーケンシャルデータセットを使用して、ADASAV ユーティリティでデータベースをリストアします。
データベースの SAVE 中に(オンライン SAVE)更新されたデータベースブロックをリストアします。
ADARES を使用して、SAVE 機能の終了時点のチェックポイントから、データベースが壊れる直前の最新チェックポイントまでを再生成します。これは Adabas によって自動的に実行されます。
「データベース全体のリストアおよび再生成」で記述されている手順を使用しますが、ユーティリティのパラメータステートメントを適切に変更する必要があります。
データストレージ内の 1 ブロックのみのリストアと再生成
ADARES ユーティリティの REPAIR 機能を使用します。
データベースステータスをシングルバッチ更新開始時の状態にリストア
長時間に渡り実行中のバッチプログラムが、間違った更新を大量に行った場合(例:プログラムの論理エラーなど)、さらにそのプログラムで 1 ユーザーのみが更新しているときは、このプログラムで行われた全更新をバックアウトする必要があります。
このような場合は、ADARES ユーティリティの BACKOUT 機能(シーケンシャルプロテクションログ、デュアルまたはマルチプロテクションログのいずれか)を使用します。
プロテクションログ(SIBA/PLOG)に書き込まれる情報は、レコードの ID(ISN)など、レコードを基準にした情報です。 ADARES ユーティリティは、ISN 基準の情報を Adabas に渡します。ただし、Adabas は ISN の有効性を確認したり、レコードの論理的な内容をチェックすることはできません。
したがって、元のセッションで使用された ISN と論理レコードの組み合わせが、ファイルやデータベースの再構築処理中にも使用されるようにする必要があります。 元のファイルがロードされたときに指定された ISN とパラメータを使用してください。
ソフトウェアあるいはハードウェアの障害が発生した場合、データベースを確実にリカバリするために、DBA で次の手順を実行することをお勧めします。
ADASAV ユーティリティ(SAVE 機能)を使用してデータベースのシーケンシャルデータセットコピーを作成し、出力データセットをアーカイブします(出力先は通常テープ)。 このデータセットは、特定の時点のデータベースステータスを反映しています。
各ニュークリアスセッションのプロテクションログデータセットに書き込まれるプロテクションログデータをすべて保持します。
シーケンシャルプロテクションログ(SIBA)を使用している場合は、ADARES COPY 機能によって、ログ情報を保管できます。 マルチデータセットプロテクションロギング(PLOG)を使用している場合は、ADARES PLCOPY 機能を使用します。
各ニュークリアスセッションは、ユニークなセッション番号で識別されます。 この番号はすべての SAVE およびプロテクションログデータに割り当てられます。
障害発生時のデータベース再構築
SAVE データセット 36 を使用して、データベースをリストアします。
ニュークリアスがアクティブでない場合、次のコマンドを実行します。
ADASAV RESTORE
Adabas ニュークリアスを開始します。
セッション 37 で行われたすべての変更を再適用します。
ニュークリアスがアクティブで実行中の場合、次のコマンドを実行します。
ADARES REGENERATE PLOGNUM=37
セッション38 で行われたすべての変更を再適用します。
ニュークリアスがアクティブで実行中の場合、次のコマンドを実行します。
ADARES REGENERATE PLOGNUM=38
この例では、アクティブなニュークリアスと並行して SAVE データベース機能が実行されたときに、SAVE およびプロテクションログデータセットへのセッション番号がどのように割り当てられるかを示しています。
ニュークリアスはプロテクションログ番号 39 を書き込みます。
ADASAV が SAVE 機能を開始すると、ニュークリアスは SYN1 チェックポイントをデータプロテクションログに書き込みます。
SAVE 機能の最後に SYN2 チェックポイントを書き込みます。 SYN2 チェックポイントは同期チェックポイントで、このときすべてのユーザーが ET ステータスになっています。
また、アソシエータおよびデータストレージへの書き込みもすべてプロテクションログに書き込まれます(SYN1 と SYN2 の間)。
ADASAV の出力にセッション番号 40 が割り当てられます。 SYN2 チェックポイントがすでに書き込まれていても、ニュークリアスはプロテクションログ 39 に書き込みます。
障害発生時のステータスへのデータベースのリセット
入力として SAVE データセット 40 を使用し、データベースをリストアします。
プロテクションログ 39 には、SYN1 チェックポイント以降、オンライン SAVE オペレーション中のデータベースへの変更が記録されています。 正しいプロテクションログを入力する必要があります。
ニュークリアスを停止してから、次のコマンドを実行します。
ADASAV RESTONL PLOGNUM=39,SYN1=blocknumber
Adabas ニュークリアスを開始します。
SYN2 チェックポイント以降、ニュークリアスセッション 39 で行われた変更を再適用します。
ニュークリアスがアクティブな場合、次のコマンドを実行します。
ADARES REGENERATE PLOGNUM=39,FROMCP=SYN2,FROMBLK=blocknumber
ニュークリアスセッション41 で行われた変更を再適用します。
ニュークリアスがアクティブな場合、次のコマンドを実行します。
ADARES REGENERATE PLOGNUM=41
ニュークリアスセッション42 で、障害発生時までに行われた変更を再適用します。
ニュークリアスがアクティブな場合、次のコマンドを実行します。
ADARES REGENERATE PLOGNUM=42
ADASAV および ADARES に対する入力として必要な SYN1 と SYN2 のブロック番号を調べるには、ADASAV SAVE 機能によって書き込まれた出力レポートを調べるか、Adabas Online System の ET チェックポイント機能を実行します。
Adabas セッションが異常終了したときのために、トランザクションリカバリが用意されています。 Adabas 自動バックアウトルーチンは、どの Adabas セッションでも開始時に常に自動的に起動され、中断されたすべてのトランザクションの処理内容をデータベースから削除します。
ただし、データベースのデータセット(ASSO、DATA、または WORK)が破壊された場合は、データベースをリストアおよび再生成して、失われたデータをリカバリする必要があります。
Adabas Recovery Aid は、データベースリカバリの自動化と最適化に役立ちます。 Adabas 自動バックアウトルーチンは、データベースのリカバリに必要なすべての情報を記録および報告し、リカバリジョブストリーム(JCL/JCS)を作成します。このストリームに基づいて、最後に SAVE を実行した時点から障害およびエラーの時点までに実行したジョブが再実行されます。 詳細については、『Adabas ユーティリティマニュアル』の ADARAI ユーティリティに関する説明を参照してください。
注意:
ジョブストリーム生成機能は、VSE または z/VM の環境では使用できません。