令和6年度 秋期 データベーススペシャリスト試験 午後II 問題 問1 車両保守システムの実装・運用設計

テクノロジデータベース

この問題は2024(R6)秋 データベーススペシャリスト 午後IIに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

学習ガイド

オートリース会社の車両保守業務を題材にした午後Ⅱの大型問題で、バックアップ・リカバリ、バッチ処理のオンライン移行、運用時の性能見積りまでデータベース実装・運用の論点を幅広く扱います。設問数が多く2時間で解き切る時間配分も課題になるため、この記事では設問群を3つのテーマに整理し、それぞれがどの表・図を根拠にしているかを対応付けてから、数値計算の過程を一つずつ確認します。

この記事で押さえる論点

  • バックアップ・リカバリ方式とRDBMS再開始の動きを説明できる
  • バッチ処理のオンライン時間帯移行に伴う更新競合・再処理の問題を分析する
  • アクセス行数からバッファヒット率を考慮した性能見積りを行う

問題本文

問1 オートリース会社の車両保守業務におけるデータベースの実装・運用に関する次の記述を読んで,設問に答えよ。

A社は,法人向けに車両のリース及び保守業務を行っており,業務に車両保守システムを使用している。A社では,夜間に実施しているバッチ処理の昼間帯への移行を検討している。

〔車両保守システムの概要〕

  1. 業務の概要
    (1) 車両のリース提供先の法人を顧客という。顧客との間でリース契約を結び,契約に基づいて車両を定額制で貸し出す。
    (2) リース契約に基づいて新しい車両を購入することもあれば,リース契約終了後の車両を再リースすることもある。
    (3) 契約のオプションとして車両保守を受託する。車両保守には,車検,法定点検(以下,点検という),整備などの保守区分がある。複数の保守区分を受託することもある。
    (4) 外部の自動車整備工場などの委託先に保守区分の実施を依頼する。
    (5) 受託ごとに一定期間内の保守区分を洗い出し,保守区分ごとに着手予定日を決めて予定表を作成する。予定表に従って手配を開始し,進捗を確認する。手配は,顧客への事前案内,入庫日の調整,委託先への実施依頼などから成る。手配は,定められた順に実施し,各手配の完了時に進捗を記録する。車検と整備を同時期に実施するなど,同じ車両の異なる保守区分を同時に実施することもある。この場合,保守区分ごとに同じ予定を立てる。
    (6) 各車両の一つの保守区分は一つの委託先で実施する。委託先に複数の保守区分の実施を同時に依頼することもある。委託先から保守区分の実施結果を受け取り,進捗を記録する。実施完了の報告を受けると車両の出庫手続に移る。
    (7) 車両ごとに,全ての車検,点検,整備の結果及び内容を記録簿に記録する。

  2. テーブル構造
    車両保守システムのテーブル構造を図1に,主な列の意味・制約を表1に示す。

図1 車両保守システムのテーブル構造(一部省略)
図の説明テキスト

