応用情報技術者試験 令和5年秋期 問30
DBMSをシステム障害発生後に再立上げするとき,ロールフォワードすべきトランザクションとロールバックすべきトランザクションの組合せとして,適切なものはどれか。ここで,トランザクションの中で実行される処理内容は次のとおりとする。
出典 IPA公開[過去問題]:https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_ap_am_qs.pdf
DBMS(データベースマネジメントシステム)に障害が発生した場合の復旧方法として「ロールフォワード」と「ロールバック」という2つの方法があります。
ロールフォワードとは
DBとして使っているマシンの外部記憶装置(HDDやSSDなど)の物理的な故障や保存されたデータにアクセスできないなどの論理的な故障が発生した際に復旧させる方法です。
ロールフォワードではDBを復旧させるために過去のバックアップデータや更新ログファイルなどを使用します。
順番としては、直近のフルバックアップファイルを最初に使用してすべてのデータを復旧します。しかし、これだけでは古いままのファイルもあるので、次に差分アックアップファイルや増分バックアップファイルを使用してフルバックアップファイル保存後に更新したデータを最新版に復旧します。
しかし、バックアップファイルを使って復旧させてもバックアックを取得していないファイルについては復旧できません。そこで、更新ログファイルなどを使ってさらに障害が発生した時点に近づけます。
一度、過去に戻ってから障害発生時点に進むので「フォワード」がついていると覚えると覚えやすいでしょう。
差分バックアックファイルとは
前回のフルバックアップファイル以降に更新したファイルのみをバックアップの対象とします。そのため、フルバックアップファイルよりも容量は少なくなります。使用してDBなどを復旧させる場合は最新の差分バックアップファイルを使用します。
増分バックアップファイルとは
前回のフルバックアップファイルもしくは差分バックアップファイル以降に更新したファイルのみをバックアップの対象とします。そのため、フルバックアップファイルや差分バックアップファイルよりも容量は少なくなりますが、使用してDBなどを復旧させる場合は全ての増分バックアップファイルを使用する必要があります。
ロールバックとは
DBに対してプログラムで更新や削除、追加などを行う際に、プログラムエラーやデッドロックによるエラー、通信エラーなどによって処理ができなかった際に復旧させる方法です。
プログラムでは更新や削除、追加など複数の処理を1つにまとめて、「トランザクション」という単位で扱います。トランザクションの中で1つでも処理ができなかった場合は全ての処理を無効にする必要があります。プログラムでDBに対して処理を行う時は一旦、「仮確定」という形をとり、トランザクション内の処理が全て実行できてからDBへの処理を「確定」させます。
ロールバックではトランザクション内の処理中にエラーが発生すれば「確定」させずにトランザクション実行前の状態に戻します。
障害発生時にトランザクション実行前に戻すので「バック」がついていると覚えると覚えやすいでしょう。
今回、T3・T4は読み込みしかしていないので、障害回復の影響を受けません。そのため、解答にT3もしくはT4が含まれているのは省きますので、選択肢は「ア」か「ウ」のどちらかです。ただし、T1はチェックポイントより前に確定しているため、バックアップファイル+チェックポイントファイルで回復できるので再度T1を実行する必要はありません。ただし、T2・T5はチェックポイントファイル取得後に確定させているので、チェックポイントファイル取得地点まで回復させてもT2・T5は実行していないことになっています。そのため、ロールフォワードで回復させた場合はT2・T5は復旧後に再度実行する必要があります。
T6は障害発生時に「確定」されていないので障害発生時にロールバックでT6実行そのものを無かったことにする必要があります。そうしないとDBにある情報に矛盾が生じます。実例ケースとしては商品の売上表には売上データが書き込まれているのに在庫表には販売数量が反映されておらず、販売数と在庫数に矛盾が生じる、などです。この場合は売上データの書き込みもキャンセルする必要があります。
正解は「ア:{ロールフォワード(T2・T5)、ロールバック(T6)}」となります。