データベーススペシャリスト 2016年 午後1 問02
データベースの運用設計に関する次の記述を読んで、設問1〜3に答えよ。
A社は、仕入れた商品を中小企業向けに小口販売している卸売業者である。 A社では、受注、出荷、発注、在庫管理及び販売分析の業務を支援する受発注在庫管理システムを運用している。
〔プログラムとテーブルの関係〕
受発注在庫管理システムの主要なプログラムとテーブルの参照・更新の関係は、表1に示すとおりである。

(1) “商品”テーブル、“仕入先” テーブル及び “販売先” テーブルの追加、変更の要求は、“マスタ更新登録” テーブルに登録され、バッチプログラムで1件ずつコミットしながら反映される。
(2) “在庫”テーブルは、在庫のうちの3割 (売れ筋商品) に相当する約1,000行が毎日頻繁に変更される。
(3) “出荷”テーブルには、毎日、約400,000行が追加される。
(4) “日別販売実績” テーブルには、当日分の販売実績が追加される。また、“月別販売実績” テーブルには、当日分の販売実績が当月分の販売実績に反映される。これらのテーブルには、直近3年分の販売実績が蓄積されている。
(5) “分析用データ” テーブルは、販売分析で使用する。 当日分の販売実績が、前日に作成された“分析用データ” テーブルに反映され、直近3年分の分析結果となるように維持されている。“分析用データ” テーブルは、バッチプログラム “分析用データ作成” を用いて、蓄積されている販売実績を基に、再作成することも可能である。
〔データの入出力〕
(1) RDBMSがディスクとデータの入出力を行う単位を、ページという。1ページ内にはテーブルの行が複数格納される。
(2) 同じページに、異なるテーブルの行が格納されることはない。
(3) 受発注在庫管理システムでは、ページのサイズは4,096バイトとしている。 また、“在庫”テーブル及び “出荷” テーブルは、1ページ内に40行格納できるものとする。
〔RDBMSのバックアップ機能・復元機能・更新ログによる回復機能〕
1.バックアップ機能
(1) バックアップの単位には、データベース単位とテーブル単位がある。
(2) バックアップの種類には、取得するページの範囲によって、全体バックアップ、増分バックアップ及び差分バックアップがある。
① 全体バックアップには、全ページが含まれる。
② 増分バックアップには、前回の全体バックアップ取得後に変更されたページが含まれる。 ただし、前回の全体バックアップ取得以降に増分バックアップを取得していた場合は、前回の増分バックアップ取得後に変更されたページだけが含まれる。
③ 差分バックアップには、前回の全体バックアップ取得後に変更された全てのページが含まれる。
(3) 全体バックアップと増分バックアップの場合は、バックアップ取得ごとにバックアップファイルが作成される。 差分バックアップの場合は、2回目以降の差分バックアップ取得ごとに、前回の差分バックアップファイルが最新の差分バックアップファイルで置き換えられる。
(4) バックアップ取得に要する時間は、バックアップを取得するページ数に比例する。
2.復元機能
(1) バックアップを用いて、バックアップ取得時点の状態に復元できる。
(2) 復元の単位は、バックアップの単位と同一である。 データベース単位のバックアップを用いて、特定のテーブルだけを復元することはできない。
3.更新ログによる回復機能
(1) バックアップを用いて復元した後、更新ログを用いたロールフォワード処理によって指定の時刻の状態に回復できる。
(2) 更新ログによる回復に要する時間は、更新ログの量に比例する。
〔バックアップ及び回復の方針〕
(1) オンライン時間帯直前に、データベース単位でバックアップを取得する。
(2) オンラインプログラムで更新され得るテーブルは、オンライン時間帯直後に、テーブル単位でバックアップを取得する。
(3) それぞれのバッチプログラムを実行する直前に、更新対象のテーブルについて、テーブル単位でバックアップを取得する。 ただし、(2)でバックアップを取得したテーブルは対象外とする。
(4) バックアップの種類は、全体バックアップとする。
(5) 回復は、受注、出荷、発注、在庫管理の業務に影響するテーブルを優先する。
〔データ異常発生時の回復運用〕
バッチプログラム“出荷計上”にプログラム不良があり、“在庫” テーブルの当日分の内容が不正になっていた。 これが原因でバッチプログラム “発注対象データ作成”が中断した。 バッチプログラムで更新された全てのテーブルを当日のオンライン時間帯直後の状態に復元し、プログラム不良を修正後、全てのバッチプログラムを再実行すれば回復可能であるが、時間が掛かるので、次の手順を立案した。
第1段階 バックアップを用いて “出荷” テーブルと “在庫” テーブルを当日のオンライン時間帯直後の状態に復元し、プログラム不良を修正したバッチプログラム “出荷計上” を再実行する。
第2段階 バックアップを用いて“(ア)”テーブルを当日のオンライン時間帯直後の状態に復元し、バッチプログラム“(イ)”を再実行する。
第3段階 バックアップを用いて“(ウ)”テーブルを当日のオンライン時間帯直後の状態に復元し、バッチプログラム“(エ)”を再実行する。
第4段階 バッチプログラム “マスタ更新反映” を実行する。
設問1:受発注在庫管理システムのバックアップ及び回復について、(1)、(2)に答えよ。
問題文を見る(1)図1中の各契機でのテーブル単位のバックアップについて、次の表でバックアップを取得するものに “○” を記入せよ。
なお、バックアップを取得しないものは、空欄のままとすること。


