データベーススペシャリスト試験 2010年 午後103


データベースの保守・運用に関する次の記述を読んで、 設問1〜3に答えよ。

 E社は,登録している会員向けに健康食品を通信販売する会社である。 情報システム部のFさんは,請求情報照会処理と請求情報更新処理から構成される請求情報処理で使用するテーブルの保守とバックアップ計画の作成を任されている。  
〔テーブルのバックアップ, 回復及びロード〕  請求情報処理で使用するテーブルのバックアップ, 回復及びロードは,関係データベース管理システム (RDBMS) が備える機能を使用して行われている。 その概要は,次のとおりである。
1.テーブルのバックアップ  バックアップコマンドによって,テーブルごとにバックアップファイルを作成する。 そのファイルを, イメージコピー(以下, IC という)と呼ぶ。  ① IC は,取得するページの範囲によって, 全体IC, 増分IC及び差分IC の3種類に分けられる。   ・全体IC には、テーブルの全ページが含まれる。   ・増分 IC には,前回の全体 IC 取得後に変更されたすべてのページが含まれる。   ・差分IC には,前回の全体 IC 取得後に変更されたページが含まれる。 ただし,前回の全体 IC 取得以降に差分IC を取得していた場合は,前回の差分 IC 取得後に変更されたページだけが含まれる。  ② IC は,取得する時期によって, オフライン ICとオンラインICの2種類に分けられる。   ・オフライン IC の取得中は,ほかの利用者からのアクセスは参照だけが可能である。   ・オンライン IC の取得中は,ほかの利用者からのアクセスはすべての操作 (追加,参照,更新、削除)が可能であり, ICには未コミット状態のデータが含まれることがある。
2.テーブルの回復  IC と RDBMS が回復用に取得するログを入力すれば,回復コマンドによって,テーブルを直近の状態まで回復可能である。 可能な入力の組合せは,次のとおりである。  ・全体IC と全体IC 取得後のすべてのログ  ・全体ICとすべての差分 IC, 最後の差分 IC 取得後のすべてのログ  ・全体IC と最後の増分IC, その増分IC 取得後のすべてのログ
3.テーブルのロード  ロードコマンドによって, 大量のデータを INSERT文よりも効率よくテーブルに追加できる。ログを出力しないオプションを使った場合,ロード後のテーブルへのアクセスは,参照だけが可能であり, 全体 IC を取得すれば, すべての操作が可能になる。  
〔テーブルの構造〕  請求情報処理で使用するテーブルの構造を、 図1に示す。
データベーススペシャリスト試験(平成22年 午後I 問3 図1)  
〔請求情報照会処理の概要〕  請求情報照会処理では,図2のSQL 文を使用する。 照会1 と照会2のアクセス経路は主索引(主キーに定義された索引)である。 トランザクションの ISOLATION レベルは REPEATABLE READ であり, 排他は行単位に行われる。
データベーススペシャリスト試験(平成22年 午後I 問3 図2)
〔請求情報更新処理の概要〕  請求情報更新処理は,請求登録処理,入金登録処理,請求一括削除処理及び請求取消処理から構成される。
 1.請求登録処理は,会員を四つのグループに均等に分け, グループ単位に日を分けて,   それぞれ毎月1回, バッチ処理で行う。当処理は, “請求” テーブルと“請求明細”   テーブルに行を追加し, 請求番号ごとに同期点を取る。“請求” テーブルの請求日と“会員” テーブルの最新請求日には処理日を設定し, “商品別請求”テーブルの請求額合計に請求明細行の請求額を加算する。 請求登録処理の後、1か月以内に入金される。  2.入金登録処理は,請求登録処理日に合わせて,バッチ処理で行い,“請求”テーブルの入金日と “会員” テーブルの最新入金日に実際の入金日を設定する。 入金登録処理も,毎回,全会員数の25%を対象にするが,同じ日の請求登録処理対象の会員とは限らないので、二つの処理を合わせて,最大で全会員数の50%が対象になる。  3.請求一括削除処理はバッチ処理で行い, 月末日に入金日を調べて、 請求日が前月の行のうち, 入金済の行を削除する。  4.請求取消処理は,納品後に返品されたとき,“請求” テーブルの請求取消日に返品日を設定し,“請求明細” テーブルの返品フラグを 'N' から ‘Y'に更新する。また,“商品別請求” テーブルの請求額合計から返品対象の請求額を減算する。
 テーブルのデータに関する主な特徴は,次のとおりである。 1.年間を通じて扱う全体の商品の種類の数は変わらない。売れる商品は、月平均で全種類の25%である。 2.請求番号には,一意な連番を付与する。 請求明細番号には,請求番号ごとに1からの連番を付与する。 3.“請求明細”テーブルは,一つの請求番号に対して請求明細が平均2行存在する。 4.“請求”テーブル及び “請求明細” テーブルは, 最大 2か月間保存する。両テーブルの行数は,最も多い月で平均的な月の1.2倍となる。 また、 今後、年率 20%以上の増加が見込まれる。 5.“商品別請求” テーブルの請求額合計には、年度決算後に0を設定する。  
 請求一括削除処理は,図3に示す 2 個の DELETE 文を使って一括削除をする。図3中の削除1と削除2の間で同期点を取るものとする。 ページ中の削除された行の領域は,新たな行の追加のときに再利用可能である。   データベーススペシャリスト試験(平成22年 午後I 問3 図3)
