データベーススペシャリスト試験 2010年 午後1 問03
データベースの保守・運用に関する次の記述を読んで、設問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に示す。
〔請求情報照会処理の概要〕
請求情報照会処理では、図2のSQL 文を使用する。 照会1 と照会2のアクセス経路は主索引(主キーに定義された索引)である。 トランザクションの ISOLATION レベルは REPEATABLE READ であり、排他は行単位に行われる。

〔請求情報更新処理の概要〕
請求情報更新処理は、請求登録処理、入金登録処理、請求一括削除処理及び請求取消処理から構成される。
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の間で同期点を取るものとする。 ページ中の削除された行の領域は、新たな行の追加のときに再利用可能である。


〔問題の発生・検討〕
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のように修正した。


〔請求一括削除処理の内容 ・手順の変更〕
Fさんは、検討Cで述べた対策とは別に、問題Cに対する対策として、請求一括削除処理の手順を表1のように変更した。 このとき、ある手順からある手順の間、オンライントランザクションからの“請求” テーブルと “請求明細” テーブルへのアクセスを停止することにした。 また、手順 5 の終了後、次の請求一括削除処理を行うまで、差分IC又は増分IC を定期的に取得することにした。
〔テーブルの定期バックアップ計画〕
F さんはまず、請求情報処理の各処理とテーブルの CRUD 及び各処理の稼働情報(処理形態、稼働時間帯及び処理頻度)を調査し、表2のように整理した。

次に、月末日の請求一括削除処理の終了後に全体 IC を取得し、請求登録処理と入金登録処理の終了後に、差分 IC 又は増分IC を取得することにした。 バックアップ時間は、その時点のICの容量にほぼ比例することが分かったので、各テーブルの1か月分の全体 IC の容量に対する差分 IC及び増分IC の容量の割合を見積もった。その結果を表3に示す。 ここで、請求取消処理による影響は無視するものとする。