模範解答

解説
解答の導き方
まず使う方針を絞ります。問題文にある方針のうち、該当する記述は次の2つです。
「オンラインプログラムで更新され得るテーブルは、オンライン時間帯直後に、テーブル単位でバックアップを取得する。」および「それぞれのバッチプログラムを実行する直前に、更新対象のテーブルについて、テーブル単位でバックアップを取得する。ただし、バックアップを取得したテーブルは対象外とする。」。これらに従って、
・オンライン実行によって書き込みが発生し得るテーブルはオンライン終了直後の契機でバックアップする(方針(2))。
・各バッチは実行直前にそのバッチが書き込むテーブルをバックアップする(方針(3)、ただし方針(2)で既に取得済みのテーブルは除く)。
「オンラインプログラムで更新され得るテーブルは、オンライン時間帯直後に、テーブル単位でバックアップを取得する。」および「それぞれのバッチプログラムを実行する直前に、更新対象のテーブルについて、テーブル単位でバックアップを取得する。ただし、バックアップを取得したテーブルは対象外とする。」。これらに従って、
・オンライン実行によって書き込みが発生し得るテーブルはオンライン終了直後の契機でバックアップする(方針(2))。
・各バッチは実行直前にそのバッチが書き込むテーブルをバックアップする(方針(3)、ただし方針(2)で既に取得済みのテーブルは除く)。
次に「更新(書き込み)」の判定基準を明確にします。表1の記号はR, C, U, CU, CR等がありますが、バックアップの対象は「書き込みを伴う操作」です。したがって「CまたはUを含む記号(C, U, CU, CR等)」を更新(書き込み)とみなします。CRはCを含むため書き込み扱いです。Rのみは参照なのでバックアップ要件の判定では書き込みとはみなしません。
以上を踏まえ、図1のスケジュールと表1の参照・更新記号を突き合わせて、各契機で「オンライン終了直後(方針(2))」および「各バッチ実行直前(方針(3))」の判断を順に行います。以下、契機ごとに図1で動くプログラムと表1に示された更新記号を示し、その結果としてバックアップを取得するテーブルを決めます。
T1(契機の説明)
- 図1でT1~T2間に実行されるプログラム:オンライン処理(当日にオンラインで動くもの)と、バッチ「出荷計上」がT1~T2に実行される。したがってT1は「オンライン時間帯直後」かつ「出荷計上 実行直前」の時点と読みます。
- オンライン更新のバックアップ(方針(2)):表1でオンラインプログラムが書き込むテーブルを確認します。具体例:
- 「取引先管理」「商品情報管理」の行に「マスタ更新登録」に対して「C」があるので、マスタ更新登録はオンラインで作成され得ます → 「マスタ更新登録」をバックアップ。
- 「受注管理」に「受注」への「CU」が付いているので、「受注」をバックアップ。
- 「出荷処理」に「出荷指図」への「C」があるので、「出荷指図」をバックアップ。
- バッチ実行直前のバックアップ(方針(3)):バッチ「出荷計上」がT1~T2に実行され、表1の該当行に書き込み記号(出荷・在庫などの更新)があるため、その更新対象を実行直前にバックアップします。よって「出荷」と(表1に更新記号があるため)「在庫」もバックアップします。
→ 結果(T1でバックアップするテーブル): マスタ更新登録、受注、出荷指図、出荷、在庫。
T2
- 図1でT2~T3に実行されるのは「販売実績日次集計」。
- 表1で「販売実績日次集計」行は「日別販売実績」に「C」を持っている(=当日の販売実績を日次テーブルに作成する)ので、方針(3)に従い実行直前のT2に「日別販売実績」をバックアップします。
→ 結果(T2): 日別販売実績。
T3
- 図1でT3~T4に実行されるのは「需要予測」(上段)と「販売実績月次集計」(下段)。販売実績日次集計の結果がそれぞれの入力になっている(図1の矢印参照)。
- 表1を見ると「需要予測」「販売実績月次集計」はそれぞれ自らが更新するテーブル(需要予測テーブル、月別販売実績など)に書き込み記号を持つため、方針(3)に従って実行直前のT3にそれらをバックアップします。
→ 結果(T3): 需要予測、月別販売実績。
T4
- 図1でT4~T5に実行されるのは「発注対象データ作成」と「分析用データ作成」。
- 表1で「発注対象データ作成」は「発注対象データ」を、「分析用データ作成」は「分析用データ」を更新する(C, R, U等の記号あり)ので、方針(3)に従い実行直前のT4にそれぞれバックアップします。
→ 結果(T4): 発注対象データ、分析用データ。
T5
- 図1でT5付近に「マスタ更新反映」が実行される(図1のT5の説明参照)。
- 表1の「マスタ更新反映」行は「商品」「仕入先」「販売先」などに更新記号(CU等)を持つため、方針(3)に従って実行直前のT5にこれらのマスタテーブルをバックアップします。
→ 結果(T5): 商品、仕入先、販売先。
以上の論理により、契機ごとにバックアップを取得するテーブルは次のとおりになります。各契機に○を付ける対象(一覧):
- T1: マスタ更新登録、受注、出荷指図、出荷、在庫
- T2: 日別販売実績
- T3: 需要予測、月別販売実績
- T4: 発注対象データ、分析用データ
- T5: 商品、仕入先、販売先
誤りやすいポイント
- 更新判定でCRを見落とす/Rと混同する。CRはCを含むため「書き込み」とみなす必要があります。
- 方針(3)で「ただし、(2)でバックアップを取得したテーブルは対象外」とある点を忘れると、同じテーブルを重複して(不必要に)バックアップすべきと誤判断しやすいです。
- バックアップの単位と復元の単位を混同すること。問題文にあるように「復元の単位は、バックアップの単位と同一である」ため、データベース単位で取ったバックアップから特定テーブルだけを取り出して復元することはできません。
- 図の矢印や実行順序と「バックアップを取る契機」を読み違え、オンライン直後/バッチ直前のタイミングを誤認するミス。
FAQ
Q: 「CR」はバックアップ対象になりますか?
A: はい。表1の記号解釈で「CまたはUを含むものを書き込み(更新)とみなす」ため、CR(Cを含む)はバックアップ対象です。
A: はい。表1の記号解釈で「CまたはUを含むものを書き込み(更新)とみなす」ため、CR(Cを含む)はバックアップ対象です。
Q: データベース単位の全体バックアップがあればテーブル単位バックアップは不要では?
A: いいえ。問題文にあるとおり「復元の単位は、バックアップの単位と同一である」ため、データベース単位バックアップからは特定テーブル単位での復元ができません。業務影響度の高いテーブルはテーブル単位でバックアップを取る必要があります。
A: いいえ。問題文にあるとおり「復元の単位は、バックアップの単位と同一である」ため、データベース単位バックアップからは特定テーブル単位での復元ができません。業務影響度の高いテーブルはテーブル単位でバックアップを取る必要があります。
Q: 同じテーブルを複数のバッチが更新する場合、どの契機でバックアップすればよいですか?
A: 基本は「オンライン直後(方針(2))で既に取得していればそれ以降は除外」、そうでなければ各バッチの実行直前(方針(3))にそのバッチが更新するテーブルを取得します。方針(3)にある「ただし、(2)で取得したテーブルは対象外」を必ず適用してください。
A: 基本は「オンライン直後(方針(2))で既に取得していればそれ以降は除外」、そうでなければ各バッチの実行直前(方針(3))にそのバッチが更新するテーブルを取得します。方針(3)にある「ただし、(2)で取得したテーブルは対象外」を必ず適用してください。
関連キーワード: 増分バックアップ、差分バックアップ、ロールフォワード、トランザクションログ、ポイントインタイムリカバリ
設問1:受発注在庫管理システムのバックアップ及び回復について、(1)、(2)に答えよ。
問題文を見る(2)図1で実行中のバッチプログラムがテーブルにアクセスしたとき、ディスク障害を検知して異常終了する場合がある。 障害を検知したバッチプログラム名、ディスク障害の影響を受けたテーブル名、及びディスク復旧後の回復手順を、次の表にまとめた。 表中の(a)〜(f)に入れる適切な字句を答えよ。(b, c, dは順不同)