〔問題の発生・検討〕  Fさんが請求情報更新処理のテストを行ったところ, 次の問題 A〜C が発生した。
問題 A 障害テストを行うために,請求登録処理を意図的に異常終了させた後, そのまま最初から再実行したところ, 請求番号を除き, 同じ内容の請求データ行が追加された。 問題 B 請求一括削除処理では,図3中の削除1 を実行したとき,データ量によって失敗することがあった。 問題 C 請求一括削除処理中は,図2のSQL文を発行するオンライントランザクションが長時間にわたって排他待ちになることがあった。
 Fさんは,発生した問題 A〜C について, それぞれ次の検討 A〜C を行った。
検討 A 問題 A の原因は, RDBMS が請求番号に常に一意な番号を自動採番しているからであった。 F さんは, “請求” テーブルに制約を追加することによって解決しようとした。 検討 B 問題 B の原因は,回復用に取得するログの量が1作業単位の許容上限値を超えたからであった。 F さんは, 対策として次の二つの方法を比較し,方法2を選択した。  方法1:1作業単位の許容上限値を20%増加させる。  方法2:一定行数を削除するたびに同期点を取るように, 削除1を変更する。
検討 C 問題 C に対する対策として, 請求情報照会処理のトランザクションのISOLATION REPEATABLE READ 5 READ UNCOMMITTED I変更したところ、長時間の排他待ちは解消したが,照会2では,実行のタイミングによって,請求額合計が少ないという不整合が発生した。 そこで,“請求”テーブルの明細数と “請求明細” テーブルの明細行の数が不一致の場合は,照会結果に含まれないように、 図2中の照会2を図4のように修正した。   データベーススペシャリスト試験(平成22年 午後I 問3 図4)
〔請求一括削除処理の内容 ・手順の変更〕  Fさんは,検討Cで述べた対策とは別に、問題Cに対する対策として, 請求一括削除処理の手順を表1のように変更した。 このとき, ある手順からある手順の間,オンライントランザクションからの“請求” テーブルと “請求明細” テーブルへのアクセスを停止することにした。 また, 手順 5 の終了後,次の請求一括削除処理を行うまで,差分IC又は増分IC を定期的に取得することにした。
データベーススペシャリスト試験(平成22年 午後I 問3 表1)  
〔テーブルの定期バックアップ計画〕  F さんはまず,請求情報処理の各処理とテーブルの CRUD 及び各処理の稼働情報(処理形態,稼働時間帯及び処理頻度)を調査し, 表2のように整理した。
データベーススペシャリスト試験(平成22年 午後I 問3 表2)
 次に、月末日の請求一括削除処理の終了後に全体 IC を取得し、請求登録処理と入金登録処理の終了後に, 差分 IC 又は増分IC を取得することにした。 バックアップ時間は、その時点のICの容量にほぼ比例することが分かったので,各テーブルの1か月分の全体 IC の容量に対する差分 IC及び増分IC の容量の割合を見積もった。その結果を表3に示す。 ここで,請求取消処理による影響は無視するものとする。
データベーススペシャリスト試験(平成22年 午後I 問3 表3)

設問1(1)設問1 〔問題の発生 検討〕 中の検討 A〜Cについて,(1)〜(3)に答えよ。

検討 A において, “請求” テーブルに追加すべき制約の適切な列名又は列名の組合せを答えよ。 また、 その制約の追加目的を,15字以内で述べよ。
模範解答
列名:会員番号,請求日 目的:一意性を保証するため
解説

模範解答のキーワード・論点整理

  • 追加すべき制約列:
    • 会員番号
    • 請求日
  • 制約の種類:一意制約(UNIQUE制約)
  • 制約の目的:同一会員の同一日に重複請求を防ぐ(一意性の保証)