設問1:設問1 〔問題の発生 検討〕 中の検討 A〜Cについて、(1)〜(3)に答えよ。
(1)
検討 A において、“請求” テーブルに追加すべき制約の適切な列名又は列名の組合せを答えよ。 また、その制約の追加目的を,15字以内で述べよ。
模範解答
列名:会員番号、請求日
目的:一意性を保証するため
解説
解答の論理構成
- 事象の確認
- 【問題文】「問題 A … 請求番号を除き、同じ内容の請求データ行が追加された」
- 自動採番の「請求番号」は常に新値なので重複検知に役立たない。
- 重複判定に使う業務項目の抽出
- 請求登録処理は「毎月1回、バッチ処理で行う」
- 同一会員に対して同一請求日で2行以上存在するのは業務上不正。
- よって重複判定列は「会員番号」「請求日」。
- 制約の種類と目的
- 複数列の UNIQUE 制約 を追加し「一意性を保証するため」。
- これにより再実行時は一意性違反エラーでロールバックできる。
誤りやすいポイント
- 「請求番号」は既に主キーなので追加制約対象ではない。
- 「明細数」や「入金日」を含める必要はない。請求発生タイミングの一意性は「会員番号+請求日」で十分。
- NOT NULL など列制約と混同しがちだが、本設問は複合 UNIQUE 制約を問うもの。
FAQ
Q: PRIMARY KEY を「会員番号、請求日」に変更してはいけませんか?
A: 既存の主キー「請求番号」は業務・外部参照で広く使用されているため変更は影響大です。複合 UNIQUE を追加するのが現実的です。
A: 既存の主キー「請求番号」は業務・外部参照で広く使用されているため変更は影響大です。複合 UNIQUE を追加するのが現実的です。
Q: 請求登録を再実行する前にDELETEしては?
A: 処理途中で障害が起きた際に自動復旧を図るには、整合性をデータベース制約で担保する方が安全です。手動DELETEは漏れ・誤削除リスクが残ります。
A: 処理途中で障害が起きた際に自動復旧を図るには、整合性をデータベース制約で担保する方が安全です。手動DELETEは漏れ・誤削除リスクが残ります。
関連キーワード: UNIQUE制約、複合キー、自動採番、再実行制御、データ整合性
設問1:設問1 〔問題の発生 検討〕 中の検討 A〜Cについて、(1)〜(3)に答えよ。
(2)
検討 B において、F さんは方法2 を選択した。 方法2が方法1よりも優れている理由を,20 字以内で述べよ。
模範解答
データ量の増加に影響されないから
解説
解答の論理構成
- 原因の確認
〈問題 B〉で失敗理由は「回復用に取得するログの量が1作業単位の許容上限値を超えた」と明示されています。 - 方法1の特徴
〈検討 B〉「方法1:1作業単位の許容上限値を20%増加させる」。閾値を広げるだけなので、データ量が再度増えれば同じ問題が再発します。 - 方法2の特徴
同じく〈検討 B〉「方法2:一定行数を削除するたびに同期点を取る」。同期点ごとにログ量が確定・クリアされるため、削除対象が増えても“1作業単位”あたりのログ量は固定化されます。 - 比較結果
データ量が将来増加しても方法2なら「許容上限値を超えない」=データ量の増加に影響されないため、Fさんは方法2を選択しました。
誤りやすいポイント
- 「20%増加させる」と聞くと十分だと誤解しやすいが、年率20%以上のデータ増加とピーク1.2倍を考慮すると追いつかない。
- 同期点の目的を「途中経過保存」だけと捉え、ログ量リセット効果を見落としやすい。
- 回復ログとアーカイブログを混同し、容量問題の本質を捉え損なうケース。
FAQ
Q: 同期点を増やすと処理時間が長くなりませんか?
A: 同期点取得にはオーバーヘッドがありますが、障害発生リスク低減と再実行回数削減により総合的な処理時間・運用コストは抑えられます。
A: 同期点取得にはオーバーヘッドがありますが、障害発生リスク低減と再実行回数削減により総合的な処理時間・運用コストは抑えられます。
Q: 許容上限値をもっと大幅に上げれば方法1でも良いのでは?
A: 一時的には解決しますが、データ量の増加が続けば再発します。ストレージ制限やパフォーマンス低下も無視できません。
A: 一時的には解決しますが、データ量の増加が続けば再発します。ストレージ制限やパフォーマンス低下も無視できません。
Q: 同期点は何を基準に入れればよいですか?
A: 一度のDELETEで生成されるログ量を見積もり、上限値の70〜80%を超えない行数を目安に設定するのが一般的です。
A: 一度のDELETEで生成されるログ量を見積もり、上限値の70〜80%を超えない行数を目安に設定するのが一般的です。
関連キーワード: 同期点、回復ログ、DELETE処理、バッチ運用、ボリューム管理
設問1:設問1 〔問題の発生 検討〕 中の検討 A〜Cについて、(1)〜(3)に答えよ。
(3)
検討 C に関する、図 4 中の(a)〜(c)に入れる適切な字句を答えよ。
模範解答
a:・COUNT(*)
・MAX(請求明細番号)
b:請求明細
c:・X.請求番号=Z.請求番号
・Y.請求番号=Z.請求番号
・Z.請求番号=:請求番号
解説
解答の論理構成
- 【問題文】より「請求番号には、一意な連番を付与する」「請求明細番号には、請求番号ごとに1からの連番を付与する」。
- よって同一請求番号内では
(請求明細番号)
の最大値がそのまま明細数と一致する。- 行数を直接数えるなら
COUNT(*)
、連番最大値を利用するならMAX(請求明細番号)
が妥当。
- 行数を直接数えるなら
- サブクエリは “請求明細” だけを対象とし、別名
Z
を付ける指定が (b)。 - 親問い合わせの行とサブクエリの行を関連付ける検索条件 (c) は「請求番号 = 同一値」であることが必須。
- 以上より
AND X.明細数 = ( SELECT COUNT(*) FROM 請求明細 Z WHERE X.請求番号 = Z.請求番号 )
あるいは
COUNT(*)を
MAX(請求明細番号)に置き換えても正しい。
誤りやすいポイント
COUNT(請求明細番号)
とするとNULL
を除外するため、列がNOT NULL
でない場合に誤差が出る。問題文にはNULL
にならない保証がないのでCOUNT(*)
が無難。- サブクエリに親問い合わせのエイリアスを参照し忘れ、全件集計になってしまう。
- 連番仕様を読み落として「MAX(請求明細番号) は行数と一致しない」と誤判断する。
FAQ
Q:
A: 重要です。
COUNT(*)と
COUNT(請求明細番号)の違いは重要ですか?
A: 重要です。
COUNT(*)は行数を正確に返しますが、列単位の
COUNT(列名)は
NULLを除外するため、列に
NULLが混在すると不一致になります。
Q: なぜ
A: 【問題文】の「オンラインICの取得中は…未コミット状態のデータが含まれることがある」ため、削除処理と同時並行するとダーティリードが発生し、照会2 の集計が実際より少なくなる場合があります。
READ UNCOMMITTEDで不整合が出るのですか?
A: 【問題文】の「オンラインICの取得中は…未コミット状態のデータが含まれることがある」ため、削除処理と同時並行するとダーティリードが発生し、照会2 の集計が実際より少なくなる場合があります。
Q:
A: インデックスが
MAX(請求明細番号)を使うメリットは?
A: インデックスが
(請求番号、請求明細番号)に張られていれば、
MAXを取る方が行数を数えるより高速になる場合があります。連番仕様ゆえに行数と同値になるため代替案として認められています。
関連キーワード: 集計サブクエリ、ダーティリード、相関サブクエリ、一意連番、行ロック
設問2:表1の変更後の請求一括削除処理の手順について、(1)〜(3)に答えよ。
(1)
表1の手順1の全体オンライン IC は、どのような障害の発生に備えて必要か、例を一つ答えよ。
模範解答
・手順 2 の最中にディスク障害が発生した場合
・手順 2 の出力ファイルが破損し読み込み不可能だった場合
・手順 2 で残すべき行を選択しなかった場合
解説
解答の論理構成
- 【問題文】で、手順1は「全体オンライン IC を取得する。」と明示。
- 手順2〜手順4では
- 「残すべき行を選択して抽出したファイルを作成」
- 「テーブルと索引を格納した全ページを空にする」
- 「ログを出力しないオプションによってロード」
と、既存ページの物理削除とノーログロードを実施。
- これらの最中に
- 「ディスク障害」が発生
- 抽出「ファイルが破損」
- 抽出条件ミスで「残すべき行を選択しなかった」
などが起きると、テーブルを正常状態へ戻す術がなくなる。
- そこで処理着手前に「全体 IC」を取得し、障害時は
- 「全体IC と全体IC 取得後のすべてのログ」を使い
- 【問題文】2.テーブルの回復 に従ってリカバリ可能。
- 以上より、手順1の全体オンライン IC は「手順 2 の最中にディスク障害が発生した場合」などの障害に備えるために必要であると結論付く。
誤りやすいポイント
- 手順5の「全体オフライン IC」があるから十分と考え、手順1を軽視する。→手順5は処理完了後のバックアップであり進行中障害には使えない。
- 「ログを出力しないロードでもログが回復に使える」と誤解。→ノーログオプション使用時はロード自体のログが残らないため、直前ICが不可欠。
- オンラインICには「未コミットデータが含まれることがある」点を忘れて、ロールフォワードの必要性を見落とす。
FAQ
Q: オンラインICとオフラインIC、障害復旧能力に差はありますか?
A: IC単体の格納内容は同じですが、オンラインICには【問題文】「未コミット状態のデータが含まれることがある」ため、必ず取得後のログと組み合わせてロールフォワードしてから利用します。
A: IC単体の格納内容は同じですが、オンラインICには【問題文】「未コミット状態のデータが含まれることがある」ため、必ず取得後のログと組み合わせてロールフォワードしてから利用します。
Q: 手順2で抽出したファイルが壊れた場合はロードし直すだけでは?
A: 手順3で既にテーブルページを空にしてしまうため、抽出ファイルが不良だと投入元データが失われます。手順1の全体ICがないと原状態へ戻せません。
A: 手順3で既にテーブルページを空にしてしまうため、抽出ファイルが不良だと投入元データが失われます。手順1の全体ICがないと原状態へ戻せません。
Q: 手順5のオフラインICだけ取得しておけば十分では?
A: 手順5は「空にする」「ロードする」が正常終了した後のバックアップです。途中で障害が起きた場合には到達できないため、手順1が必須です。
A: 手順5は「空にする」「ロードする」が正常終了した後のバックアップです。途中で障害が起きた場合には到達できないため、手順1が必須です。
関連キーワード: イメージコピー、オンラインバックアップ、ディスク障害、論理障害、ロールフォワード
設問2:表1の変更後の請求一括削除処理の手順について、(1)〜(3)に答えよ。
(2)
オンライントランザクションからのアクセス(参照だけの場合とすべての操作の場合)を停止すべき対象範囲(手順)に関する次の記述中の(ア)〜(エ)に入れる適切な手順番号を答えよ。
参照だけの場合 : 手順(ア)の開始から手順(イ)の終了まで
すべての操作の場合 : 手順(ウ)の開始から手順(エ)の終了まで
模範解答
ア:3
イ:4
ウ:2
エ:5
解説
解答の論理構成
- 手順ごとの性質を整理
- 手順「2」:残す行を抽出するため整合性が必須。途中で更新が走ると抽出結果と実データが食い違う。
- 手順「3」:ページを空にし「削除された行と索引のログは出力されず、空になったページは再利用される」。ここでデータは一時的に消える。
- 手順「4」:ログを出力しないロードを行い、「ロード後のテーブルへのアクセスは、参照だけが可能であり、全体 IC を取得すれば、すべての操作が可能になる」。
- 手順「5」:全体オフライン IC を取得し終えると更新系も許可できる。
- 更新禁止(=すべての操作禁止)の範囲決定
抽出結果と実データの乖離を防ぐため、更新は手順「2」の開始から手順「5」の終了まで止める。 - 参照も禁止する範囲決定
ページが空になるタイミング以降はSELECT でもエラーになるため、参照停止は手順「3」開始から手順「4」終了までとする。 - 以上より
- (ア)=3, (イ)=4
- (ウ)=2, (エ)=5
誤りやすいポイント
- ロード直後に「参照だけ」は許可される点を見落とし、参照停止範囲を手順「5」まで延ばしてしまう。
- 手順「2」はSELECT だけだから更新許可と早合点し、更新停止範囲を手順「3」からにしてしまう。
- オンライン/オフライン IC の違いを取り違え、手順「1」のオンライン IC 中も更新禁止と誤解する。
FAQ
Q: 手順「1」のオンライン IC 取得中はアクセスを止めなくてよいのですか?
A: 【問題文】で「オンライン IC の取得中は、…すべての操作 (追加、参照、更新、削除)が可能」と示されているため停止不要です。
A: 【問題文】で「オンライン IC の取得中は、…すべての操作 (追加、参照、更新、削除)が可能」と示されているため停止不要です。
Q: ロードをログなしで行うメリットは何でしょうか?
A: INSERT 文より高速に大量データを取り込めるうえ、ログ出力量が抑えられます。ただしロード後は全体 IC を取得するまで更新できないという制約が生じます。
A: INSERT 文より高速に大量データを取り込めるうえ、ログ出力量が抑えられます。ただしロード後は全体 IC を取得するまで更新できないという制約が生じます。
Q: 差分 IC と増分 IC を定期的に取得する理由は?
A: 手順「5」後から次回月末までの更新を回復できるようにするためです。全体 IC に加えて差分または増分 IC とログを組み合わせれば、障害時に最新状態へ戻せます。
A: 手順「5」後から次回月末までの更新を回復できるようにするためです。全体 IC に加えて差分または増分 IC とログを組み合わせれば、障害時に最新状態へ戻せます。
関連キーワード: オンラインバックアップ、差分イメージコピー、ログなしロード、トランザクション分離、整合性維持
設問2:表1の変更後の請求一括削除処理の手順について、(1)〜(3)に答えよ。
(3)
手順5の処理終了後に障害が発生し、手順5のICを利用した回復が必要になったにもかかわらず、そのICが利用不可能だった。 しかし、できるだけ障害直前の整合性のある状態に戻したい。 回復可能な整合性のある状態のうち、障害直前に最も近い状態は、どの手順番号の後の状態か、その手順番号を答えよ。また、その回復方法を表1や本文中の用語を用いて、25字以内で述べよ。なお、整合性のある状態とは、未コミット状態のデータが含まれず、かつ、オンライントランザクションを開始できる状態であるものとする。 また、回復方法にはバックアップファイルを作成する手順を含めなくてよい。
模範解答
手順番号:4の後
回復方法:手順 2のファイルをテーブルにロードする。
解説
解答の論理構成
- 手順 5 の IC が失われた前提
「全体オフライン IC を取得する。」(手順 5)が利用不能。 - 直前状態の候補を整理
• 手順 3:テーブル&索引が空。ビジネスデータを含まないので不適。
• 手順 4:手順 2 の抽出ファイルをロード済。
• 手順 5 以降:存在しない。 - 手順 4 が整合性を満たす理由
• データは「残すべき行を選択して抽出したファイル」(手順 2)由来で未コミットを含まない。
• 「ロードコマンド…ログを出力しないオプションを使った場合、ロード後のテーブルへのアクセスは、参照だけが可能」であり、読み取り系オンライントランザクションは開始できる。
• 回復方法としては再度「手順 2 のファイルをテーブルにロードする。」だけで手順 4 の状態を再現できる。 - 以上から回復対象は「手順番号 4 の後」、方法は「手順 2 のファイルをテーブルにロードする。」となる。
誤りやすいポイント
- 手順 5 の IC がないのにロールフォワードを試みてしまう。
- 「参照だけが可能」を整合性要件外と誤解し、手順 4 の後を排除する。
- 抽出ファイルは「1か月間保存する」と明記されている点を見落とし、利用可能なバックアップと気付かない。
FAQ
Q: ログなしロード後は更新系トランザクションも必要なはずでは?
A: 問題で求めるのは「オンライントランザクションを開始できる」状態であり、参照系であれば開始可能と明示されています。
A: 問題で求めるのは「オンライントランザクションを開始できる」状態であり、参照系であれば開始可能と明示されています。
Q: 手順 3 の後に抽出ファイルをロードせず空のまま利用する案は?
A: 手順 3 の後では業務データが消失しており「障害直前に最も近い状態」とは言えません。
A: 手順 3 の後では業務データが消失しており「障害直前に最も近い状態」とは言えません。
Q: 抽出ファイル自体に未コミットデータが混入する心配は?
A: ファイルは SELECT で抽出しており、手順 1 の「全体オンライン IC」を取得後に行うため、ロード対象はコミット済みデータのみです。
A: ファイルは SELECT で抽出しており、手順 1 の「全体オンライン IC」を取得後に行うため、ロード対象はコミット済みデータのみです。
関連キーワード: イメージコピー、ロードコマンド、オンラインバックアップ、ロギング、参照一貫性
設問3:〔テーブルの定期バックアップ計画〕について、(1)、(2)に答えよ。
(1)
表2 中の(d)〜(g)に入れる CRUD の中で、最も適切で欠かせないものを一つ答えよ。
模範解答
d:C
e:C
f:U
g:U
解説
解答の論理構成
-
“請求登録処理” の処理内容を確認
- 【問題文】
“当処理は、“請求” テーブルと“請求明細” テーブルに行を追加し … “請求” テーブルの請求日と“会員” テーブルの最新請求日には処理日を設定” - 追加=C、列値の書き換え=U と判断
• “請求” テーブル:行追加 → C ⇒ (d)
• “請求明細” テーブル:行追加 → C ⇒ (e)
• “会員” テーブル:列の更新 → U ⇒ (f)
- 【問題文】
-
“請求取消処理” の処理内容を確認
- 【問題文】
““請求” テーブルの請求取消日に返品日を設定し … “請求明細” テーブルの返品フラグを 'N' から ‘Y'に更新” - 既存行の列更新のみなので U
• “請求” テーブル:列更新 → U ⇒ (g)
- 【問題文】
-
削除や読取の有無を再確認
- “請求登録処理” で削除は行われておらず Read の必須操作も記載なし
- “請求取消処理” でも削除・追加は発生しない
- よって CRUD のうち必要不可欠なのは上記 C/U のみ
誤りやすいポイント
- “請求” テーブルは登録処理で列を設定するので U と誤認しやすい
→ 行自体は新規追加なので C が優先 - “請求取消処理” を D(Delete)と勘違い
→ 実際は列の書き換えのみで行は残る - CRUD を複数回答と考えてしまう
→ 表の指示は “最も適切で欠かせないものを一つ”
FAQ
Q: “請求登録処理” で “請求” テーブルの列値を設定するのに C だけで良いのですか?
A: 行を追加するときの列値入力は INSERT 文に含まれるため、追加を示す C が最重要です。追加後に即座に UPDATE が発生するわけではありません。
A: 行を追加するときの列値入力は INSERT 文に含まれるため、追加を示す C が最重要です。追加後に即座に UPDATE が発生するわけではありません。
Q: “請求取消処理” で “請求明細” を更新しているのに CRUD 記入は不要?
A: 表2の空欄は “請求” テーブルのみが対象です(列 g)。“請求明細” は列が存在しないため記入不要です。
A: 表2の空欄は “請求” テーブルのみが対象です(列 g)。“請求明細” は列が存在しないため記入不要です。
Q: CRUD は複数書けないの?
A: 指示が “一つ答えよ” なので、その処理で欠かせない最重要操作を一つだけ記入します。
A: 指示が “一つ答えよ” なので、その処理で欠かせない最重要操作を一つだけ記入します。
関連キーワード: CRUD, トランザクション、INSERT, UPDATE, データ整合性
設問3:〔テーブルの定期バックアップ計画〕について、(1)、(2)に答えよ。
(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回当たりの変更率
- “請求明細”
「請求登録処理…行を追加」だけで更新や削除はなし。25%×1=25%。 - “請求”
「行を追加」25% と「入金登録処理…入金日を設定」25% が同日に発生し最大50%。 - “会員”
最新請求日と最新入金日を更新するだけ。1回当たり 25%+25%=50%。 - “商品別請求”
売れる商品は月平均 25% ⇒ 更新対象 25%。
- “請求明細”
-
差分 IC(前回差分以降の変更ページ)
各回とも上記の変更率がそのまま容量比になる。- 1回目:請求 50 → h=50
- 2回目:会員 50 → k=50,商品別請求 25 → m=25
(“請求”と“請求明細”は既に値が与えられているため空欄) - 3・4回目も同様の比率なので設問対象外。
-
増分 IC(全体 IC 以降の累積変更ページ)
変更率を回数分累積し、選択肢に合わせて四捨五入する。- “請求”
1回目 50%、2回目 100% → i=100,4回目 200% → j=200 - “会員”
1回目 50%、2回目以降は同一行の再更新で累積が伸びず 100% → l=100 - “商品別請求”
毎回同じ 25% の商品コードが更新される想定なので累積は 25% のまま → n=25,o=25
- “請求”
-
選択肢との照合
求めた各値はいずれも 25 の倍数で、提示された8つの選択肢の中に唯一一致する。
誤りやすいポイント
- 増分 IC と差分 IC の定義を逆に覚えてしまい、累積/非累積を取り違える。
- “請求”テーブルの 50% を「25% だけ」と数え,INSERT と UPDATE を合算し忘れる。
- “会員”テーブルの累積率を 4 回で 200% と誤算し、行の再更新による重複を考慮しない。
- “商品別請求”は毎回同じ商品を更新する可能性が高い点を見落とし、累積が増えると誤判断する。
FAQ
Q: 差分 IC が毎回ほぼ同じ容量になるのはなぜですか?
A: 差分 IC は「前回の差分 IC 取得後に変更されたページだけ」を収めるため、各バッチで変更範囲が一定なら容量もほぼ一定になります。
A: 差分 IC は「前回の差分 IC 取得後に変更されたページだけ」を収めるため、各バッチで変更範囲が一定なら容量もほぼ一定になります。
Q: “会員”テーブルの増分 IC が 100% で頭打ちになる理由は?
A: 各会員行は月内で最大2回(請求日と入金日)しか更新されません。2回目以降の UPDATE は既に変更済みのページを書き換えるだけなので、累積率は 100% を超えません。
A: 各会員行は月内で最大2回(請求日と入金日)しか更新されません。2回目以降の UPDATE は既に変更済みのページを書き換えるだけなので、累積率は 100% を超えません。
Q: “請求明細”テーブルの増分 IC が 25 → 50 → 75 → 100 と増えるのは?
A: INSERT のみで行が増えるため、同じページが再利用されず毎回新規ページが増え、累積変更ページが単純に加算されるからです。
A: INSERT のみで行が増えるため、同じページが再利用されず毎回新規ページが増え、累積変更ページが単純に加算されるからです。
関連キーワード: 差分バックアップ、増分バックアップ、更新割合、トランザクション更新、ページ単位容量