顧客 (顧客 C, 顧客名, …)
委託先 (委託先 C, 委託先名, 所在地, …)
契約 (契約#, 顧客 C, 契約種別, 車両#, 開始 YMD, 終了 YMD, …)
受託 (契約#, 受託#, 保守区分, 受託開始 YMD, 受託終了 YMD, 報告間隔, 次回報告 YMD, …)
車両 (車両#, メーカー名, 車名, グレード名, メーカー型式, 保守状態, 車台番号, 用途, 定員, 最大積載量, 次回点検期限 YMD, 車検満了 YMD, …)
予定表 (契約#, 受託#, 着手予定 YMD, 状態, 現手配#, 委託先 C, 開始 YMD, 完了 YMD, …)
進捗 (契約#, 受託#, 着手予定 YMD, 手配#, 入庫予定 YMD, 出庫予定 YMD, …)
実施結果 (報告 YMD, ソート連番, 委託先 C, 契約#, 受託#, 着手予定 YMD, 受信 TS, 実施項目#, 点数, 結果, 作業内容, 数量, 単価, 金額, …)
点検率 (契約#, 予定点数, 実績点数)
報告 (顧客 C, 報告明細#, 保守区分, 保守開始 YMD, 保守終了 YMD, 保守内容, …)
記録簿 (車両#, 記録#, 記録 TS, 記録 YMD, 結果, 内容, …)
注記 属性名の "#" は番号, "C" はコード, "YMD" は年月日, "TS" はタイムスタンプを略した記号である。

表1 主な列の意味・制約
図の説明テキスト
列名 意味・制約
契約#, 受託#, 保守区分 リース車両ごとにリース契約を結び, 契約#で識別する。車検, 点検, 整備などの保守区分ごとに車両保守を受託し, 受託#で識別する。
手配#, 現手配# 手配#は, 1:事前案内, 2:入庫予約受付, 3:委託先手配, 4:入庫, 5:実施完了予定確認, 6:出庫予約受付, 7:完了確認, 8:出庫のいずれかである。現手配#には, 予定表の手配が現在どれであるかを記録する。
ソート連番, 実施項目# “実施結果”テーブルのソート連番は, 報告 YMD ごとに, 委託先からの複数の報告を識別する番号である。実施項目#は, 点検・検査の項目, 部品交換などの作業内容を識別する番号である。
記録# 車両ごとに, 車両の登録, 名義変更, 車検, 点検, 整備などの内容を発生の順に記録#を付与して記録する。
  1. 主な処理

オンライン時間帯は平日の9:00〜19:00で,オンライン時間帯終了後の夜間にバッチ処理を行っている。オンライン処理及びバッチ処理は,それぞれ複数のアプリケーションプログラム(以下,APという)から成る。オンライン処理,バッチ処理の概要及び1日の処理行数を表2,3に,バッチ処理の実行スケジュールを図2に示す。表2,3中の二重引用符で囲んだ名前は図1中のテーブル名である。

表2 オンライン処理の概要及び1日の処理行数
図の説明テキスト
AP名 処理内容 1日の処理行数 追加 1日の処理行数 更新
契約登録 契約#ごとに“契約”及び付随する“受託”, “点検率”に行を追加,更新する。 10,000 10,000
車両登録 車両#ごとに“車両”に行を追加,更新する。追加時には,基となる“契約”の車両#を更新し,“記録簿”に行を追加する。 10,000 6,000
車両照会 指定された車両#について,“車両”,“契約”, “受託”, “記録簿”などの車両に関わる全記録を表示する。 0 0
書類発行 “予定表”に従って顧客に送付する登録書類を作成し,“進捗”に行を追加する。 10,000 0
予約登録 顧客からの電話又は電子メールで受け付けた車両保守のための入庫又は出庫に対応して,“予定表”の現手配#を更新し,“進捗”に行を追加する。 10,000 4,000
表3 バッチ処理の概要及び1日の処理行数
図の説明テキスト
AP名 処理内容 1日の処理行数 追加 1日の処理行数 更新
実施登録 委託先から受信した保守区分の実施記録ファイルのデータについて“実施結果”に行を追加する。同時に実施項目#ごとに“記録簿”に行を追加する。各委託先から1日に複数回受信するファイルを一つにまとめたデータを,報告YMD,受信TS順にソートし,報告YMDごとにソート連番を設定する。 20,000 0
報告作成 次回報告YMDの近い受託を対象に,一定期間の保守区分の一覧及び明細に基づく報告について顧客別に“報告”に行を追加し,追加ごとに“受託”の次回報告YMDを更新する。 20,000 20,000
点検抽出 “車両”を参照し,一定期間内に点検期限を迎える車両を抽出して,ワークテーブル(WK1)に行を追加する。 30,000 0
車検抽出1 一定期間内に車検の期限を迎える車両を抽出してワークテーブル(WK2)に行を追加する。 30,000 0
車検抽出2 車検抽出1の結果,“車両”,“予定表”を参照して,事故による修理中など,一定の条件で車検不要なものを除外した上で車検が必要な車両の行をワークテーブル(WK1)に追加する。 20,000 0
予定表作成 抽出した車両について,保守区分の委託先,開始YMDなどを決めて,“予定表”に行を追加する。 20,000 0
進捗更新 当日分の“実施結果”の行を基に“進捗”に行を追加,“車両”,“予定表”を更新,“記録簿”に行を追加する。 10,000 40,000
依頼作成 “予定表”を基に,委託先に車両ごとの保守区分の実施を依頼するための依頼データファイルを作成する。 0 0
点検率更新 “実施結果”を報告YMD,ソート連番の順に読み込み,契約#が一致する“点検率”の実績点数に“実施結果”の点数を加算して更新する。 0 20,000
注記 各 AP は,特に断りのない限り,処理の最後に一度だけコミットを発行するものとする。
図2 バッチ処理の実行スケジュール
図の説明テキスト

当日のオンライン時間帯と翌日のオンライン時間帯の間にバッチ処理が実行される。T1〜T6は各契機を表し、矢印は処理実行の前後関係を表す。T1から「点検抽出」と「車検抽出1」が開始される。T2から「実施登録」が開始される。また、「車検抽出1」から「車検抽出2」へ処理が続く。「点検抽出」と「車検抽出2」が終わった後、T3から「予定表作成」が開始される。「予定表作成」が終わった後、T4から「進捗更新」と「依頼作成」が開始される。「実施登録」がT5の前に終わり、そこから矢印が「報告作成」へ向かう。T5から「報告作成」が開始される。「進捗更新」が終わった後、そこから矢印が「点検率更新」へ向かう。T5から「点検率更新」が開始される。T6までに「報告作成」、「点検率更新」、「依頼作成」が終了し、翌日のオンライン時間帯となる。

  1. 主なAPとテーブルの関係

車両保守システムの主なAPのCRUDを表4に示す。

表4 主な AP の CRUD
図の説明テキスト
AP名 顧客 委託先 契約 受託 車両 予定表 進捗 実施結果 点検率 報告 記録簿 WK1 WK2
オンライン処理: 契約登録 R CRU CRU C
オンライン処理: 車両登録 U CU C
オンライン処理: 車両照会 R R R R R R R R
オンライン処理: 書類発行 R R R R C R
オンライン処理: 予約登録 R RU C
バッチ処理: 実施登録 R R R C C
バッチ処理: 報告作成 R RU C
バッチ処理: 点検抽出 R R R C
バッチ処理: 車検抽出1 R R C
バッチ処理: 車検抽出2 R R C R
バッチ処理: 予定表作成 R R R C R
バッチ処理: 進捗更新 U RU C R C
バッチ処理: 依頼作成 R R R R R
バッチ処理: 点検率更新 R RU
注記 C:追加,R:参照,U:更新

5. 障害の考え方

車両保守システムでは,障害を,AP障害,サーバ障害,メディア障害の3種類に分けて,それぞれの対策を立てている。

(1) AP障害は,APのバグ,メモリリークなどによってトランザクションの途中でAPが異常終了する障害である。
(2) サーバ障害は,RDBMSが稼働するサーバが,ハードウェア異常,電源遮断などによって機能停止する障害である。
(3) メディア障害は,RDBMSが使用する制御ファイル,表領域を物理的に格納するストレージの故障,破損によって入出力ができなくなる障害である。

〔RDBMSの主な仕様〕

1. 表領域

(1) テーブル及び索引のストレージ上の物理的な格納場所を表領域という。
(2) RDBMSとストレージとの間の入出力単位をページという。同じページに異なるテーブルの行が格納されることはない。

2. 参照時の専有ロック

データ参照時に FOR UPDATE 句を指定すると,ISOLATIONレベルにかかわらず,対象行に専有ロックを掛け,トランザクション終了時に解放する。

3. ログ

ログは,データより先にログバッファからストレージに出力される。これをログ出力処理と呼ぶ。このとき,トランザクションのコミットはログ出力処理の完了まで待たされる。ログ出力処理は,次のいずれかの事象を契機に行われる。
(1) ログバッファがいっぱいになった。
(2) トランザクションがコミット又はロールバックされた。
(3) あるテーブルのデータバッファが変更ページによって一杯になった。

4. チェックポイント

(1) チェックポイントは,指定されたログの出力量になった時点,又は指定された経過時間に従って RDBMS が自動で取得する。
(2) チェックポイントは,コマンドを使用して任意に手動で取得することもできる。

  1. 異常終了後のRDBMS再開始

RDBMSがサーバ障害によって異常終了した後のRDBMS再開始において,RDBMSは直前のチェックポイントから異常終了時までに完了していたトランザクションの更新データ及び異常終了時に未完了のトランザクションの更新データを自動で回復する。
具体的には,RDBMSはログを用いて,直前のチェックポイントから異常終了時までロールフォワードを行い,異常終了時点と同じデータベースの状態に回復する。その後,異常終了時に未完了だったトランザクションをロールバックする。その際,同じ行の更新順序を担保するために,ロールフォワードは,全てのトランザクションのログに対して,ログが出力されている順に逐次に実行される。トランザクション間の排他制御によって同じ行の同時更新がないことは担保されているので,ロールバックはトランザクションごとに並行して実行される。

  1. ログなしモード

ログなしモードとは,ログなしモードを指定されたテーブルの更新に対してログを出力しないモードである。テーブルごとにログなしモードを指定することができる。ログなしモードのテーブルを更新する APで実行されるトランザクションは,ログを取得しないので,その分だけトランザクションの実行時間を短縮できる。ログなしモードのテーブルを更新するトランザクションには次の制約がある。
(1) ログなしモードのテーブルについて,トランザクション内で最初の更新時にテーブル全体に専有ロックを掛け,トランザクションがコミットされたときに専有ロックを解放する。
(2) ログなしモードのテーブルに専有ロックが掛けられている間は,チェックポイントを取得しない。手動でも取得できない。
(3) トランザクションがロールバックされたとき,ログなしモードのテーブルは使用不可になる。使用不可になったテーブルは,バックアップから復元するか,テーブルを削除して再度定義(以下,再定義という)する必要がある。

  1. オンラインバックアップ・回復

データベースの稼働中に更新中のデータを含めて全表領域,全ログを RDBMSの稼働環境とは異なるストレージに複写してバックアップを取得する機能を備えている。
(1) 専用のコマンドを実行して,全表領域,全ログのバックアップを一定の多重度で別系のストレージに格納する。
(2) オンラインバックアップ取得開始後に発生したログは,ストレージに書き込まれると同時にそのログのバックアップが別系のストレージに格納される。
(3) メディア障害発生時には,ストレージ交換後,全表領域,全ログ,オンラインバックアップ取得後に発生したログのバックアップをストレージに復元し,異常終了後のRDBMS再開始と同様にロールフォワード及びロールバックによってデータを回復する。

  1. ロックメモリ

RDBMSがロックを掛けるときに排他制御のために使用するメモリ領域をロックメモリという。1行又は1テーブルにロックを掛けるごとにロックメモリにロック情報を登録し,そのロックを解放したらロック情報を削除する。ロックメモリは,同時にロックを掛ける行数,テーブル数から見積もって指定されたサイズで確保する。必要以上に大きなサイズで確保しようとするとメモリ領域が不足してRDBMSを開始できない。逆に,必要なサイズを確保していなければ,SQLの実行時にロックメモリの未使用領域がなくなり,ロックを掛けることができずにSQLがエラーとなる。

〔現行バッチ処理のバックアップ・リカバリ〕

  1. バッチ処理のバックアップの取得スケジュール

車両保守システムでは,オンライン時間帯の終了後に次の要件でバックアップを取得している。バックアップの取得スケジュールを表5にまとめた。表5では,図2中の各契機でテーブル単位のバックアップを取得するテーブルに“〇”印をつけている。
(1) 当日のオンライン処理のAPの実行結果を全て反映した状態に回復できること
(2) 全てのバッチ処理のAP(以下,バッチAPという)の実行結果を反映した状態に回復できること
(3) それぞれのバッチAPの実行中にメディア障害が発生した場合,速やかに対象テーブルを回復した後,バッチAPを再実行できること
(4) 必要最小限のバックアップを取得すること
(5) “点検抽出”, “車検抽出1”, “車検抽出2”の各APで更新する, “WK1”, “WK2”の各テーブルには, ログなしモードを指定すること
(6) “WK1”, “WK2”の各テーブルは, ワークテーブルであり, バックアップの対象外とすること。これらのワークテーブルは, オンライン時間帯の終了後, バッチ処理を開始する前に再定義して使用する。

表5 バックアップの取得スケジュール(未完成)
図の説明テキスト
契機 \ テーブル名 顧客 委託先 契約 受託 車両 予定表 進捗 実施結果 点検率 報告 記録簿
T1
T2
T3
T4
T5
T6
※ T1とT6の行は太枠で囲まれている。
注記 T1~T6 は,図 2 中の各契機を示す。
  1. サーバ障害時のRDBMS再開始

RDBMS再開始に備えて, バッチ処理中のチェックポイントに関する検証を行った。
なお, T1~T6は図2中の各契機を示す。

(1) RDBMS再開始後の運用

“実施登録” APと “車検抽出2” APの実行中に, サーバ障害が発生した場合に, RDBMS再開始後にどのような対処が必要になるか, チェックポイントの取得状況に応じた対処を整理した。

契機T2でチェックポイントを取得している場合, “a” テーブルを b した後, “c” AP, “d” APを再実行する。また, “e” APも再実行する。その後, 契機T3以降のバッチ処理を継続する。

契機T2でチェックポイントを取得していない場合, チェックポイントを取得している場合の対処を行う前に, “f” テーブルを b した後, “g” APを再実行しておく必要がある。

(2) RDBMS再開始に要する時間

契機T3でチェックポイントを取得後,契機T5からT6の間でサーバ障害が発生して再開始する状況を想定する。契機T3の後,サーバ障害が発生するまでの間にチェックポイントは取得していないものとする。追加・更新 1行当たりロールフォワードに 2 ミリ秒,ロールバックに 1 ミリ秒を要するものと仮定して,RDBMS再開始のときにデータベースの回復に要する時間を見積もった。

最も時間が掛からないケースは,バッチAPでの更新が発生する直前にサーバ障害が発生した場合で,トランザクションのロールフォワードが必要な AP は h,ロールバックが必要な AP は i,回復に要する時間は j 秒となる。最も時間が掛かる,理論上の最悪のケースは,更新処理のある全てのバッチ AP がコミットする直前にサーバ障害が発生した場合で,トランザクションのロールフォワードが必要な AP は k,ロールバックが必要な AP は l,回復に要する時間は m 秒となる。

〔バッチ処理のオンライン時間帯への移行〕

図2中のバッチ処理の実行順序(先行・後続の関係)を変更せずに,表3の全 AP をオンライン時間帯に移行するに当たって,AP に必要な変更を検討した。

  1. 移行後に発生する問題

表2,3中の AP を変更せずに,表3中の全処理をオンライン時間帯に移行すると仮定した場合,発生し得る問題を表6にまとめ,その対処を検討した。表6では,どの AP も ISOLATIONレベルを READ COMMITTED としてトランザクションを実行することを前提としている。

表6 発生し得る問題
図の説明テキスト
問題# 内容
問題1 “契約登録” AP と “報告作成” AP を同時に実行すると,“契約登録” AP の応答に遅延が発生する。
問題2 “進捗更新” AP の実行中に “予約登録” AP による登録を行うと,“予定表” テーブルの現手配#が不正になることがある。
問題3 “点検率更新” AP の処理が,“実施結果” テーブルの当日分の行数が多い日には,オンライン終了時刻までに終わらない。
  1. 問題への対処

表6の問題に対処して,表2,3中のいずれかの AP を変更する。

(1) 問題1

この問題は,“報告作成”AP が “” テーブルの更新対象行に対する を処理終了まで保持し,“契約登録”AP がその解放を待つことで発生する。問題への対処として “報告作成”AP を変更する。

(2) 問題2

“予約登録”AP,“進捗更新”AP の処理内容を図3,4に示す。図3,4では特に断りのない限り,行の読み込みには共有ロックが掛かるものとする。

この問題は,“予約登録”AP が点検の出庫予約の受付中に,“進捗更新”AP で同じ受託の “予定表” テーブルの現手配#を 5(実施完了予定確認)から に変更し,その後で “予約登録”AP が同じ現手配#を に変更することで発生する。手配#の順序の制約及び ISOLATIONレベルを変えずに問題に対処するために,一つの AP を変更することにした。

図3 “予約登録” AP の処理内容
図の説明テキスト

受け付けた 1 回の入庫又は出庫の予約について, 契約#, 受託#を指定して, 次を行う。
① “受託” テーブルの行を, 専有ロックを掛けて読み込む。
② “予定表” テーブルから対象行を読み込む。
③ “進捗” テーブルに行を追加する。
④ “予定表” テーブルの行の現手配#が “進捗” テーブルの手配#よりも小さい番号であれば, ⑤に進み, それ以外の場合は⑥に進む。
⑤ “予定表” テーブルの行の現手配#に手配#と同じ値を設定して更新する。
⑥ コミットを発行する。

図4 “進捗更新” AP の処理内容
図の説明テキスト

“実施結果” テーブルから報告 YMD が当日に等しい行を読み込み, 行ごとに次を行う。
① “進捗” テーブルに, 完了確認の手配#に対応する行を追加する。
② “予定表” テーブルの該当行の現手配#に完了確認の手配#を設定して更新する。
③ 保守区分が車検で, “進捗” テーブルの手配#が完了確認の場合は, “車両” テーブルの車検満了 YMD を次回の車検満了日に更新する。
④ “記録簿” テーブルに行を追加する。
⑤ コミットを発行する。

(3) 問題3

処理時間の短縮を図るため,“点検率更新”APを同じ報告YMDの中で重複していないソート連番の範囲を指定することで,ジョブを多重処理できるように変更した。“点検率更新”APの処理内容を図5に示す。

図5 “点検率更新” APの処理内容
図の説明テキスト

① 報告YMD, 開始連番, 終了連番を引数で受け取る。
② “実施結果”テーブルから指定された引数に報告YMDが一致し, 開始連番から終了連番までの間の行をソート連番順に読み込む。
③ 読み込んだ行ごとに, 契約#が一致する“点検率”テーブルの行を読み込み, 実績点数に点数を加えて更新する。
④ ②, ③を繰り返し, 結果行を全て処理したら, 最後に一度だけコミットを発行する。

図5の処理内容変更案をレビューしたところ,APの多重処理によって,デッドロックが発生するおそれがあるとの指摘を受けた。デッドロックの発生を防ぐために,次の二つの案を検討した。
案1 図5中の処理内容を修正する。
案2 表3中の“点検率更新”AP以外のAPを一つ変更する。

〔移行後の運用設計〕

  1. メディア障害への対策

メディア障害への対策として,オンライン時間帯に何回かのオンラインバックアップを取得し,オンライン時間帯終了後にRDBMSを停止してデータベース全体のオフラインバックアップを取得することにした。オンライン時間帯にメディア障害が発生した場合のリカバリでは,ログを用いて回復に要する時間がリカバリ時間の多くを占めるので,回復に要する時間を見積もり,オンラインバックアップの取得頻度を求めた。

(1) 見積りの前提
① 表2,3の1日の処理行数の合計がログ量に等しいと仮定する。1日のログ量は,処理行数を合計して,追加に190,000行,更新に100,000行になる。
② 全テーブルの1ページ当たりの平均行数を20行,1ページ当たりのストレージへのI/O時間を10ミリ秒とし,ストレージへのI/O以外のCPU処理,索引探索,ネットワーク通信などに掛かる時間を考慮しないものとする。
③ ログによる回復では,追加については,ページ中の行数が平均行数を超えるまではバッファ内で処理し,更新については,バッファヒット率を 0% として試算する。

(2) 見積りの結果
1 日の全てのログによる回復時間は,追加では, ページの I/O が発生するので 秒,更新では, ページの I/O が発生するので 秒を要する。ログ量が均等になるタイミングでオンラインバックアップを取得し,ログによる回復時間を 5 分以内にするためには,1 日に 回のオンラインバックアップを取得すればよい。

  1. バッチ AP の運用変更

ログなしモードのテーブルを対象に実行していた “点検抽出”,“車検抽出 1”, “車検抽出 2” の各 AP をオンライン時間帯に移行する影響について検証した。ログなしモードのテーブルを更新する AP をオンラインで実行すると,開始から完了までの間,チェックポイントが取得されない。この間にサーバ障害が発生すると,RDBMS 再開始のとき, が大量に行われるおそれがあり,回復に要する時間が長期化するという問題がある。

そのため,ログなしモードの指定を取りやめることにした。ただし,AP の処理内容は変更しない。また,“WK1”,“WK2” の各テーブルは,バックアップ対象外のままとする。この場合,運用の変更に当たって,次の 2 点のリソースの見直しが必要となる。

(1) “WK1” テーブルと “WK2” テーブルのログが新たに出力されるので,ログの格納領域が不足しないよう見直す。
(2) “WK1” テーブルと “WK2” テーブルの ので が不足しないよう見直す。

設問と解答・解説

設問1

(1)

表5中の太枠部分内に、“○”を記入して表を完成させよ。ただし,太枠部分以外のバックアップを取得する契機には全て“○”を記入済みである。なお,バックアップを取得しないテーブルとその契機は,空欄のままとすること。

模範解答

T1: 顧客,委託先,契約,受託,車両,予定表,進捗
T3: 点検率,報告
T4: 進捗
T5: 車両,予定表,進捗,報告
T6: 顧客,委託先,契約

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 全て正しく解答している。
  • 1: 一部のテーブルや契機に誤りや漏れがあるが、大半は正しく解答している。
  • 0: 大半が誤っている、または無解答。

解説

RDBMSのバックアップとリカバリに関する設問です。

  • バッチ処理によるデータ更新のタイミングとテーブルの依存関係を考慮し、適切なバックアップ取得契機を見極める必要があります。
  • T1, T3, T4, T5, T6 の各テーブルにおいて、どのタイミングでデータが更新されるかを問題文の仕様から正確にトレースします。

高得点のポイント

  • テーブルの更新タイミングを漏れなく把握し、対象の契機に正確にマークすること。

(2)

“2. サーバ障害時の RDBMS 再開始” について答えよ。

本文中の a に入れる適切な字句を答えよ。

模範解答

WK1

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「WK1」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

サーバ障害時のRDBMS再開始処理に関する空欄補充です。

  • 異常終了後の再開始プロセスにおいて、対象となる一時テーブルや作業領域を特定します。
  • WK1 はリカバリ処理において特定の役割を果たすテーブルです。

高得点のポイント

  • 使用するRDBMSの仕様(ロールフォワードやロールバック、再定義の対象)を正しく把握すること。

(3)

本文中の b に入れる適切な字句を答えよ。

模範解答

再定義

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「再定義」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

サーバ障害時のRDBMS再開始処理に関する空欄補充です。

  • 特定の一時オブジェクトに対する処理内容を問う問題です。
  • 異常終了後にはテーブルの 再定義 が必要になるケースがあります。

高得点のポイント

  • 使用するRDBMSの仕様を正しく把握すること。

(4)

本文中の c に入れる適切な字句を答えよ。

模範解答

点検抽出

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「点検抽出」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

サーバ障害時のRDBMS再開始処理に関する空欄補充です。

  • 各トランザクションの依存関係から、ロールバックや再処理の対象となるAP名を特定します。
  • 解答は 点検抽出 となります。

高得点のポイント

  • 各バッチ処理の順序と更新対象テーブルを正しく紐付けること。

(5)

本文中の d に入れる適切な字句を答えよ。

模範解答

車検抽出2

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「車検抽出2」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

サーバ障害時のRDBMS再開始処理に関する空欄補充です。

  • リカバリ対象となる具体的な処理ステップを特定します。
  • 解答は 車検抽出2 となります。

高得点のポイント

  • 業務処理の特徴を理解し、処理の前後関係を正しく見定めること。

(6)

本文中の e に入れる適切な字句を答えよ。

模範解答

実施登録

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「実施登録」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

サーバ障害時のRDBMS再開始処理に関する空欄補充です。

  • リカバリ対象となる具体的な処理ステップを特定します。
  • 解答は 実施登録 となります。

高得点のポイント

  • 対象データの更新状況から、必要なリカバリ処理を正しく導出すること。

(7)

本文中の f に入れる適切な字句を答えよ。

模範解答

WK2

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「WK2」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

サーバ障害時のRDBMS再開始処理に関する空欄補充です。

  • リカバリ時に使用・再作成されるテーブルを特定します。
  • 解答は WK2 となります。

高得点のポイント

  • 一時テーブルのライフサイクルとリカバリ時の振る舞いを把握していること。

(8)

本文中の g に入れる適切な字句を答えよ。

模範解答

車検抽出1

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「車検抽出1」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

サーバ障害時のRDBMS再開始処理に関する空欄補充です。

  • 障害発生タイミングにおいて、再処理が必要となるAPを特定します。
  • 解答は 車検抽出1 となります。

高得点のポイント

  • トランザクションのコミット状態に基づき、再実行すべき処理を正確に判断すること。

(9)

本文中の h に入れる適切なAP名を全て答えよ。ここで,対象となるAP名がない場合,“なし”とすること。

模範解答

予定表作成,進捗更新

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「予定表作成,進捗更新」と正確に解答している。
  • 1: 一部のAP名のみ解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

障害発生時のリカバリ対象となるAP名を特定する設問です。

  • ロールバックが必要となるAP、あるいは再実行が必要となるAPを本文の条件から読み取ります。
  • 解答は 予定表作成,進捗更新 です。

高得点のポイント

  • 複数のAP名がある場合、全て漏れなく列挙すること。

(10)

本文中の i に入れる適切なAP名を全て答えよ。ここで,対象となるAP名がない場合,“なし”とすること。

模範解答

なし

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「なし」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

障害発生時のリカバリ対象となるAP名を特定する設問です。

  • 本文の条件とトランザクションの完了状態から、該当するAPが存在しないことを判断します。
  • 指定に従い なし と解答します。

高得点のポイント

  • 該当なしの場合に問題文の指示通りに記述できること。

(11)

本文中の j に入れる適切な秒数を答えよ。

模範解答

140

配点 3

解説

リカバリに要する時間(秒数)を見積もる計算問題です。

  • ログ量やトランザクションの処理件数から、ロールフォワード・ロールバックにかかる時間を算出します。
  • 正解の数値は 140 です。

各選択肢の解説

本設問は数値記述式のため選択肢はありません。計算過程において、ページアクセス数や1ページあたりの処理時間を正確に掛け合わせることが求められます。

(12)

本文中の k に入れる適切なAP名を全て答えよ。ここで,対象となるAP名がない場合,“なし”とすること。

模範解答

予定表作成,進捗更新,報告作成,点検率更新

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「予定表作成,進捗更新,報告作成,点検率更新」と全て正確に解答している。
  • 1: 一部のAP名のみ解答している。
  • 0: 大半が誤っている、または無解答。

解説

別シナリオでの障害発生時にリカバリ対象となるAP名を特定する設問です。

  • 再処理が必要となる全APを列挙します。
  • 解答は 予定表作成,進捗更新,報告作成,点検率更新 です。

高得点のポイント

  • 対象となる複数のAPを全て漏れなく把握し、列挙すること。

(13)

本文中の l に入れる適切なAP名を全て答えよ。ここで,対象となるAP名がない場合,“なし”とすること。

模範解答

報告作成,点検率更新

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「報告作成,点検率更新」と正確に解答している。
  • 1: 一部のAP名のみ解答している。
  • 0: 大半が誤っている、または無解答。

解説

別シナリオでの障害発生時にロールバック等の対象となるAP名を特定する設問です。

  • 解答は 報告作成,点検率更新 です。

高得点のポイント

  • 障害発生時点でのトランザクションの境界を正確に見極めること。

(14)

本文中の m に入れる適切な秒数を答えよ。

模範解答

300

配点 3

解説

別シナリオでのリカバリに要する時間(秒数)を見積もる計算問題です。

  • トランザクション量に応じた処理時間を見積もります。
  • 正解の数値は 300 です。

各選択肢の解説

本設問は数値記述式です。データ量とRDBMSの性能指標から正確に計算を行う必要があります。

設問1では,(2)(c)の正答率が低かった。本文中に示された,異常終了後のRDBMS再開始の具体的な処理内容に着目していない解答が散見された。本文中に示された条件をきちんと読み取り,正答を導き出してほしい。使用するRDBMSの仕様を正しく把握することは,見積りをする上で非常に重要である。

設問2

(1)

問題1への対処について答えよ。

本文中の に入れる適切な字句を答えよ。

模範解答

受託

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「受託」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

バッチ処理をオンライン時間帯に移行する際の課題に関する空欄補充です。

  • オンライン処理と競合する可能性のあるテーブルやリソースを特定します。
  • 解答は 受託 テーブルです。

高得点のポイント

  • バッチ処理とオンライン処理が同時にアクセスする対象データを本文から読み取ること。

(2)

本文中の に入れる適切な字句を答えよ。

模範解答

専有ロック

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「専有ロック」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

バッチ処理をオンライン時間帯に移行する際の課題に関する空欄補充です。

  • 更新処理において掛かるロックの種類を特定します。
  • 解答は 専有ロック (排他ロック)です。

高得点のポイント

  • RDBMSの排他制御の基本概念(共有ロックと専有ロックの違い)を正しく理解していること。

(3)

“報告作成” APの変更内容を 40 字以内で具体的に答えよ。

模範解答

報告の追加と受託の更新を一定回数繰り返すごとにコミットする。

採点基準(配点 3点)

知識・理解度(内容)(2点)

  • 2: コミットのタイミングを分割する(一定回数繰り返すごとにコミットする)という業務処理の同期単位に関する要点を正しく理解し、具体的な対象操作を含めて記述している。
  • 1: コミットのタイミングを分割する点には触れられているが、対象となる操作の指定が不正確または不足している。
  • 0: コミットの分割に関する言及がない、または全く無関係の記述である。

論理性(構造)(1点)

  • 1: 対象操作とコミットの関連性が明確で、論理的に自然な文章で構成されている。
  • 0: 文章のつながりが不明瞭で、意図が正しく伝わらない。

解説

「報告作成」APの変更内容を具体的に記述する設問です。

  • 大量の更新を行うバッチ処理をオンライン時間帯に実行する場合、長時間の専有ロックによるオンライン処理の遅延を防ぐ工夫が必要です。
  • トランザクションを適切な単位で分割し、定期的に コミット を発行することでロックを解放します。
  • 本文の処理内容に沿って「報告の追加」と「受託の更新」を一定回数繰り返すごとにコミットする旨を記述します。

高得点のポイント

  • コミットのタイミングを分割するという方針が示されていること。
  • 対象となる操作(報告の追加と受託の更新)が明記されていること。

(4)

(b)の変更を行った場合,AP障害の発生後に行う再処理において,“報告” テーブルに,追加済みの行と報告内容が同一の行の追加は発生するか。発生の有無を判断し,答案用紙の “有” 又は “無” のどちらかを〇で囲み,判断の根拠を 40 字以内で具体的に答えよ。

模範解答


次回報告YMDの更新をコミットした行は,再処理時に選択されないから

採点基準(配点 3点)

知識・理解度(内容)(2点)

  • 2: 「無」であることを示し、次回報告YMDの更新がコミットされているため再処理時に選択されないという理由を正確に記述している。
  • 1: 理由は記述しているが理由の説明が不十分である、または「無」の明示が欠けている。
  • 0: 要点が含まれていない。

論理性(構造)(1点)

  • 1: 判断とその根拠が論理的に結びついており、自然な文章になっている。
  • 0: 論理破綻がある、または文章の意味が通らない。

解説

トランザクション分割によるAP障害後の再処理時の挙動を考察する設問です。

  • コミットのタイミングを分割した場合、障害発生時にはコミット済みのデータと未コミットのデータが混在します。
  • 再処理において、追加済みの行が再度追加されてしまう(重複登録)懸念があるかどうかを判断します。
  • コミットされた行は 次回報告YMD などのステータスが更新されているため、再抽出の条件から外れ、重複は発生しいと判断できます。

高得点のポイント

  • 発生の有無について「無」と判断していること。
  • その根拠として、ステータス(次回報告YMD)の更新がコミットされているため再処理対象に選択されないというロジックを簡潔に記述すること。

(5)

問題2への対処について答えよ。

本文中の に入れる適切な手配#を答えよ。

模範解答

7

配点 3

解説

更新異常などを防ぐための対処において、対象となる手配#を特定する設問です。

  • オンライン処理とバッチ処理の競合により発生する不具合のケースを読み解きます。
  • 正解は 7(完了確認) です。

各選択肢の解説

本設問は数値(手配番号)の記述式です。本文中の業務フローと手配一覧を照らし合わせて正確な番号を特定します。

(6)

本文中の に入れる適切な手配#を答えよ。

模範解答

6

配点 3

解説

更新異常などを防ぐための対処において、対象となる手配#を特定する設問です。

  • 正解は 6(出庫予約受付) です。

各選択肢の解説

本設問は数値(手配番号)の記述式です。排他制御が不十分な場合にどの操作が影響を受けるかを考察します。

(7)

変更する AP名を答えよ。

模範解答

予約登録

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「予約登録」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

排他制御の見直しが必要なAP名を特定する設問です。

  • 更新異常を防ぐために、読み込み時点で適切にロックを取得するよう変更すべきAPを答えます。
  • 解答は 予約登録 です。

高得点のポイント

  • トランザクション内で他からの更新を防ぐ必要がある処理を正確に特定すること。

(8)

(b)で解答した APの変更内容を 35 字以内で具体的に答えよ。

模範解答

・“予定表”テーブルの行にFOR UPDATE句を指定して読み込む。

・“予定表”テーブルの行に専有ロックを掛けて読み込む。

採点基準(配点 3点)

知識・理解度(内容)(2点)

  • 2: 「予定表テーブルの行」に対して「FOR UPDATE句の指定」または「専有ロックを掛ける」ことを正確に記述している。
  • 1: 排他制御の必要性には触れているが、具体的な方法の記述が不十分、あるいは対象テーブルの指定がない。
  • 0: 要点が含まれていない。

論理性(構造)(1点)

  • 1: 変更内容として論理的に自然な文章で記述されている。
  • 0: 文章の意味が通らない。

解説

更新異常を防ぐための具体的なAP変更内容を記述する設問です。

  • SELECT文でのデータ読み込み時から更新完了までの間、他のトランザクションによる更新を防ぐ必要があります。
  • これを実現するためには、FOR UPDATE句 を指定して読み込む、あるいは 専有ロック を掛けて読み込む設計に変更します。

高得点のポイント

  • 対象となるテーブル(予定表)を明示していること。
  • 「FOR UPDATE句」または「専有ロックを掛ける」という具体的な排他制御手段が記述されていること。

(9)

問題3への対処について答えよ。

レビューで指摘を受けたデッドロックは,どのような状況で発生するか。30 字以内で具体的に答えよ。

模範解答

異なるジョブで同じ契約#の行を異なる順に更新するとき

採点基準(配点 3点)

知識・理解度(内容)(2点)

  • 2: 異なるジョブが同一データを異なる順序で更新するというデッドロックの発生条件を正確に記述している。
  • 1: デッドロックの条件の一部(「異なる順に更新する」など)のみ記述している。
  • 0: 要点が含まれていない。

論理性(構造)(1点)

  • 1: 状況説明として論理的に適切な文章構成になっている。
  • 0: 文章の意味が通らない。

解説

レビューで指摘されたデッドロックの発生状況を具体的に記述する設問です。

  • デッドロックは、複数のトランザクションが複数のリソースに対して 異なる順序 でロックを獲得しようとした場合に発生します。
  • 本ケースでは、異なるジョブが同じ契約#の行を異なる順に更新しようとする状況が原因となります。

高得点のポイント

  • 「異なるジョブで」「同じ契約#の行を」「異なる順に更新する」というデッドロック特有の発生条件を過不足なく記述すること。

(10)

案1について,図5の処理内容の修正内容を 20 字以内で具体的に答えよ。ただし,コミットの発行頻度は変更しないものとする。

模範解答

読込み順を契約#順に変更する。

採点基準(配点 3点)

知識・理解度(内容)(2点)

  • 2: 「読込み順を契約#順に変更する」ことを正確に記述している。
  • 1: 読込み順の変更には触れているが、「契約#順」という具体的なソートキーが欠けている。
  • 0: 要点が含まれていない。

論理性(構造)(1点)

  • 1: 変更内容として明確で論理的な文章になっている。
  • 0: 文章の意味が通らない。

解説

デッドロックを回避するための具体的な修正内容(案1)を記述する設問です。

  • デッドロックを回避する基本的なアプローチは、すべてのトランザクションでリソースにアクセスする 順序を統一 することです。
  • ここでは、処理対象の読込み順を 契約#順 に変更することで回避を図ります。

高得点のポイント

  • 「読込み順」を「契約#順」に変更するというソートキーが明確に指定されていること。

(11)

案2について,変更する AP名を答えよ。

模範解答

実施登録

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「実施登録」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

デッドロックを回避するための別案(案2)において、変更対象となるAP名を特定する設問です。

  • 案2のアプローチに合わせて影響を受けるバッチ処理を特定します。
  • 解答は 実施登録 です。

高得点のポイント

  • バッチ処理群の仕様とデータアクセスの流れを正しく把握していること。

(12)

案2について,変更内容を 30 字以内で具体的に答えよ。

模範解答

ソート順を,報告YMD,契約#順に変更する。

採点基準(配点 3点)

知識・理解度(内容)(2点)

  • 2: ソート順を「報告YMD、契約#順」に変更することを正確に記述している。
  • 1: ソート順の変更には触れているが、指定するキーの一部が欠けている。
  • 0: 要点が含まれていない。

論理性(構造)(1点)

  • 1: 変更内容として明確で論理的な文章になっている。
  • 0: 文章の意味が通らない。

解説

案2における具体的な変更内容を記述する設問です。

  • アクセス順序をより詳細に制御するため、ソート順を複数のキーで統一します。
  • 解答は「ソート順を,報告YMD,契約#順 に変更する。」となります。

高得点のポイント

  • 指定するソートキー(報告YMDと契約#)が両方とも正しく含まれていること。

設問2では,(1)(b),(c)の正答率が低かった。業務処理の特徴を理解し,同期の単位を見定めた上でトランザクション設計を行うよう心掛けてほしい。(3)では,デッドロックの発生状況を理解していない解答が散見された。デッドロックに関する受験者の知識がまだ不十分であることの結果と思われる。

設問3

〔移行後の運用設計〕について答えよ。

(1)

本文中の に入れる適切な数値を答えよ。

模範解答

9,500

配点 2

解説

ログによるロールフォワード時のページアクセス数を見積もる問題です。

  • RDBMSのリカバリにおいて、行の追加更新 ではページアクセスの仕方が異なる点に注意が必要です。
  • 挿入・更新される行数とページサイズの計算から見積もります。
  • 正解は 9,500 です。

各選択肢の解説

本設問は数値記述式のため選択肢はありません。行の追加と更新の件数を正しく把握し、ページあたりのレコード数を考慮した計算が求められます。

(2)

本文中の に入れる適切な数値を答えよ。

模範解答

95

配点 2

解説

ログによるロールフォワード時のページアクセス数を見積もる問題です。

  • 特定のテーブルへの更新にともなうアクセス数を算出します。
  • 正解は 95 です。

各選択肢の解説

本設問は数値記述式のため選択肢はありません。インデックスの更新等も考慮した正確な見積もりが求められます。

(3)

本文中の に入れる適切な数値を答えよ。

模範解答

100,000

配点 2

解説

ログによるロールフォワード時のページアクセス数を見積もる問題です。

  • 大規模なバッチ処理がオンライン移行された際のアクセス数を計算します。
  • 正解は 100,000 です。

各選択肢の解説

本設問は数値記述式のため選択肢はありません。処理件数の桁落ちや計算ミスに注意してください。

(4)

本文中の に入れる適切な数値を答えよ。

模範解答

1,000

配点 2

解説

ログによるロールフォワード時のページアクセス数を見積もる問題です。

  • 正解は 1,000 です。

各選択肢の解説

本設問は数値記述式のため選択肢はありません。アクセス特性の理解に基づく計算が求められます。

(5)

本文中の に入れる適切な数値を答えよ。

模範解答

3

配点 2

解説

ログによるロールフォワード時の所要時間等を見積もる問題です。

  • 正解は 3 です。

各選択肢の解説

本設問は数値記述式のため選択肢はありません。総ページアクセス数とディスクのI/O性能などから最終的な所要時間を算出します。

(6)

本文中の に入れる適切な字句を答えよ。

模範解答

ロールフォワード

採点基準(配点 4点)

正確性(内容)(4点)

  • 4: 「ロールフォワード」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

移行後の運用設計において、データベースのリカバリ機能に関する空欄補充です。

  • ログを用いて障害発生直前の状態までデータを復旧させる処理を指します。
  • 解答は ロールフォワード です。

高得点のポイント

  • データベースのリカバリ手法(ロールバックとロールフォワード)を正確に使い分けられること。

(7)

本文中の に入れる適切な字句を答えよ。

模範解答

ロックメモリ

採点基準(配点 4点)

正確性(内容)(4点)

  • 4: 「ロックメモリ」と正確に解答している。
  • 0: 誤った字句を解答している、または無解答。

解説

移行後の運用設計において、データベースの設定リソースに関する空欄補充です。

  • バッチ処理をオンライン時間帯に移行し、トランザクションの多重度が上がることで消費量が増加するリソースを特定します。
  • 解答は ロックメモリ (またはロック資源)です。

高得点のポイント

  • 行単位のロックが大量に発生することによるシステムリソースへの影響を理解していること。

(8)

本文中の に入れる適切な文を 20字以内で答えよ。

模範解答

行単位のロックが新たに掛かる

採点基準(配点 4点)

正確性(内容)(4点)

  • 4: 「行単位のロックが新たに掛かる」という要旨を正確に記述している。
  • 2: ロックに関する記述はあるが、対象(行単位)や状態(新たに掛かる)が不正確または不足している。
  • 0: 要点が含まれていない。

解説

データベースの設定変更にともなうリソース消費増加の理由を記述する設問です。

  • トランザクション処理において、大量のデータ更新を行うとそれに比例してロック情報が管理メモリに蓄積されます。
  • 解答として「行単位のロックが新たに掛かる」ため、リソース(ロックメモリ)が枯渇するリスクが高まる旨を記述します。

高得点のポイント

  • 「行単位のロック」という細かい粒度のロックが「新たに掛かる(発生する)」という事象を短く的確に表現すること。

設問3では,(1)キ~ケの正答率が低かった。ログによるロールフォワードの際にも行の追加と更新とではページアクセスの仕方が異なることを理解していない受験者が多かった。また,(2)の正答率も低かった。データベースの設定変更によるリソース不足などの障害を未然に防ぐように注意してほしい。