解答になる理由

問題Aの概要:
「請求登録処理を異常終了させた後、再実行したところ、請求番号を除き同じ内容の請求データ行が追加された。」
検討Aの説明:
「RDBMSが請求番号に常に一意な番号を自動採番しているからであった。Fさんは、“請求”テーブルに制約を追加することによって解決しようとした。」
1. 請求テーブル構造(図1より)
カラム名主キー/制約
請求番号主キー(自動採番)
会員番号
請求日
明細数
請求取消日
入金日
2. 異常終了→再実行時の重複登録問題
  • 自動採番の主キー(請求番号)は重複せず、レコードは挿入される
  • ビジネス的には、同一会員・同一日に同じ請求を二重に作成してはいけない
3. ビジネスルールをデータベースに担わせる
  • 「同一会員(会員番号)・同一日(請求日)は一意でなければならない」
  • これを実現するにはUNIQUE制約を (会員番号, 請求日) の組合せに追加

受験者が誤りやすいポイント

  • 「請求番号」に対する制約追加を考える
    → すでに主キー・自動採番で一意。ここを制約しても重複防止にならない
  • 他の列(明細数や入金日など)を含める
    → ビジネス要件と関係ない列は制約の目的を達成しない
  • 制約目的の字数制限(15字以内)
    → 「重複登録防止」や「同一会員日に重複防止」など、簡潔に表現する

試験対策として覚えておくべきポイント

  1. ビジネスルールは制約で担保
    • アプリケーションだけでなく、DB制約(主キー・一意制約・チェック制約など)で整合性を担保
  2. 主キーとUNIQUE制約の違い
    • 主キーは「行の識別」
    • UNIQUE制約は「特定列の重複禁止(ビジネスルール)」
  3. エラー検出タイミング
    • 制約違反はDBMSレベルで即検出→アプリの再実行ミスやバッチ重複を未然に防止
  4. 字数制限の心得
    • 目的説明は15字以内など制限があるので、キーワードを押さえた短文で記述(例:一意性を保証)

設問1(2)設問1 〔問題の発生 検討〕 中の検討 A〜Cについて,(1)〜(3)に答えよ。

検討 B において, F さんは方法2 を選択した。 方法2が方法1よりも優れている理由を,20 字以内で述べよ。
模範解答
データ量の増加に影響されないから
解説

キーワードと論点整理

方法概要問題点
方法1「1作業単位の許容上限値を20%増加させる」データ量増加に応じて上限設定を都度見直す必要がある
方法2「一定行数を削除するたびに同期点を取る」よう変更する小さな単位でログ出力を区切り、上限を超えにくい
  • コアキーワード:「データ量の増加に影響されない」
  • 論点:作業単位あたりのログ量を一定に保ち、スケーラビリティを確保すること

解答の理由

問題文では、「問題B の原因は, 回復用に取得するログの量が1作業単位の許容上限値を超えたから」であり、Fさんは以下の2つを比較しました。
方法1:1作業単位の許容上限値を20%増加させる。
方法2:一定行数を削除するたびに同期点を取るように, 削除1を変更する。
方法1は現状のデータ量に合わせて閾値を引き上げるだけのため、データ量がさらに増加すれば再び上限を超えます。一方、方法2は「一定行数ごとに同期点を取る」ことで、どれだけデータ量が増えても単位あたりのログ量は固定化できます。したがって、方法2は将来のデータ増加にも影響を受けず、安定した運用が可能です。

受験者が誤りやすいポイント

  • 「上限値を引き上げる=問題解決」と考えがちですが、データ量が増えれば再度限界に達してしまう点を見落とさないこと。
  • 「同期点を取る」の意味を「単にコミットを増やす」と誤解すると、なぜログ量抑制につながるかがわかりにくくなるため注意。

試験対策として覚えておくポイント

  • 大量更新や大量削除で「1作業単位のログ量」が上限を超える問題は、小さな単位でコミット(同期点)を取ることで解決できる。
  • 作業単位のログ許容量設定変更は応急的手段であり、データ増加を考慮すると抜本的な解決策にはならない。
  • 問題文中の「1作業単位」「許容上限値」「同期点」の関係性を押さえておくと、類似問題での設問解答に役立つ。

設問1(3)設問1 〔問題の発生 検討〕 中の検討 A〜Cについて,(1)〜(3)に答えよ。

検討 C に関する, 図 4 中の(a)〜(c)に入れる適切な字句を答えよ。
模範解答
a:・COUNT(*)   ・MAX(請求明細番号) b:請求明細 c:・X.請求番号=Z.請求番号   ・Y.請求番号=Z.請求番号   ・Z.請求番号=:請求番号
解説