模範解答
a:・更新ログによる回復機能
・更新ログを用いたロールフォワード処理
b:商品
c:仕入先
d:販売先
e:再実行
f:継続
解説
解答の論理構成
- (a) の判断
- 【問題文】「3. 更新ログによる回復機能 (1)…ロールフォワード処理によって指定の時刻の状態に回復できる。」
- “出荷”テーブルをバックアップで復元した後に“バッチプログラム“出荷計上”終了時の状態”へ進めるにはロールフォワードが必須。ゆえに「更新ログによる回復機能」又は具体動作名「更新ログを用いたロールフォワード処理」を記入。
- (b)(c)(d) の判断
- 【問題文】「(1) “商品”テーブル、“仕入先” テーブル及び “販売先” テーブルの追加、変更の要求は、“マスタ更新登録” テーブルに登録され…“マスタ更新反映”を用いて反映される。」
- 障害を検知したバッチが“マスタ更新反映”なので、影響を受ける三つのマスタを同時に過去時点へ戻す必要がある。従って (b)「商品」、(c)「仕入先」、(d)「販売先」。
- (e) の判断
- 障害で途中終了した“マスタ更新反映”を完結させるには再度走らせるしかない。「再実行」を記入。
- (f) の判断
- “分析用データ作成”は“販売実績月次集計”完了後に開始するバッチで【表1】にもマスタ三表との参照・更新関係なし。よって復元する必要はなく、そのまま「継続」。
誤りやすいポイント
- バックアップ復元だけで“出荷計上”終了時点へ戻せると勘違いし、更新ログによるロールフォワードを漏らす。
- “マスタ更新反映”が扱うテーブルを“マスタ更新登録”と誤読してしまう。
- 「再実行」と「継続」を混同し、影響のないバッチまで再実行して整合性を崩す。
FAQ
Q: ロールフォワードとロールバックはどう違いますか?
A: ロールフォワードはバックアップ取得後の更新ログを順に当てて時点を進める処理、ロールバックはトランザクション異常時に直前の整合状態へ戻す処理です。今回は前者が必要です。
A: ロールフォワードはバックアップ取得後の更新ログを順に当てて時点を進める処理、ロールバックはトランザクション異常時に直前の整合状態へ戻す処理です。今回は前者が必要です。
Q: テーブル単位バックアップでデータベース全体の整合性は保てますか?
A: 【問題文】「復元の単位は、バックアップの単位と同一である。」ため、整合性を保つには依存関係を洗い出し、関連テーブルを同じ時点で揃える必要があります。本問では三つのマスタを同時に復元しています。
A: 【問題文】「復元の単位は、バックアップの単位と同一である。」ため、整合性を保つには依存関係を洗い出し、関連テーブルを同じ時点で揃える必要があります。本問では三つのマスタを同時に復元しています。
Q: 差分バックアップではなく全体バックアップを選んだ理由は?
A: 【バックアップ及び回復の方針】「(4) バックアップの種類は、全体バックアップとする。」と明示されており、回復手順を単純化し運用負荷を減らす狙いがあります。
A: 【バックアップ及び回復の方針】「(4) バックアップの種類は、全体バックアップとする。」と明示されており、回復手順を単純化し運用負荷を減らす狙いがあります。
関連キーワード: ロールフォワード、全体バックアップ、更新ログ、テーブル単位復元、バッチ再実行
設問2:バックアップ運用の見直しについて、(1)〜(3)に答えよ。
問題文を見る(1)月初めだけ全体バックアップを取得し、日々の運用では増分バックアップ、差分バックアップも活用することにした。 ただし、どちらのバックアップでも同程度の容量の節約となる場合は、バックアップ取得に要する時間が短い方を選択する。この場合、“在庫” テーブル及び “出荷” テーブルについて、選択すべきバックアップの種類として “増分” 又は “差分” のいずれかを○印で囲め。 また、その選択根拠として “容量” 又は “時間” のいずれかを○印で囲み、その理由(容量が節約できる理由又は時間が短い理由)を、30字以内で述べよ。
模範解答

