AOBA's Information Processing Education
1997/08/31
注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してください)。
注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。
「平成2年 特種 午前 問3」 問3 データベースの更新処理と障害回復に関する次の記述を読んで、設問に答えよ。
データベース上のレコードを更新する場合、処理効率の向上を図るために、幾つかの更新命令相当分をまとめてデータベース上に書き込む。つまり更新命令が出されてもメモリ領域上だけ更新しておき、COMMIT命令が出された時点で実際のデータベース上のレコードを更新する。ただし、メモリ領域の状態によっては、オペレーティングシステム側で強制的にデータベース上への更新処理を実行することもある。
また、データベース管理システムでは、障害に備えて、更新命令が出された時点でレコードの更新前の内容をジャーナル(履歴ファイル)に書き込んでおく。異常終了したときには、この更新前ジャーナルを用いて、直前のCOMMIT命令が出された時点までデータベースの復旧を行う。
あるアプリケーションプログラムでレコードP,Qを更新しようとする処理を行った。時刻 t1に処理が開始され、時刻 t2でレコードPの内容をpからp’に変更する命令を出し、時刻 t4でレコードQの内容をqからq’に変更する命令を出した。しかし、このプログラムは時刻 t5で異常終了してしまった。
![]()
設問 次の文を読み、記述中の( )に入れるべき適切な字句を、解答群の中から選べ。
時刻 t3で、特にCOMMIT命令を出していない場合、t5の時点でのデータベース上のレコードP,Qの内容は、( a )。このとき、障害復旧ルーチンは、データベースの内容を時刻( b )の状態まで戻す。
また時刻 t3でCOMMIT命令を出していた場合、t5の時点でのデータベース上のレコードP,Qの内容は、( c )。このとき障害復旧ルーチンは、データベースの内容を時刻( d )の状態まで戻す。戻した後のデータベース上のレコードP,Qの内容は、( e )。
ただし、このデータベースにはオペレーティングシステムによる排他制御が行われており、このプログラムが終了するまで、他のプログラムからのレコードP,Qに対する処理は行われない。
a,c,eに関する解答群
ア Pの内容はpであり、Qの内容はqである イ Pの内容はpであり、Qの内容はq’である ウ Pの内容はp’であり、Qの内容はqである エ Pの内容はp’であり、Qの内容はq’である オ Pの内容はpであるが、Qの内容はqかq’か状況によって異なる カ Pの内容はp’であるが、Qの内容はqかq’か状況によって異なる キ Pの内容はpかp’か状況によって異なるが、Qの内容はqである ク Pの内容はpかp’か状況によって異なるが、Qの内容はq’である ケ Pの内容はpかp’か状況によって異なり、Qの内容もqかq’か状況によって異なる b,dに関する解答群
ア t1 イ t2 ウ t3 エ t4 オ t5
解説 どちらかと言えばこの問題は第1種の出題範囲でしょう。でもこれを解くための特別な知識はありません。問題文をよく読めば、おのずと解答を導くことができますよ。
問題文にあるように、一般にアプリケーションプログラムからデータベースの更新命令を発しても、即座にデータベースを更新せず、メモリ領域だけを更新しておきます。
その後、アプリケーションプログラムがCOMMIT命令を発すると実際にデータベースを更新しますが、メモリ領域の状態によっては、OSが強制的にデータベースの更新を行う場合もあります。ここではロールバックとロールフォワードという用語を覚えておいてください。
ロールバック
障害が発生した時などに、データベース(またはファイル)を直前のチェックポイントまでの状態に戻す処理。この問題において、COMMIT命令が出された時点までデータベースを戻す処理がロールバックに当たります。
ロールフォワード
ロールバックなどにより、あるチェックポイントまで復旧したデータベース(またはファイル)を、チェックポイント以降の更新後情報(ログやジャーナルなど)を用いて、障害発生時点にできるだけ近い状態に戻す処理。
この問題ではロールフォワードを行っていませんが、もし行えば t5時点(の直前)の状態に戻すことになります。aとbについて
t3でCOMMIT命令を出していなければ、プログラム開始から異常終了するまで一度もCOMMIT命令を発していません。その場合、t2や t4でデータベースの更新命令を発しても、それがメモリ領域だけの更新で終わっているか、データベースまで更新しているかは、分かりません(t2〜t5間で、OSが強制的にデータベースを更新しているかもしれないし、していないかもしれませんので)。
とすれば、レコードP,Qの内容が不定ですので、データベースの内容は時刻 t1、つまりプログラム開始時点まで戻る必要があります。c−eについて
t3でCOMMIT命令を出していれば、それ以前、つまり t2の更新命令はデータベースに反映されますので、レコードPの内容は必ずp’です。しかし、その後 t4で行ったレコードQに対する更新命令は、メモリ領域だけの更新で終わっているか、データベースまで更新しているかは、分かりません。
この場合はデータベースの内容をCOMMIT命令を発した時刻 t3まで戻しますが、戻した後のデータベースの内容は、レコードPがp’でレコードQがqです。
これについては、特に解説はいらないでしょう。
解答
a−ケ b−ア c−カ d−ウ e−ウ