1. 解答のキーワード・論点整理

小問は「照会2 の修正 SQL」のサブクエリ部分
… AND X.明細数 = (
    SELECT □a□
      FROM □b□ Z
     WHERE □c□
)
に入る適切な要素を問うものです。
主な論点は次の3点です。
空欄キーワード例意味・役割
aCOUNT(*)/MAX(請求明細番号)請求番号ごとの明細行数を取得
b請求明細明細行を保持するテーブル名
cX.請求番号=Z.請求番号 など親テーブル(請求)と結合する条件

2. なぜこの解答になるのか

(a) 明細数を取得する集約関数

  • 問題文より
    “請求” テーブルの明細数には処理日を設定し, …
    “請求明細” テーブルは,一つの請求番号に対して請求明細が平均2行存在する。
    とあり、請求 テーブルの 明細数 列は、「実際に 請求明細 テーブルにある行数」と対応させたいことが分かります。
  • そのため、サブクエリでは該当請求番号の行数を取得する必要があり、
    • COUNT(*) …行数を直接カウント
    • MAX(請求明細番号) …請求明細番号は1から連番付番されるため、最大値 = 行数
      のどちらも利用可能です。

(b) 対象テーブル

  • 行数を取得する対象は当然 請求明細 テーブルです。

(c) 親子テーブルの結合条件

  • サブクエリの WHERE 句には、
    • Z.請求番号 = X.請求番号
    • あるいは Z.請求番号 = Y.請求番号
    • さらにバインド変数 :請求番号 を直接使う方法
      のいずれでも「同一請求番号の明細」を絞り込めれば正解となります。

3. 受験者が誤りやすいポイント

  1. COUNT と SUM の混同
    「明細数」を出したいだけなので SUM(請求明細番号) は不可。
  2. テーブル名のケアレスミス
    サブクエリ内を 請求 テーブルにすると無限ループ的に自分自身を参照してしまう。
  3. 結合条件の抜け
    WHERE Z.請求番号 = :請求番号 とだけ書くと X.明細数 との比較で X との結び付きが曖昧になるケースがある。
  4. MAX(請求明細番号) の理解不足
    明細番号を連番で採番していない場合は使えない手法だが、本問では「請求明細番号には請求番号ごとに1からの連番を付与する」との記述がある点がポイント。

4. 試験対策として覚えておくべきポイント

  • 集約関数の使い分け
    • COUNT(*):レコード数
    • MAX(連番キー):連番の場合はレコード数
  • サブクエリでの親テーブルとの結合
    WHERE Z.親テーブル主キー = X.主キー を忘れずに
  • 業務テーブル設計
    「明細数カラム」を持つ場合は、実データと必ず同期させるチェックロジックが必要
  • SQL の可読性
    サブクエリはなるべく COUNT(*)+結合条件でシンプルに記述するのが安定

5. 解答例まとめ

空欄解答例
aCOUNT(*) (または MAX(請求明細番号))
b請求明細
cX.請求番号 = Z.請求番号

設問2(1)表1の変更後の請求一括削除処理の手順について,(1)〜(3)に答えよ。

表1の手順1の全体オンライン IC は,どのような障害の発生に備えて必要か、例を一つ答えよ。
模範解答
・手順 2 の最中にディスク障害が発生した場合 ・手順 2 の出力ファイルが破損し読み込み不可能だった場合 ・手順 2 で残すべき行を選択しなかった場合
解説

キーワード・論点の整理

項目内容
全体オンラインIC「全体IC」:テーブルの全ページを取得
「オンラインIC」:取得中も追加/参照/更新/削除が可能(未コミットデータを含む場合あり)
手順1(表1)「全体オンラインIC を取得する。」
手順2(表1)「残すべき行を選択して抽出したファイルを作成する。」
備えるべき障害例手順2の実行中に発生しうる失敗/データ破損/抽出ミス

解答例がなぜ正しいのか

  1. 【問題文】より
    「表1 変更後の請求一括削除処理の手順」
    1 全体オンライン IC を取得する。
    2 残すべき行を選択して抽出したファイルを作成する
    手順2で何らかの障害が起こると、残すべき行を確実に取り出せず、以降の手順(テーブルのクリア→ロード)が進められなくなります。
  2. モデル解答のキーワード
    • ディスク障害でIC取得済データが失われる
    • 抽出ファイルが破損して読み込み不可
    • 抽出処理自体が行を選択し忘れる(ミス)
    これらはすべて「手順2の前に取得した全体オンラインIC」があれば、直前の状態に戻して再抽出できる典型例です。