解説
解答の論理構成
- 変更量と更新パターンを整理
- 在庫:同一ページが繰り返し更新【問題文 (2)】
- 出荷:毎日新しいページが追加【問題文 (3)】
- バックアップ仕様を適用
- 差分は「前回の全体バックアップ取得後に変更された全てのページが含まれる」かつ「ファイルは置き換え」【バックアップ機能1.(2)③、1.(3)】
- 増分は「直前のバックアップ以降に変更されたページを毎回新規ファイルに追加」【バックアップ機能1.(2)②】
- 容量評価
- 在庫:差分なら固定Kページ×1ファイル、増分ならKページ×日数ファイル → 差分が有利。
- 出荷:差分は日を追うごとにページ数が累積、増分は1日ぶんのみ → 容量は同程度。
- 時間評価
- 出荷では容量が拮抗するので「時間が短い方」【小問説明】を優先。増分は1日ぶんだけ読み書きすれば済むので高速。
- 結論を表形式に整理し、理由欄は30字以内の端的な文章で示す。
誤りやすいポイント
- 差分バックアップを「毎回蓄積される」と誤解し、容量計算を増分と同じにしてしまう。
- 在庫テーブルで「更新行=変更ページ数」と短絡し、ページが毎日膨大に増えると誤認する。
- 「同程度」の解釈を曖昧にし、時間評価を後回しにしてしまう。
FAQ
Q: 差分バックアップが置き換えられるのは本当に毎回ですか?
A: はい。【バックアップ機能1.(3)】に「差分バックアップの場合は…前回の差分バックアップファイルが最新の差分バックアップファイルで置き換えられる」と明記されています。
A: はい。【バックアップ機能1.(3)】に「差分バックアップの場合は…前回の差分バックアップファイルが最新の差分バックアップファイルで置き換えられる」と明記されています。
Q: 出荷テーブルでも容量が増え続けるのに、なぜ差分を選ばないのですか?
A: 差分は前回全体バックアップ以降の全ページを毎回取得するので取得時間が急増します。一方、増分は当日の追加分だけなので短時間という利点があります。
A: 差分は前回全体バックアップ以降の全ページを毎回取得するので取得時間が急増します。一方、増分は当日の追加分だけなので短時間という利点があります。
Q: 増分と差分を混在させても復元は複雑になりませんか?
A: バックアップ運用の設計に合わせて復元手順をスクリプト化しておけば問題ありません。今回の設問ではバックアップ種別の選択理由が主題で、復元手順の複雑さは評価対象外です。
A: バックアップ運用の設計に合わせて復元手順をスクリプト化しておけば問題ありません。今回の設問ではバックアップ種別の選択理由が主題で、復元手順の複雑さは評価対象外です。
関連キーワード: 増分バックアップ、差分バックアップ、更新ページ、取得時間、ディスク容量
設問2:バックアップ運用の見直しについて、(1)〜(3)に答えよ。
問題文を見る(2)ある一つのテーブルのバックアップを月初めだけ取得し、日々のバックアップは取得しないことにした。 回復の方針に従って、どのテーブルを対象にすべきか、テーブル名を答えよ。
模範解答
“分析用データ”テーブル
解説
解答の導き方
まず設問は「ある一つのテーブルについて月初めだけバックアップを取得し、日々のテーブル単位バックアップを取得しない」運用にできるかを問うています。判断の基準は本文のバックアップ方針に従うことです。
-
優先度の確認
バックアップ及び回復の方針の(5)には「回復は、受注、出荷、 発注、在庫管理の業務に影響するテーブルを優先する。」とあります。したがって業務に直接影響するテーブルは日常的に確実に保護(=日々のバックアップやすぐ復元できる体制)しておく必要があり、これらを対象に「月初めのみ」の扱いにするのは方針に反します。 -
業務影響のあるテーブルの特定(除外理由)
本文から、特に業務に直結して頻繁に更新されることが分かるテーブル例を確認します。例えば「在庫」については「在庫のうちの3割 (売れ筋商品) に相当する約1,000行が毎日頻繁に変更される」とあり、「出荷」については「毎日、 約400,000行が追加される」とあります。これらは運用上重要かつ更新量が多いため、日々のバックアップ(および即時復旧手段)が必要です。したがって「在庫」「出荷」「受注」「発注対象データ」などは月初めのみのバックアップ対象にしてはいけません。 -
候補の絞込みと再作成可能性の確認
候補となるのは業務の直接処理に使われず、万一消失しても他の永続データから復元・再作成できるテーブルです。本文は「分析用データ」について「当日分の販売実績が、前日に作成された“分析用データ”テーブルに反映され、直近3年分の分析結果となるように維持されている。」「“分析用データ” テーブルは、バッチプログラム “分析用データ作成” を用いて、蓄積されている販売実績を基に、再作成することも可能である」と明記しています。つまり「分析用データ」は派生データ(販売実績を原データとして再生成可能)であり、業務の当日運用を直接停止させる性質のデータではありません。 -
結論の導出
上記より、バックアップ方針(5)に照らして業務に影響しないかつ再作成可能なテーブルを月初めのみのバックアップ対象とするのが妥当です。本文の記述から該当するのは「分析用データ」テーブルであり、これを月初めのみバックアップして日々のテーブル単位バックアップを省くことが方針に矛盾しません。
以上により、対象とすべきテーブルは「分析用データ」テーブルです。
誤りやすいポイント
- 「フルバックアップ(データベース単位)が毎日あるから個別テーブルの毎日バックアップは不要」と考える誤り。復元の単位はバックアップの単位と同一であり、データベース単位バックアップだけでは特定テーブルのみを迅速に復元できない点を見落としやすいです。
- 「更新頻度が高い=毎日バックアップが必要」として、派生データである「分析用データ」を単純に除外できないと判断する誤り。再作成可能かどうかを確認することが重要です。
- 生データである「日別販売実績」「月別販売実績」などを軽視してしまう誤り。派生データを再作成するにはこれら原データが確実に保護されている必要があります。
FAQ
Q: 「分析用データ」は毎日更新されているようですが、月初めのみで本当に安全ですか?
A: 安全なのは「分析用データ」が派生データであり、本文にある通り「再作成することも可能である」ためです。重要なのは派生元となる「日別販売実績」「月別販売実績」などの原データが日々確実にバックアップされていることです。原データが確保されていれば、テーブル単位の毎日バックアップを省いても復旧可能です。
A: 安全なのは「分析用データ」が派生データであり、本文にある通り「再作成することも可能である」ためです。重要なのは派生元となる「日別販売実績」「月別販売実績」などの原データが日々確実にバックアップされていることです。原データが確保されていれば、テーブル単位の毎日バックアップを省いても復旧可能です。
Q: データベース全体のフルバックアップは毎日取得されるので、特定テーブルの毎日バックアップは不要では?
A: データベース単位のバックアップは確かに毎日取得されますが、復元の単位はバックアップの単位と同一であり「データベース単位のバックアップを用いて、特定のテーブルだけを復元することはできない」ため、特定テーブルの部分復旧を迅速に行うにはテーブル単位のバックアップが有利です。業務影響の少ない派生テーブルだけを例外扱いにするのが妥当です。
A: データベース単位のバックアップは確かに毎日取得されますが、復元の単位はバックアップの単位と同一であり「データベース単位のバックアップを用いて、特定のテーブルだけを復元することはできない」ため、特定テーブルの部分復旧を迅速に行うにはテーブル単位のバックアップが有利です。業務影響の少ない派生テーブルだけを例外扱いにするのが妥当です。
Q: 「日別販売実績」や「月別販売実績」を月初めのみのバックアップにしてはいけないのですか?
A: これらは分析の原データであり、またシステム内で日次・月次の集計に利用されます。派生データ再作成の前提となるため、日々の保護が必要であり、月初めのみのバックアップ対象にするべきではありません。
A: これらは分析の原データであり、またシステム内で日次・月次の集計に利用されます。派生データ再作成の前提となるため、日々の保護が必要であり、月初めのみのバックアップ対象にするべきではありません。
関連キーワード: フルバックアップ、増分バックアップ、差分バックアップ、ロールフォワード、派生データ
設問2:バックアップ運用の見直しについて、(1)〜(3)に答えよ。
問題文を見る(3)(2)のテーブルに障害が発生し、かつ、バックアップファイルが壊れていた場合、どのように回復するか、40字以内で述べよ。
模範解答
3年分の販売実績を基に、バッチプログラム“分析用データ作成”を再実行する。
解説
解答の論理構成
- 障害の状況整理
- 問題条件で「(2)のテーブルに障害」「バックアップファイルが壊れていた」と指摘。
- 更新ログを使った回復もバックアップに依存するため利用不可。
- 代替策の探索
- 【問題文】(5)
「バッチプログラム “分析用データ作成” を用いて、蓄積されている販売実績を基に、再作成することも可能」 - 【問題文】(4)
「これらのテーブルには、直近3年分の販売実績が蓄積されている」 - よって “分析用データ” テーブルはバックアップ不要で再生成可能。
- 【問題文】(5)
- 手順の決定
- まず障害テーブル“分析用データ”をtruncateなどで空にするか、別名退避。
- 続いてバッチプログラム“分析用データ作成”を実行し、3年分の実績をもとに全件再作成。
- オンライン系・他バッチへの影響が最小で、求められる回復の迅速性を満たす。
誤りやすいポイント
- 「更新ログによる回復機能」で戻せると誤解し、バックアップ無しでは適用できない旨を見落とす。
- “分析用データ作成”が差分更新だと決めつけ、フル再生成が可能であることを読み飛ばす。
- 「販売実績は3年分」との記述を引用せずに説明し、根拠不十分となる。
FAQ
Q: 更新ログが残っているならロールフォワードだけで戻せるのでは?
A: 【問題文】3.(1) にある通り、「バックアップを用いて復元した後」にしかロールフォワードは行えません。バックアップが壊れているため今回は適用できません。
A: 【問題文】3.(1) にある通り、「バックアップを用いて復元した後」にしかロールフォワードは行えません。バックアップが壊れているため今回は適用できません。
Q: “分析用データ”を再生成すると他バッチの順序に影響しない?
A: “分析用データ”は分析専用で他業務の前提データではないため、再生成による依存関係はありません。プログラム再実行だけで完結します。
A: “分析用データ”は分析専用で他業務の前提データではないため、再生成による依存関係はありません。プログラム再実行だけで完結します。
関連キーワード: 差分バックアップ、ロールフォワード、データ再生成、ETL
設問3:〔データ異常発生時の回復運用〕 について、(1)、(2)に答えよ。
問題文を見る(1)(ア)〜(エ) に入れる適切な字句を答えよ。
模範解答
ア:需要予測
イ:需要予測
ウ:発注対象データ
エ:発注対象データ作成
解説
解答の導き方
-
問題の事実確認
問題文に「バッチプログラム“出荷計上”にプログラム不良があり、 “在庫” テーブルの当日分の内容が不正になっていた。 これが原因でバッチプログラム “発注対象データ作成”が中断した。」とあります。まず「出荷計上」で在庫が不正になり、それが連鎖的に後続バッチの実行に影響したことが出発点です。第1段階で「出荷」と「在庫」を当日のオンライン時間帯直後の状態に復元し、「出荷計上」を再実行する、というのは既に提示された手順どおりです。 -
復旧手順(第2・第3段階)の選択理由
- 第2段階で何を復元・再実行するか:
「需要予測」は「日別販売実績」を入力にして作成され、その結果が「発注対象データ作成」の入力になります。出荷系の不正が日別販売実績を通じて需要予測の結果に影響している可能性が高いため、発注処理を正しく行うには「需要予測」を正しい状態に戻すことが必要です。よって(ア)は 「需要予測」、(イ)はバッチ名としての「需要予測」です。
なお、「日別販売実績」自体は直近3年分を保持する大きなテーブルであり、復元(または再集計)には時間がかかります。今回の方針では、下流の出力を再作成する(=該当バッチを再実行する)ことで整合を取る方針になっているため、まずは「需要予測」を復元・再実行して下流の入力を正す方法が合理的です。 - 第3段階で何を復元・再実行するか:
「発注対象データ作成」が中断しているため、その出力である「発注対象データ」には途中までの不整合な書き込みが残っている可能性があります。部分書き込みが残ったまま再実行すると重複や不正な混在が起きるため、当日のオンライン時間帯直後の状態に戻してからバッチ「発注対象データ作成」を再実行する必要があります。したがって(ウ)は 「発注対象データ」、(エ)は「発注対象データ作成」です。
- 第2段階で何を復元・再実行するか:
-
順序のまとめ(復旧全体の論理)
- 第1段階:既に示されたとおり「出荷」「在庫」を復元し、「出荷計上」を再実行(与件)。
- 第2段階:まず「需要予測」を当日のオンライン時間帯直後の状態に復元し、バッチ「需要予測」を再実行して正しい予測値を作る。(ア=需要予測、イ=需要予測)
- 第3段階:「発注対象データ」を当日のオンライン時間帯直後の状態に復元し、バッチ「発注対象データ作成」を再実行する。(ウ=発注対象データ、エ=発注対象データ作成)
- 第4段階:最後に「マスタ更新反映」を実行して各処理の結果を反映する(与件)。
以上の論理から、空欄には順に「需要予測」「需要予測」「発注対象データ」「発注対象データ作成」が入ります。
誤りやすいポイント
- 需要予測が在庫を参照すると誤解する点。表1を確認すると「需要予測」は「日別販売実績」を参照しているため、在庫参照を根拠に判断するのは誤りです。
- 中断したバッチの「入力」だけを復元すればよいと考える誤り。中断したバッチが途中まで出力を書き込んでいれば、その出力テーブルを復元してから再実行しないと二重化や不整合が起きます。
- 大きなテーブル(直近3年分の「日別販売実績」など)を不用意に復元して時間を浪費すること。表2のバックアップ方針・復元時間の性質(ページ数に比例)を踏まえて、最小限の復元+バッチ再実行で済ませられるかを検討します。
- バックアップ単位と復元単位の混同。「復元の単位はバックアップの単位と同一である」ため、テーブル単位バックアップがない場合は個別テーブル復元ができない点に注意します。
FAQ
Q: なぜ「販売実績日次集計」を先に復元・再実行せずに「需要予測」を復元するのですか?
A: もし「日別販売実績」自体が不正であれば、もちろんまずそれを復元または「販売実績日次集計」を再実行する必要があります。ただし「日別販売実績」はデータ量が大きく復元に時間がかかるため、復旧方針としては「出荷計上」を正しく再実行した後に、比較的小さな出力テーブル(ここでは「需要予測」)を復元・再実行して順に下流を整合させる方が早い場合が多い、という判断です。実際にどちらを先に行うかは、どのテーブルが不正か(=実際に影響を受けたのはどの出力か)によって決めます。
A: もし「日別販売実績」自体が不正であれば、もちろんまずそれを復元または「販売実績日次集計」を再実行する必要があります。ただし「日別販売実績」はデータ量が大きく復元に時間がかかるため、復旧方針としては「出荷計上」を正しく再実行した後に、比較的小さな出力テーブル(ここでは「需要予測」)を復元・再実行して順に下流を整合させる方が早い場合が多い、という判断です。実際にどちらを先に行うかは、どのテーブルが不正か(=実際に影響を受けたのはどの出力か)によって決めます。
Q: 部分的な更新ログ(ロールフォワード)で回復できませんか?
A: 更新ログによる回復(ロールフォワード)は可能で、ログ量に比例して時間がかかります。今回の方針はテーブル単位バックアップを使って早く戻し、必要なバッチだけ再実行するやり方です。ログ量が少なくロールフォワードが速ければそれを選択するのも有力な手段です。
A: 更新ログによる回復(ロールフォワード)は可能で、ログ量に比例して時間がかかります。今回の方針はテーブル単位バックアップを使って早く戻し、必要なバッチだけ再実行するやり方です。ログ量が少なくロールフォワードが速ければそれを選択するのも有力な手段です。
Q: 中断したバッチを単に再実行すれば良いのでは?
A: 中断前の出力が残っていると再実行が重複や不整合を招くため、通常は当該出力テーブルを中断前の正常な状態に復元してから再実行します。
A: 中断前の出力が残っていると再実行が重複や不整合を招くため、通常は当該出力テーブルを中断前の正常な状態に復元してから再実行します。
関連キーワード: トランザクション整合性、テーブル単位バックアップ、ロールフォワード、差分バックアップ、バッチ処理
設問3:〔データ異常発生時の回復運用〕 について、(1)、(2)に答えよ。
問題文を見る(2)バッチプログラム “出荷計上”、“(イ)”、“(エ)” の再実行、及び “マスタ更新反映” の実行を除いて、その他のバッチプログラムの再実行は不要である。その理由を40字以内で述べよ。
模範解答
・“在庫”テーブルと、そのデータを反映したテーブルを参照しないから
・“在庫”テーブルの不正な内容の影響を受けるテーブルを参照しないから
・“在庫”、“需要予測”、“発注対象データ”の各テーブルを参照しないから
解説
解答の導き方
状況整理
問題文に「バッチプログラム“出荷計上”にプログラム不良があり、 “在庫” テーブルの当日分の内容が不正になっていた。これが原因でバッチプログラム “発注対象データ作成”が中断した」とあるため、原因は当日分の“在庫”テーブルの不正であることが明示されています。
問題文に「バッチプログラム“出荷計上”にプログラム不良があり、 “在庫” テーブルの当日分の内容が不正になっていた。これが原因でバッチプログラム “発注対象データ作成”が中断した」とあるため、原因は当日分の“在庫”テーブルの不正であることが明示されています。
依存関係の確認(図1の読み取り)
図1は処理の前後関係を示しており、出荷計上の後の流れが次のように分岐しています。上段:出荷計上 → 販売実績日次集計 → 需要予測 → 発注対象データ作成、下段:販売実績日次集計 → 販売実績月次集計 → 分析用データ作成。したがって、発注関連の経路(上段)が“在庫”の不正によって影響を受け、分析系(下段)は経路が分かれている点に注意します。
図1は処理の前後関係を示しており、出荷計上の後の流れが次のように分岐しています。上段:出荷計上 → 販売実績日次集計 → 需要予測 → 発注対象データ作成、下段:販売実績日次集計 → 販売実績月次集計 → 分析用データ作成。したがって、発注関連の経路(上段)が“在庫”の不正によって影響を受け、分析系(下段)は経路が分かれている点に注意します。
参照・更新関係の確認(表1の利用)
表1の参照/更新の関係から、今回の不正を直接参照・反映する可能性があるのは“在庫”を参照・利用する処理経路(需要予測→発注対象データ作成 等)であることが確認できます。一方、分析用処理は「販売実績月次集計」を起点とする別系統であり、発注側の“在庫”不正の影響経路に含まれていません。
表1の参照/更新の関係から、今回の不正を直接参照・反映する可能性があるのは“在庫”を参照・利用する処理経路(需要予測→発注対象データ作成 等)であることが確認できます。一方、分析用処理は「販売実績月次集計」を起点とする別系統であり、発注側の“在庫”不正の影響経路に含まれていません。
バックアップ方針の効果
「それぞれのバッチプログラムを実行する直前に、更新対象のテーブルについて、テーブル単位でバックアップを取得する」とあるため、個々のバッチが更新するテーブルは実行直前の状態へ個別に復元できます。これにより、影響を受けたテーブルだけを当日のオンライン時間帯直後の状態に戻し、影響経路上のバッチ(出荷計上 と 発注側の再実行対象)だけを再実行すれば、他のバッチが参照するテーブルは正しい状態に保たれます。
「それぞれのバッチプログラムを実行する直前に、更新対象のテーブルについて、テーブル単位でバックアップを取得する」とあるため、個々のバッチが更新するテーブルは実行直前の状態へ個別に復元できます。これにより、影響を受けたテーブルだけを当日のオンライン時間帯直後の状態に戻し、影響経路上のバッチ(出荷計上 と 発注側の再実行対象)だけを再実行すれば、他のバッチが参照するテーブルは正しい状態に保たれます。
結論(要点)
以上より、その他のバッチを再実行する必要がない理由は、「“在庫”の不正を参照・反映する経路に入らないため」です。
以上より、その他のバッチを再実行する必要がない理由は、「“在庫”の不正を参照・反映する経路に入らないため」です。
誤りやすいポイント
- 図1の分岐を誤読して「分析用データ作成は需要予測経路に依存する」と考える点。実際は「販売実績月次集計」系から作られる別系統である点を確認すること。
- 表1の参照/更新の列を数える際に列位置をずらして読み違えると、どのプログラムがどのテーブルを参照・更新するかを誤認するため注意すること。
- 直感的に「バグ発生後に実行された全バッチをやり直す」が安全と思い込むこと。バックアップ方針により影響範囲を限定して復旧できるため、無闇な全再実行は非効率となる。
FAQ
Q: 販売実績日次集計は再実行不要ですか?
A: 基本的に不要です。図1と表1から、日次集計は在庫の不正を伝播する発注側経路そのものではないためです。
A: 基本的に不要です。図1と表1から、日次集計は在庫の不正を伝播する発注側経路そのものではないためです。
Q: 分析用データが不正だったらどうしますか?
A: 問題文に「分析用データテーブルは…再作成することも可能である」とあるため、必要ならバッチ「分析用データ作成」を再実行して再生成しますが、今回の不正経路に含まれなければ不要です。
A: 問題文に「分析用データテーブルは…再作成することも可能である」とあるため、必要ならバッチ「分析用データ作成」を再実行して再生成しますが、今回の不正経路に含まれなければ不要です。
Q: どのようにして影響範囲を限定して復旧できるのですか?
A: 「オンライン時間帯直後にテーブル単位でバックアップを取得」「各バッチ実行直前に更新対象テーブルをバックアップ」という方針により、影響を受けたテーブルだけを復元して当該バッチのみ再実行できます。
A: 「オンライン時間帯直後にテーブル単位でバックアップを取得」「各バッチ実行直前に更新対象テーブルをバックアップ」という方針により、影響を受けたテーブルだけを復元して当該バッチのみ再実行できます。
関連キーワード: 依存関係、テーブル単位バックアップ、ロールフォワード、影響範囲分析、バッチ処理




