HOME»応用情報技術者試験掲示板»平成28年秋期 問30
投稿する
平成28年秋期 問30 [0671]
グレッグさん(No.1)
問題そのものへの疑問となってしまうのですが、
解説に
「後退復帰でトランザクション開始前に戻すのが「T6」と判断できます。」
とありますが、T6はコミットされていないので、放置すればいいのではないでしょうか?
私のテキストに以下の説明があります。TR2はこの問題のT6と同じパターンだと思ってください。
テキストによれば「TR2はシステム障害が発生した時点でCOMMITされていないため、データベースバッファの内容が消失しても問題ありません(再処理で対応)」とあります。
ですから問題のT6をロールバックしてもしてなくても同じではないでしょうか?そもそも消失しているのだからロールバックする必要もないと。
仮にT6がチェックポイントを跨いで、システム障害発生時にCOMMITしてない場合、チェックポイント時のTR6のログが残ってしまっているので、ロールバックするとテキストに説明があります。
解説に
「後退復帰でトランザクション開始前に戻すのが「T6」と判断できます。」
とありますが、T6はコミットされていないので、放置すればいいのではないでしょうか?
私のテキストに以下の説明があります。TR2はこの問題のT6と同じパターンだと思ってください。
テキストによれば「TR2はシステム障害が発生した時点でCOMMITされていないため、データベースバッファの内容が消失しても問題ありません(再処理で対応)」とあります。
ですから問題のT6をロールバックしてもしてなくても同じではないでしょうか?そもそも消失しているのだからロールバックする必要もないと。
仮にT6がチェックポイントを跨いで、システム障害発生時にCOMMITしてない場合、チェックポイント時のTR6のログが残ってしまっているので、ロールバックするとテキストに説明があります。
2016.12.29 15:54
管理人(No.2)
たとえコミットされていなくても、トランザクションの開始から障害発生までの間に書込み処理が行われている可能性があります。メモリバッファのフラッシュはチェックポイントを除きOSのタイミングで行われるため、DBMS側ではコミットされていない更新処理がディスクに反映されてしまっている可能性を排除できません。
設問のケースはシステム障害なのでメモリバッファの内容は失われますが、復帰後のディスクは障害発生時点の内容を保持したままです。このため更新前ログを使用したロールバックが必要であると認識しています。
手元に同じテキストがないのでTR2との違いについて述べることはできませんが、確かにT6はロールバック後に再処理を行うためデータベースバッファの内容が消失しても問題ありません。
設問のケースはシステム障害なのでメモリバッファの内容は失われますが、復帰後のディスクは障害発生時点の内容を保持したままです。このため更新前ログを使用したロールバックが必要であると認識しています。
手元に同じテキストがないのでTR2との違いについて述べることはできませんが、確かにT6はロールバック後に再処理を行うためデータベースバッファの内容が消失しても問題ありません。
2016.12.30 12:12
グレッグさん(No.3)
そもそもT6はチェックポイントにもコミットにも触れていないのでログファイルが制作
されておらず、その状態でなんでロールバック出来るのか?とそこのところが分からなくなってまいりました
チェックポイントとコミット以外に、ログファイルが制作されるタイミングがありうるという
ことなんでしょうか?
手持ちの合格テキストでは、「システム障害が発生すると、まだデータファイルに書き出されていないデータベースバッファ上の更新データを消失してしまう事が問題になります。しかし、次ページ図のTR2は、システム障害が発生した時点でCOMMITされていないため、データベース・バッファの内容が消失しても問題はありません(再処理で対応)。問題になるのは・・」
とあります
されておらず、その状態でなんでロールバック出来るのか?とそこのところが分からなくなってまいりました
>メモリバッファのフラッシュはチェックポイントを除きOSのタイミングで行われるため、DBMS側ではコミットされていない更新処理がディスクに反映されてしまっている可能性を排除できません。
チェックポイントとコミット以外に、ログファイルが制作されるタイミングがありうるという
ことなんでしょうか?
手持ちの合格テキストでは、「システム障害が発生すると、まだデータファイルに書き出されていないデータベースバッファ上の更新データを消失してしまう事が問題になります。しかし、次ページ図のTR2は、システム障害が発生した時点でCOMMITされていないため、データベース・バッファの内容が消失しても問題はありません(再処理で対応)。問題になるのは・・」
とあります
2017.01.01 20:06
管理人(No.4)
この投稿は削除されました。(2017.01.02 11:31)
2017.01.02 11:31
管理人(No.5)
トランザクションのログファイルには、以下の2種類があります。
・トランザクション開始直前に更新前の状態を記録する更新前ログ
・トランザクションのコミット直前に更新後の状態を記録する更新後ログ
ロールバックは更新前ログを使用した後退復帰、ロールフォワードは更新後ログを使用した前進復帰処理です。
またお手持ちのテキストに記述されている
「システム障害が発生した時点でCOMMITされていないため、データベース・バッファの内容が消失しても問題はありません(再処理で対応)」
という部分ですが、私は次のように解釈しました。
トランザクションには原子性が要求されるため、「全く実行されなかった」「全てが正常に終了した」のどちらかの状態で終了しなくてはなりません。このため障害発生時点でコミットされていないトランザクションはロールバックによって開始前の状態に戻す必要があります。この時に用いられるのが更新前ログです。失敗したトランザクションは復帰後に最初から再処理されるので、バッファ中の更新内容が失われても問題ないということになります。
乱文でわかりですが、他にも疑問点があれば私の知り得る範囲で回答いたします。
・トランザクション開始直前に更新前の状態を記録する更新前ログ
・トランザクションのコミット直前に更新後の状態を記録する更新後ログ
ロールバックは更新前ログを使用した後退復帰、ロールフォワードは更新後ログを使用した前進復帰処理です。
またお手持ちのテキストに記述されている
「システム障害が発生した時点でCOMMITされていないため、データベース・バッファの内容が消失しても問題はありません(再処理で対応)」
という部分ですが、私は次のように解釈しました。
トランザクションには原子性が要求されるため、「全く実行されなかった」「全てが正常に終了した」のどちらかの状態で終了しなくてはなりません。このため障害発生時点でコミットされていないトランザクションはロールバックによって開始前の状態に戻す必要があります。この時に用いられるのが更新前ログです。失敗したトランザクションは復帰後に最初から再処理されるので、バッファ中の更新内容が失われても問題ないということになります。
乱文でわかりですが、他にも疑問点があれば私の知り得る範囲で回答いたします。
2017.01.02 11:30
グレッグさん(No.6)
管理人様、詳しい説明ありがとうございます
とりあえずトラザクションTR6にも更新前ログがあるということは
分かりました。
テキストの解釈では更新前ログを使わず放っておいても良い(それ以外に記録は
残ってないという前提)、再びTR6の処理を
やれば良いという解釈で
過去問の解釈はなにかしら記録が残っている可能性もあるので念のためロールバックする、
という解釈、
だいたいこんな感じでよろしいでしょうか?
ロールフォワードがT2,T5でT3は読み込み処理で除外されるので、
消去法でアにすることも可能ですが
とりあえずトラザクションTR6にも更新前ログがあるということは
分かりました。
テキストの解釈では更新前ログを使わず放っておいても良い(それ以外に記録は
残ってないという前提)、再びTR6の処理を
やれば良いという解釈で
過去問の解釈はなにかしら記録が残っている可能性もあるので念のためロールバックする、
という解釈、
だいたいこんな感じでよろしいでしょうか?
ロールフォワードがT2,T5でT3は読み込み処理で除外されるので、
消去法でアにすることも可能ですが
2017.01.03 20:59
グレッグさん(No.7)
管理人様ついでに他の問題の質問をしてもいいですか?新たにスレを立てないといけない場合はそのようにいたします
応用情報技術者 平成28年春期 午前問30
午前問30
媒体障害の回復において,最新のデータベースのバックアップをリストアした後に,トランザクションログを用いて行う操作はどれか。
これについてですが、
エ バックアップ取得後にコミットした全てのトランザクションをロールフォワードする。
が正解です
ア バックアップ取得後でコミット前に中断した全てのトランザクションをロールバックする。
これと非常に迷いました。両方正解で何故ダメなのかと。アの場合、コミット前に中断した媒体障害は更新前ログしか残っておらずデータとしては残ってないので放っておいて良いという判断でよろしいでしょうか?
応用情報技術者 平成28年春期 午前問30
午前問30
媒体障害の回復において,最新のデータベースのバックアップをリストアした後に,トランザクションログを用いて行う操作はどれか。
これについてですが、
エ バックアップ取得後にコミットした全てのトランザクションをロールフォワードする。
が正解です
ア バックアップ取得後でコミット前に中断した全てのトランザクションをロールバックする。
これと非常に迷いました。両方正解で何故ダメなのかと。アの場合、コミット前に中断した媒体障害は更新前ログしか残っておらずデータとしては残ってないので放っておいて良いという判断でよろしいでしょうか?
2017.01.09 11:17
管理人(No.8)
平成28年春期 午前問30のケースは媒体障害のためバックアップから回復します。
バックアップデータをディスクに戻すと、データベースはバックアップ時点の内容になります。トランザクションには永続性が求められるため一度コミットされたトランザクションが消失することは許されません。このためバックアップ時点から障害発生までにコミットされたトランザクションを、更新後ログを使用して再現し、データベースの内容を障害発生直前まで前進復帰させることになります。
「ア」についてはコミットされておらず、バックアップの適用~ロールフォワードによってデータベースの内容が自ずとトランザクション開始時点の状態に戻っているため、ロールバックを要しないということになります。
バックアップデータをディスクに戻すと、データベースはバックアップ時点の内容になります。トランザクションには永続性が求められるため一度コミットされたトランザクションが消失することは許されません。このためバックアップ時点から障害発生までにコミットされたトランザクションを、更新後ログを使用して再現し、データベースの内容を障害発生直前まで前進復帰させることになります。
「ア」についてはコミットされておらず、バックアップの適用~ロールフォワードによってデータベースの内容が自ずとトランザクション開始時点の状態に戻っているため、ロールバックを要しないということになります。
2017.01.11 14:01