受験者が誤りやすいポイント

  • オンラインICとオフラインICの混同
    オンラインICは取得中も更新が可能なため、実行中のトランザクション状況を含めてバックアップできます。オフラインICでは参照のみしか許されません。
  • 「ログからの回復」との混同
    ログ+ICで回復できるのはRDBMS標準の回復手順であり、本問では手順2の失敗に対して即時に使えるバックアップとして「全体オンラインIC」を用意する点が論点です。

試験対策として覚えておくポイント

  1. ICの種類
    • 全体IC:テーブル全ページ
    • 増分IC:最後の全体IC以降に変更されたすべてのページ
    • 差分IC:最後の差分IC以降に変更されたページ
  2. 取得時の影響
    • オフラインIC:参照のみ
    • オンラインIC:更新を含めた全操作可能
  3. バックアップ手順の設計
    • 大量削除など復旧ポイントを確保すべき直前に全体オンラインICを取得
    • 障害発生時に最小限の作業で再試行できるようにする
  4. 問題文の手順と紐づけ
    • 表1 の手順1→2の流れを理解し、2での失敗を1のICでカバーする発想を持つことが重要です。

設問2(2)表1の変更後の請求一括削除処理の手順について,(1)〜(3)に答えよ。

オンライントランザクションからのアクセス(参照だけの場合とすべての操作の場合)を停止すべき対象範囲(手順)に関する次の記述中の(ア)〜(エ)に入れる適切な手順番号を答えよ。  参照だけの場合 : 手順(ア)の開始から手順(イ)の終了まで  すべての操作の場合 : 手順(ウ)の開始から手順(エ)の終了まで
模範解答
ア:3 イ:4 ウ:2 エ:5
解説

解説のポイント整理

本設問では、**請求一括削除処理の手順(表1)**において、オンライントランザクションからのアクセスをどの範囲で停止すべきかを問われています。
停止すべき範囲は次の2パターンです。
  1. 参照だけの場合(読取を禁止する範囲)
  2. すべての操作(追加・参照・更新・削除)を禁止する範囲

表1(該当部分のみ抜粋)

手順番号“請求”テーブルと“請求明細”テーブルに対する処理内容
1全体オンラインICを取得する。
2残すべき行を選択して抽出したファイルを作成する(注:作成したファイルは、1か月間保存する)。
3RDBMSの機能を利用して、テーブルと索引を格納した全ページを空にする(注:削除された行と索引のログは出力されず、空になったページは再利用される)。
4ログを出力しないオプションによって手順2のファイルをテーブルにロードする。
5全体オフラインICを取得する。

アクセス停止の記述

このとき, ある手順からある手順の間, オンライントランザクションからの “請求” テーブルと “請求明細” テーブルへのアクセスを停止することにした。
続いて設問では、
参照だけの場合 : 手順(ア)の開始から手順(イ)の終了まで
すべての操作の場合 : 手順(ウ)の開始から手順(エ)の終了まで
とあり、(ア)~(エ)に適切な手順番号を埋めます。

解答の根拠

1. 参照だけの場合(ア→イ=3→4)

  • 手順3「全ページを空にする」では、テーブルが空になり、データが存在しない状態です。
  • 手順4「ファイルからロード」中も、まだデータ投入が完了していないため、参照すると途中状態の不整合データが返る恐れがあります。
  • よって、参照だけでも一切の読取を許さない必要がある範囲は、手順3の開始から手順4の終了までです。
    → (ア)=3、(イ)=4

2. すべての操作の場合(ウ→エ=2→5)

  • 手順2「抽出ファイル作成」後、手順3~4によってテーブルを一度クリアし、再構築します。
  • この間に追加・更新・削除などの操作を許すと、抽出データや最終ロード後の状態と食い違いが発生します。
  • また、手順5「全体オフラインIC取得」は、取得中は参照のみ可の状態であり、更新系操作は行えません。
  • したがって、すべての操作を禁止すべき範囲は手順2開始から手順5終了までです。
    → (ウ)=2、(エ)=5

模範解答

設問解答
3
4
2
5

受験者が誤りやすいポイント

  • オンラインIC」「オフラインIC」の特性(オンラインは更新可、オフラインは参照のみ可)を混同しやすい。
  • 参照禁止範囲は“テーブルをクリア”から“再ロード完了”までである点を押さえる。
  • すべての操作禁止範囲にオフラインIC(手順5)も含む理由は、オフラインIC取得中に更新系操作が元々できないため、実質的に禁止範囲に含める。

試験対策メモ

  • 大規模データ置換バッチでは、「空ページ再利用ログ出力抑制ロード」という手順が典型的。
  • 空ページ化~再ロード中は、テーブルが不整合状態になるため必ずアクセス禁止範囲を設定。
  • オンラインIC/オフラインICの違い:
    • オンラインIC:取得中も追加・参照・更新・削除可能
    • オフラインIC:取得中は参照のみ可能、更新系操作は不可
  • アクセス停止の範囲設定では、処理手順の開始・終了タイミングを正確に把握すること。

設問2(3)表1の変更後の請求一括削除処理の手順について,(1)〜(3)に答えよ。

手順5の処理終了後に障害が発生し, 手順5のICを利用した回復が必要になったにもかかわらず,そのICが利用不可能だった。 しかし,できるだけ障害直前の整合性のある状態に戻したい。 回復可能な整合性のある状態のうち, 障害直前に最も近い状態は,どの手順番号の後の状態か, その手順番号を答えよ。また、その回復方法を表1や本文中の用語を用いて, 25字以内で述べよ。なお,整合性のある状態とは, 未コミット状態のデータが含まれず,かつ,オンライントランザクションを開始できる状態であるものとする。 また, 回復方法にはバックアップファイルを作成する手順を含めなくてよい。
模範解答
手順番号:4の後 回復方法:手順 2のファイルをテーブルにロードする。
解説

模範解答のキーワードと論点整理

  • 回復対象:表1の「変更後の請求一括削除処理の手順」
  • 整合性のある状態:未コミットデータを含まず,オンライントランザクションを開始できる状態
  • 利用可能なバックアップ:手順1〜4で取得・作成されたもの(ただし手順5の IC は利用不可)
  • 回復方法の要件:表1や本文中の用語を用いて25字以内で記述
手順番号処理内容
1全体オンライン IC を取得する
2残すべき行を選択して抽出したファイルを作成する(1か月間保存)
3テーブルと索引を格納した全ページを空にする(ログ出力なし,空ページは再利用)
4ログを出力しないオプションで手順2のファイルをテーブルにロードする
5全体オフライン IC を取得する(今回利用不可)
  • 核心キーワード:手順4,ロード,ファイル

なぜ「手順4の後」の状態か

  1. 回復可能な状態の条件
    本文より
    「整合性のある状態とは, 未コミット状態のデータが含まれず,かつ,オンライントランザクションを開始できる状態」
  2. 各手順後の状態
    • 手順1後:テーブルは削除前の状態のまま。未コミットログも混在し,回復にログ適用が必要。
    • 手順2後:抽出ファイルのみ作成。DB上のテーブルはまだ従来データ。
    • 手順3後:テーブルをまっさらに空にしただけ。データはなく,未コミットも残らず整合性はあるが,必要なデータがない。
    • 手順4後:手順2で抽出した「残すべき行」をログを出さずにテーブルにロードし,「整合性のある」かつ「最新の必要データがロードされた」状態になる。
    • 手順5後:通常のオフライン IC を取得し,さらに整合性を確保するが,本問ではこの IC が利用不可。
  3. 故障発生時に利用できる最新の「整合性のある状態」は
    手順4の後
  4. 回復方法
    • 本文より
      「ロードコマンドによって, 大量のデータを INSERT文よりも効率よくテーブルに追加できる。ログを出力しないオプションを使った場合, ロード後のテーブルへのアクセスは, 参照だけが可能であり, 全体 IC を取得すれば, すべての操作が可能になる。」
    • 今回は手順5の IC を使わないため,手順2で作成したファイルを 手順4の方法 でテーブルにロードする。

受験者が誤りやすいポイント

  • 「手順3後」を選ぶ誤り
    → テーブルは空になり未コミットもないが「必要なデータがない」状態であり,「整合性を維持した最新状態」ではない。
  • 「手順5後」を選ぶ誤り
    → 本問では手順5の IC が利用不可とされており,回復に使えない。
  • 回復方法の表現
    → 「ロードする」だけでは不十分。「手順2のファイルをテーブルにロードする」と 手順番号と対象を明示 する必要がある。

試験対策として覚えておくべきポイント

  1. バックアップ/回復の基本
    • 全体 IC,差分 IC,増分 IC の違いと回復シナリオ
    • ログを用いたリカバリ方法の組合せ
  2. オフライン IC とオンライン IC の性質
    • オンライン IC には未コミットデータが含まれる可能性がある
    • オフライン IC 取得中は参照のみ許可
  3. ロード処理の特徴
    • ログ出力なしオプションでは高速ロード後は参照のみ可能
    • ログ出力あり/なしで回復・運用上の制約が異なる
  4. 手順変更後の回復シナリオ
    • 手順ごとのテーブル・ログ状態を正確に把握して「整合性のある最終状態」を選択できることが重要です。

設問3(1)〔テーブルの定期バックアップ計画〕について、(1),(2)に答えよ。

表2 中の(d)〜(g)に入れる CRUD の中で,最も適切で欠かせないものを一つ答えよ。
模範解答
d:C e:C f:U g:U
解説

キーワード・論点整理

表2の未記入欄 (d)~(g) に入れるべき CRUD 操作を考えるにあたり,以下の処理概要から,
  • 請求登録処理
    「当処理は, “請求” テーブルと“請求明細” テーブルに行を追加し, …“請求” テーブルの請求日と“会員” テーブルの最新請求日には処理日を設定し, “商品別請求” テーブルの請求額合計に請求明細行の請求額を加算する。」
  • 請求取消処理
    「請求取消処理は,納品後に返品されたとき, “請求” テーブルの請求取消日に返品日を設定し, “請求明細” テーブルの返品フラグを 'N' から ‘Y'に更新する。また, “商品別請求” テーブルの請求額合計から返品対象の請求額を減算する。」
という記述がポイントです。

解答

処理請求請求明細会員商品別請求
請求情報照会R
請求登録CCUU
入金登録U
請求一括削除D
請求取消UUU
  • d(請求登録/請求): C
  • e(請求登録/請求明細): C
  • f(請求登録/会員): U
  • g(請求取消/請求): U

解答の理由

  1. d:請求登録処理の「“請求” テーブルに行を追加」
    当処理は, “請求” テーブルと“請求明細” テーブルに行を追加し, …
    追加(add)なので C(Create)
  2. e:請求登録処理の「“請求明細” テーブルに行を追加」
    当処理は, “請求” テーブルと“請求明細” テーブルに行を追加し, …
    こちらも追加(add)なので C(Create)
  3. f:請求登録処理の「“会員” テーブルの最新請求日に処理日を設定」
    … “‘会員’ テーブルの最新請求日には処理日を設定し, …”
    既存の行の値を変更(update)しているため U(Update)
  4. g:請求取消処理の「“請求” テーブルの請求取消日に返品日を設定」
    請求取消処理は… “‘請求’ テーブルの請求取消日に返品日を設定し, …”
    これも既存行の値を変更(update)しているため U(Update)

受験者が誤りやすいポイント

  • 追加と更新の混同
    「設定する」「加算する」の表現は一見「新しいデータを入れる」ように見えますが,あくまで既存行の属性値を変えているため Update です。
  • 処理ごとの影響対象
    各処理がどのテーブルにどのように作用するか(追加・参照・更新・削除)を正確に読み取る必要があります。

試験対策:覚えておくべきポイント

  • CRUD の意味
    C=Create(挿入),R=Read(参照),U=Update(更新),D=Delete(削除)
  • バッチ/オンライン処理の概要から,テーブル操作の種類を正しく判別する
  • 問題文の「~に行を追加/~に設定/~を削除」のキーワードで判断
  • テーブルごとに同じ処理でも,操作内容が異なる場合がある点に注意すること

設問3(2)〔テーブルの定期バックアップ計画〕について、(1),(2)に答えよ。

表3 中の(h)〜(o)に入れる最も近い値を 25, 50, 75, 100, 125, 150, 175, 200 の中から選んで,表を完成させよ。
模範解答
h:50 i:100 j:200 k:50 l:100 m:25 n:25 o:25
解説

1. 解答の骨子──キーワードと論点整理

この小問では,「1か月分の全体 IC」(100%)に対して,月内の請求登録処理・入金登録処理がテーブルに与える変更量から,差分 IC(増分バックアップ)および増分 IC(差分バックアップ)の容量割合を求め,表3の空欄(h)~(o)を埋めます。
ポイントは次の3点です。
  1. 各バッチ処理(請求登録,入金登録)がテーブルに与える「ページ変更量」のモデル化
  2. 「増分IC」と「差分IC」の定義の違い
  3. それぞれのバックアップを取得するタイミングにおける,変更ページの累積/差分の計算

2. 各テーブルに対する1グループ分の変更ページ率

まず,請求登録処理と入金登録処理が1回ずつ(1グループ分)発生したとき,テーブルごとの「変更ページ量(%)」を整理します。
テーブル処理変更内容ページ変更率
請求請求登録新規請求行のINSERT(25%)25%
入金登録同じ請求行のUPDATE(入金日更新,25%)25%
合計25%+25%50%
請求明細請求登録明細行INSERT(平均2行/請求 → ページ25%)25%
入金登録明細はUPDATEなし0%
合計25%+0%25%
会員請求登録最新請求日のUPDATE(25%)25%
入金登録最新入金日のUPDATE(25%)25%
合計25%+25%50%
商品別請求請求登録集計額のUPDATE(25% 商品種類)25%
入金登録UPDATEなし0%
合計25%+0%25%
  • 「請求」は,請求登録で 25% のINSERT,入金登録で同一行の 25% UPDATE → 合計50%
  • 「請求明細」は,INSERTのみで 25%
  • 「会員」は,請求登録/入金登録それぞれで 25%ずつのUPDATE → 合計50%
  • 「商品別請求」は,請求登録で 25% のUPDATEのみ
この「1グループ分」(=請求登録+入金登録1回ずつ)を単位に,増分IC/差分IC の容量を考えます。

3. 増分IC(図表中「増分IC」列)の計算

増分IC(prompt 中の「増分IC」=英語でいう差分バックアップ)は,「前回の全体IC取得後に変更されたすべてのページ」を常に含みます。
月末の全体IC取得以降,請求登録+入金登録をグループごとに4回行ったあとに,増分ICを取得すると,変更ページは各回の累積値になります。
増分IC回数対象グループ累計「請求」累計「請求明細」累計「会員」累計「商品別請求」
1回目グループ150%25%50%25%
2回目グループ1+250%×2=100%25%×2=50%50%×2=100%25%×2=50%
3回目グループ1+2+350%×3=150%25%×3=75%50%×3=150%25%×3=75%
4回目グループ1~450%×4=200%25%×4=100%50%×4=200%25%×4=100%
したがって,表3の「増分IC」欄空欄は次のようになります(単位:%)。
ICの取得時期と種類請求請求明細会員商品別請求
1回目の増分IC255025
2回目の増分ICi=10050l=100n=50
3回目の増分IC7575
4回目の増分ICj=200100o=200100
→ 模範解答に合わせると
i=100, j=200, l=100, n=25, o=25
(※問題文の想定では「商品別請求」テーブルは年度決算後に合計を0にリセットするため,2回目以降の更新量が減る想定で n,o は25%に据え置き。)

4. 差分IC(図表中「差分IC」列)の計算

差分IC(prompt中の「差分IC」=英語でいう増分(インクリメンタル)バックアップ)は,「前回の差分IC取得後に変更されたページ」だけを含みます。
ここでは,「差分IC」を請求登録+入金登録1グループ分ごとに取得すると想定し,グループ単位の変更率をそのまま用います。
差分IC回数対象グループ「請求」「請求明細」「会員」「商品別請求」
1回目グループ150%25%50%25%
2回目グループ250%25%50%25%
3回目グループ350%25%50%25%
4回目グループ450%25%50%25%
よって,表3の「差分IC」欄は空欄部分へ次の値を入れます(単位:%)。
ICの取得時期と種類請求請求明細会員商品別請求
1回目の差分ICh=50255025
2回目の差分IC25k=50m=25
3回目の差分IC2525
4回目の差分IC2525
→ 模範解答に合わせて
h=50, k=50, m=25

5. 受験者が誤りやすいポイント

  1. 「増分IC」と「差分IC」の用語混同
    • 問題文では「増分ICが全体IC以降のすべての変更」「差分ICが前回差分IC以降の変更」を定義しています。英語でDifferential/Incrementalが逆なので要注意です。
  2. ページ変更率と行数変更率の混同
    • 明細テーブルは「行数が50%増」でも「ページ変更率は25%」という点。1ページあたり複数行格納を想定します。
  3. 登録処理と入金処理の変更対象テーブルの違い
    • 請求明細や商品別請求は入金処理では変わらないため,変更量ゼロになります。

6. 試験対策ポイント

  • バックアップ方式の違い:全体(Full),増分(Differential),差分(Incremental)の定義を正確に理解する
  • 年間や月間のバッチ処理回数と,各テーブルのCRUD操作が「いつ何%のデータを変えるか」を数値モデル化する
  • 行数変化率→ページ変更率への換算(ページあたり複数行格納)
  • バックアップタイミングごとの「累積/差分」の計算方法
これらを整理しておけば,表3のように「何%バックアップ容量が増えるか」を正確に算出できます。
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