令和6年度 秋期 データベーススペシャリスト試験 午後I 問題 問2 労務管理システムのSQLと排他制御
テクノロジデータベース
この問題は2024(R6)秋 データベーススペシャリスト 午後Iに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。
本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。
学習ガイド
総合商社の労務管理システムを舞台に、SQLの穴埋めとトランザクションの排他制御を問う問題です。中心となるのは、所在情報更新処理と入退室ログ登録処理が引き起こすデッドロックの分析で、どのロックがどの順で取られるかを時系列で説明できるかが試されます。この記事では、ロック競合の再現手順を丁寧に追った上で、監査機能のSQL空欄についても処理の流れから根拠を確認します。
この記事で押さえる論点
- 行ロックの競合からデッドロック発生のメカニズムを時系列で説明する
- 処理順序の変更によるデッドロック回避策を導く
- トリガーを含むSQL文の空欄を処理の流れから埋める
出題情報
- 出題
- 2024(R6)秋 データベーススペシャリスト 午後I 問2
- 配点
- 50点満点
- 模範解答
- 公表(設問ごとに掲載)
出題趣旨・採点講評(IPA 公表)
オンラインシステムでは,同時実行されるトランザクションの多重度や,処理時間によるトランザクション間の影響を考慮して,トランザクションの処理内容を注意深く設計する必要がある。本問では,労務管理システムのデータベース実装を題材として,SQLの設計能力に加えて,トランザクション制御及び排他制御を理解して,適切な同時実行性を満たす設計能力を問う。
問2では,労務管理システムのデータベース実装を題材に,SQLの設計,トランザクション制御及び排他制御に基づく同時実行性について出題した。全体として正答率は平均的であった。
問題本文
問2 総合商社の労務管理システムのデータベース実装に関する次の記述を読んで,設問に答えよ。
総合商社のY社は,労務管理にRDBMSを用いている。既存の勤怠管理機能に,新たに所在情報管理機能と監査機能を追加することになった。
〔RDBMSの排他制御〕
- ロックは行単位で掛ける。共有ロックを掛けている間,他のトランザクションから対象行への共有ロックは可能であり,専有ロックは共有ロックの解放待ちとなる。専有ロックを掛けている間,他のトランザクションから対象行への共有ロック及び専有ロックは,専有ロックの解放待ちとなる。
- 索引を使わずに表探索で全ての行に順次アクセスする場合,検索条件に合致するか否かにかかわらず全行をロックの対象とする。索引探索の場合,索引から読み込んだ行だけをロックの対象とする。
〔所在情報管理機能の追加〕
- 機能の概要
オフィス内のフリーアドレス化を推進するため,従業員の就業エリア(以下,エリアという)への入退室のログを記録し,従業員の所在情報をエリア情報表示端末で社内に公開する。エリア情報表示端末では,エリアの混雑状況なども表示する。
エリアには,建屋,フロア,執務室があり,従業員は各エリアへの入退室時にICカード社員証で認証を行う。従業員は入退室時に必ず認証を行うように定められており,他の従業員に続いて認証せずに入退室することは禁止されている。従業員は,建屋内にいる限りいずれかのエリアに所在しており,建屋から出ることで退出として扱われる。
所在情報管理機能では,認証時に入退室ログを記録する。また,記録した入退室ログを基に,従業員の現在位置を示す所在情報及びエリアの混雑状況を定期的に更新する。
- テーブル構造
主なテーブルのテーブル構造は,図1のとおりである。主キーには主索引が定義されている。

図の説明テキスト
図1 主なテーブルのテーブル構造 (一部省略)
枠内に以下のリレーションスキーマが定義されている。
従業員 (従業員番号, 氏名, 生年月日, 入社年月日, 性別, …)
エリア状況 (エリアコード, エリア名, 座席数, 在席者数, 混雑判定閾値, …)
所在情報 (従業員番号, 最終入室エリアコード, …)
入退室ログ (ログID, 従業員番号, エリアコード, 入退室区分, 入退室年月日, 入退室時刻, …)
※従業員番号、エリアコード、ログIDには実線の下線(主キー)、所在情報の最終入室エリアコード、入退室ログの従業員番号・エリアコードには破線の下線(外部キー)が引かれている。
- 入退室ログ登録処理
従業員が入退室で認証する都度,“入退室ログ”テーブルに行を追加する。ログIDは時系列に昇順で採番し,入退室区分には入室(‘1’)又は退室(‘0’)を設定する。必要に応じて,連携する勤怠管理機能及びエリア情報表示端末に情報を送信する。
処理の概要を図2に示す。トランザクションの ISOLATIONレベルは REPEATABLE READとする。

図の説明テキスト
図2 入退室ログ登録処理の概要
① 入退室ログを挿入する。
② 入退室区分が入室の場合,当該従業員の所在情報を参照し,最終入室エリアコードが退出の状態であれば,勤怠管理機能に入室情報を送信する。入退室区分が退室の場合,何もしない。
③ 当該エリアの在席者数と混雑判定閾値を参照し,今回の入退室によって混雑判定閾値を上回る又は下回ることになるかを確認し,上回る又は下回る場合はエリア情報表示端末に混雑情報を送信する。
④ コミットする。
- 所在情報更新処理
5分ごとに実行するバッチ処理で,定期的にエリア状況及び所在情報を更新する。
“入退室ログ”テーブルに登録されている入退室ログを読み込み,“エリア状況”テーブルのエリアごとの在席者数を更新,“所在情報”テーブルの従業員ごとの最終入室エリアコードを更新する(退出している場合は,最終入室エリアコードには ‘9999’を設定する)。全ての更新が終わったら,読み込み終わった入退室ログの位置を記録しておき,次回実行時はその続きから読み込む。
所在情報更新処理の概要を図3,所在情報更新処理に用いるSQL文を表1に示す。
トランザクションのISOLATIONレベルはREPEATABLE READとする。

図の説明テキスト
図3 所在情報更新処理の概要
① SQL1を実行して最新の入退室ログのログIDを取得し, ホスト変数 HNEWIDに設定する。なお, ホスト変数 HLASTID には, 前回実行時のホスト変数 HNEWID の値が設定されている。
② SQL2 を実行してエリアごとの在席者増減数 (入室した従業員と退室した従業員の差)を取得する。SQL2 の結果行ごとに, ホスト変数 HAREACODE にエリアコードを, ホスト変数 HDIFF に在席者増減数を設定し, SQL3 を実行してエリア状況の在席者数を更新する。
③ SQL4 を実行して従業員ごとの最新の入退室ログのログIDを取得する。SQL4の結果行ごとに, ホスト変数 HEMPLOYEEID に従業員番号を, ホスト変数 HCURRENTID にログ ID を設定し, SQL5 を実行して最終入室エリアのエリアコードを取得する。さらに, そのエリアコードをホスト変数 HAREACODE に設定し, SQL6 を実行して所在情報の最終入室エリアコードを更新する。
④ ホスト変数 HLASTID に, ホスト変数 HNEWID の値を設定する。
⑤ コミットする。

図の説明テキスト
表1 所在情報更新処理に用いる SQL 文 (未完成)
| SQL | SQL 文の構文 |
|---|---|
| SQL1 | SELECT MAX(ログ ID) FROM 入退室ログ |
| SQL2 | SELECT エリアコード, a (CASE WHEN b THEN 1 ELSE 0 END) - a (CASE WHEN c THEN 1 ELSE 0 END) AS 在席者増減数 FROM 入退室ログ WHERE ログ ID > :HLASTID AND ログ ID <= :HNEWID GROUP BY エリアコード |
| SQL3 | UPDATE エリア状況 SET 在席者数 = 在席者数 + :HDIFF WHERE エリアコード = :HAREACODE |
| SQL4 | SELECT 従業員番号, d FROM 入退室ログ WHERE ログ ID > :HLASTID AND ログ ID <= :HNEWID GROUP BY 従業員番号 |
| SQL5 | SELECT CASE WHEN b THEN エリアコード ELSE '9999' END AS エリアコード FROM 入退室ログ WHERE ログ ID = :HCURRENTID |
| SQL6 | UPDATE 所在情報 SET 最終入室エリアコード = :HAREACODE WHERE 従業員番号 = :HEMPLOYEEID |
〔監査機能の追加〕
従業員の残業時間,休暇,エリアを,入退室ログと突き合わせてチェックする監査機能を,要件に基づいて設計した。
- 監査機能の要件
(1) 監査対象月の1日から月末日までの勤怠をチェックする。監査対象月の月末の営業日から翌月の5営業日までの間,毎日実行する。
(2) 上長承認済み,かつ,監査未チェックの勤怠を対象にチェックする。なお,一度監査が終了した行でも,勤怠情報を従業員が更新した場合は,上長承認と監査結果をリセットして,再度,上長承認及び監査を行う。
(3) 監査機能のジョブは多重実行する。全てのジョブに一意なジョブIDを割り当て,それぞれのジョブに重複していない従業員番号の範囲を指定して実行する。また,処理の途中で失敗した場合,その原因を取り除いて,同じジョブIDで再実行することで,処理を再開する。なお,ジョブIDは再利用する。
- 監査機能のテーブル設計
主なテーブルのテーブル構造は図4のとおりである。主キーには主索引が定義されている。

図の説明テキスト
図4 監査機能に関するテーブルのテーブル構造
勤怠 (従業員番号(実線下線), 年月日(実線下線), 年休フラグ, 出勤時刻, 退勤時刻, 残業時間, エリアコード(破線下線), 上長承認, 監査結果)
再開位置 (ジョブID(実線下線), 再開従業員番号)
注記 エリアコードには,就業した建屋のエリアコードが設定される。自社建屋に立ち寄らない直行直帰の出張をした場合は,NULLが設定される。
“勤怠”テーブルには,従業員ごと年月日ごとの勤怠情報を記録する。上長承認には,承認済み(‘Y’)又は未承認(‘N’)を設定する。監査結果には,監査未チェックの行は NULL を設定し,チェックしたら適正(‘Y’)又は不適正(‘N’)を設定する。
監査機能のジョブが途中で失敗した場合に,ジョブを再実行するために“再開位置”テーブルを使用する。再開従業員番号には処理中の従業員番号を記録し,再実行時には記録していた従業員番号から処理を再開する。
- 監査機能の処理設計
処理の流れとSQL文を図5に示す。トランザクションの ISOLATIONレベルは READ COMMITTED とする。

図の説明テキスト
図5 監査機能の処理の流れと SQL 文(未完成)
① 当該ジョブの処理対象の従業員番号の範囲を,HBEGINID と HENDID に設定する。
当該ジョブの処理対象の年月日の範囲を,HBEGINDAY と HENDDAY に設定する。
② 当該ジョブのジョブ ID を,HJOBID に設定し,かつ,“再開位置”テーブルからジョブ ID が HJOBID の行を検索する。
②-1 結果行がない場合,①の HBEGINID を HTARGETID に設定し,“再開位置”テーブルに,HJOBID と HTARGETID の行を挿入する。
②-2 結果行がある場合,その再開従業員番号を,HTARGETID に設定する。
③ “勤怠”テーブルから行を読むために次のカーソルを開く。
DECLARE CSR CURSOR WITH HOLD FOR
SELECT * FROM 勤怠
WHERE 従業員番号 BETWEEN e AND f
AND 年月日 BETWEEN :HBEGINDAY AND :HENDDAY
AND 上長承認 = 'Y' AND 監査結果 g
ORDER BY h , 年月日
④ カーソルで読む行がある限り⑤〜⑩の処理を繰り返し実行し,行がなくなれば⑪に進む。
なお,処理行数をカウントし,⑩の処理は N 行おきにだけ実行する。
⑤ カーソルから 1 行読む。
⑥ 出勤時刻と退勤時刻が,入退室ログの入退室時刻と矛盾しないかチェックする。
⑦ 年休を取得している場合,不適正な出勤でないか入退室ログをチェックする。
⑧ エリアコードが NULL でない場合,入退室ログのエリアと矛盾がないかチェックする。
⑨ ⑤で読んだ行の監査結果を,⑥〜⑧のチェック結果で更新する。
⑩ “再開位置”テーブルの当該ジョブの再開従業員番号を,⑤で読んだ行の従業員番号で更新し,コミットする。
⑪ カーソルを閉じる。
⑫ ア
⑬ コミットし,ジョブを終了する。
注記 HBEGINID, HENDID, HBEGINDAY, HENDDAY, HJOBID 及び HTARGETID は,それぞれ開始従業員番号, 終了従業員番号, 開始年月日, 終了年月日, 処理中ジョブ ID, 処理中従業員番号を示すホスト変数である。
監査機能の実行時には他トランザクションも実行されており,排他ロック解放待ちタイムアウトの考慮も必要である。排他ロック解放待ちタイムアウト時間を T 秒とすると,他トランザクションで排他ロック解放待ちタイムアウトさせないための図5中の N 行を見積もる計算式は,次の式となる。

図の説明テキスト
N < (T - A に必要な時間) ÷ B に必要な時間

図の説明テキスト
表2 ロック状況(未完成)
| 時系列 | テーブル名 | ロックを掛けるトランザクション | ロック種別 | ロック状態 |
|---|---|---|---|---|
| 1 | エリア状況 | 所在情報更新 入退室ログ登録 |
共有ロック 専有ロック |
ロック済み ロック解放待ち |
| 2 | 所在情報更新 入退室ログ登録 |
共有ロック 専有ロック |
ロック済み ロック解放待ち |
|
| 3 | 所在情報更新 入退室ログ登録 |
共有ロック 専有ロック |
ロック済み ロック解放待ち |
|
| 4 | 所在情報更新 入退室ログ登録 |
共有ロック 専有ロック |
ロック済み ロック解放待ち |
設問と解答・解説
設問1
〔所在情報管理機能の追加〕について答えよ。
(1)
表1中の a に入れる適切な字句を答えよ。
模範解答
SUM
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: データの集計において合計を求める必要があるという要件を正確に理解できている。
- 1点: 集計の必要性は認識しているが、具体的な要件の理解が不十分である。
- 0点: システムの要件や集計の意図を理解できていない。
論理性(構造)(2点)
- 2点: SQLの集計関数として適切な「SUM」を正確に記述できている。
- 1点: 集計関数であることは分かるが、記述に軽微な誤りがある。
- 0点: 適切なSQL構文を記述できていない。
解説
正解の根拠
オンラインシステムにおいて、同時実行されるトランザクションの多重度や処理時間を考慮した設計が重要です。
本設問では、従業員の労働時間等の集計を行うため、各レコードの時間を足し合わせる必要があります。
SQLにおいて合計値を算出する集計関数は SUM となります。
高得点のポイント
データの集計において合計を求める必要があるというシステムの要件を理解しているか
SQLの合計関数として正しい構文を記述できているか
(2)
表1中の b に入れる適切な字句を答えよ。
模範解答
入退室区分 = 'I'
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: 入室を示す区分値が 'I' であることを正確に理解している。
- 1点: 区分の必要性は理解しているが、値の認識が不十分である。
- 0点: 入退室の区分値について理解していない。
論理性(構造)(2点)
- 2点: SQLのWHERE句等で用いる条件式として正確に記述できている。
- 1点: 条件式の意図は伝わるが、構文表現に軽微な誤りがある。
- 0点: 条件式として成立していない。
解説
正解の根拠
所在情報の管理において、入退室の記録を正確に分類する必要があります。
入室に関連する処理や条件を指定するため、入退室区分が 'I' (In) であるレコードを抽出する条件式が求められます。
高得点のポイント
入室の判定条件として正しい区分値を理解しているか
SQLの条件式として正しく記述できているか
(3)
表1中の c に入れる適切な字句を答えよ。
模範解答
入退室区分 = 'O'
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: 退室を示す区分値が 'O' であることを正確に理解している。
- 1点: 区分の必要性は理解しているが、値の認識が不十分である。
- 0点: 入退室の区分値について理解していない。
論理性(構造)(2点)
- 2点: SQLの条件式として正確に記述できている。
- 1点: 条件式の意図は伝わるが、構文表現に軽微な誤りがある。
- 0点: 条件式として成立していない。
解説
正解の根拠
所在情報の管理において、退室の記録を特定するための条件式です。
退室に関連する処理を行うため、入退室区分が 'O' (Out) であることを指定する必要があります。
高得点のポイント
退室の判定条件として正しい区分値を理解しているか
SQLの条件式として正しく記述できているか
(4)
表1中の d に入れる適切な字句を答えよ。
模範解答
MAX(ログID)
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: 最新のログを取得するためにログIDの最大値を求める必要があることを理解している。
- 1点: 最新のデータを取得する意図は読み取れるが、方法の理解が不十分である。
- 0点: 最新データの取得方法を理解していない。
論理性(構造)(2点)
- 2点: MAX関数と対象カラムを用いて正しく記述できている。
- 1点: 関数名や対象カラムの記述に軽微な誤りがある。
- 0点: 適切な構文を記述できていない。
解説
正解の根拠
最新の入退室状態を正確に把握するためには、記録されたログの中から直近のデータを取得する必要があります。
ログは通常、連番などで管理されるため、最大のログIDを取得する集計関数 MAX を用いるのが適切です。
高得点のポイント
最新のログを特定するために最大値の取得が必要であることを理解しているか
MAX関数を用いて正しい引数を指定できているか
(5)
所在情報更新処理を実行中に,入退室ログ登録処理が発生するとデッドロックとなる可能性がある。デッドロックを引き起こすロックの状況について,時系列に,対象となるテーブルのテーブル名,ロックを掛けるトランザクション,ロック種別,ロック状態を答えて,次に示す表2を完成させよ。なお,ロックを掛けるトランザクション,ロック種別,ロック状態については,表中の該当する方を〇で囲んで示せ。
模範解答
模範解答は公表されていません。下の採点基準と解説から、解答に求められる要素を読み取ってください。
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: トランザクションの処理内容から、対象テーブルやロックの状況を正確に読み取り、デッドロックの要因を完全に理解している。
- 1点: ロックの競合については理解しているが、一部のテーブルやロック種別の読み取りに誤りがある。
- 0点: 排他制御とデッドロックのメカニズムを理解していない。
論理性(構造)(2点)
- 2点: 時系列に沿った対象テーブル、トランザクション、ロック種別、ロック状態の推移を論理的かつ正確に整理できている。
- 1点: 時系列の整理は行われているが、一部の推移に論理的な矛盾や欠落が見られる。
- 0点: 時系列に沿った論理的な整理ができていない。
解説
正解の根拠
トランザクションが並行実行される際のデッドロックのリスクを分析する問題です。
所在情報更新処理と入退室ログ登録処理が、それぞれ異なる順序でテーブルに対して排他ロックを要求することが原因でデッドロックが発生します。
時系列に沿ったロック取得の流れを正確にトレースし、どのタイミングで待ち状態に陥るかを把握することが求められます。
高得点のポイント
処理内容から、どのテーブルにどのようなロックが必要かを正確に読み取れているか
トランザクション間の競合によるデッドロックの発生メカニズムを論理的に整理できているか
(6)
(2)のデッドロックを回避するために,図2の入退室ログ登録処理の処理順序を変更する。変更内容を,図2中の①〜③を用いて20字以内で答えよ。
模範解答
②と③の処理順序を入れ替える。
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: デッドロック回避のために、複数のトランザクション間でリソースへのアクセス順序を統一する必要性を完全に理解している。
- 1点: 順序変更の必要性は認識しているが、根本的な回避原則の理解がやや不十分である。
- 0点: デッドロック回避の原則を理解していない。
論理性(構造)(2点)
- 2点: 図2の処理番号(②、③)を明確に用い、順序の入れ替えを具体的かつ正確に記述できている。
- 1点: 順序の変更について記述しているが、表現が曖昧であるか、処理の特定がやや不正確である。
- 0点: 順序の変更について論理的に記述できていない。
解説
正解の根拠
デッドロックを回避するための基本的な手法として、複数のトランザクションがリソース(テーブル)にアクセスする順序をシステム全体で統一することが挙げられます。
図2の処理の流れにおいて、異なる順序でテーブルにアクセスしている部分(処理②と③)を見直し、順序を入れ替えることで競合を防ぐことができます。
高得点のポイント
リソースへのアクセス順序を統一することでデッドロックを回避できるという原則を理解しているか
図2中の処理番号(②、③)を用いて、具体的かつ簡潔に順序の入れ替えを指示できているか
設問1では,(2)時系列2,3,4の正答率が低かった。デッドロックになっていない解答も散見された。テーブル名が与えられていた時系列1だけは正答率が高かったが,トランザクションの処理内容から,どのテーブルにどのようなロックが必要かを読み取ることができていない受験者が多かった。ロックの流れを正しく読み取り,トランザクション間のデッドロックのリスクを把握することは,同時実行性を満たすトランザクションを設計する上で非常に重要である。
設問2
〔監査機能の追加〕について答えよ。
(1)
図5中の e に入れる適切な字句を答えよ。
模範解答
:HTARGETID
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: 監査対象を特定するためのバインド変数の役割を正確に理解している。
- 1点: 変数の必要性は理解しているが、文脈に沿った正確な役割の把握が不十分である。
- 0点: バインド変数の役割を理解していない。
論理性(構造)(2点)
- 2点: 適切な変数名を正確に記述できている。
- 1点: 変数名の記述に軽微な誤りがある。
- 0点: 適切な変数名を記述できていない。
解説
正解の根拠
監査機能の処理において、対象となる特定のIDをクエリに渡す必要があります。
前後の文脈から、ターゲットを特定するためのバインド変数として :HTARGETID が適切です。
高得点のポイント
監査対象を特定するためのバインド変数の役割を理解しているか
適切な変数名を正確に記述できているか
(2)
図5中の f に入れる適切な字句を答えよ。
模範解答
:HENDID
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: 処理範囲の終端を指定するためのバインド変数の役割を正確に理解している。
- 1点: 変数の必要性は理解しているが、文脈に沿った正確な役割の把握が不十分である。
- 0点: バインド変数の役割を理解していない。
論理性(構造)(2点)
- 2点: 適切な変数名を正確に記述できている。
- 1点: 変数名の記述に軽微な誤りがある。
- 0点: 適切な変数名を記述できていない。
解説
正解の根拠
監査機能において、処理の終了位置や範囲の終端を指定する必要があります。
文脈から、終了IDを示すバインド変数として :HENDID が適切です。
高得点のポイント
処理範囲の終端を指定するためのバインド変数の役割を理解しているか
適切な変数名を正確に記述できているか
(3)
図5中の g に入れる適切な字句を答えよ。
模範解答
IS NULL
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: 未処理判定において値が存在しない状態を検索する必要性を正確に理解している。
- 1点: 未処理データの検索意図は読み取れるが、NULLの扱いの理解が不十分である。
- 0点: 未処理データの判定方法を理解していない。
論理性(構造)(2点)
- 2点: SQLの判定式として「IS NULL」を正確に記述できている。
- 1点: 判定式の記述に軽微な誤りがある(例:「= NULL」としてしまう等)。
- 0点: 適切な構文を記述できていない。
解説
正解の根拠
監査処理において、未処理のデータや特定の状態がまだ設定されていないレコードを抽出する必要があります。
値が存在しないことを判定するためのSQL構文は IS NULL となります。
高得点のポイント
未処理判定において値が存在しない状態(NULL)を検索する意義を理解しているか
SQLの構文として正しい判定式を記述できているか
(4)
図5中の h に入れる適切な字句を答えよ。
模範解答
従業員番号
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: システム内で個人を特定・集約するためのキー項目が従業員番号であることを正確に理解している。
- 1点: キー項目の必要性は理解しているが、具体的な項目の特定が不十分である。
- 0点: 集約のためのキー項目を理解していない。
論理性(構造)(2点)
- 2点: カラム名として正確な用語を記述できている。
- 1点: カラム名の記述に軽微な誤りや曖昧さがある。
- 0点: 適切なカラム名を記述できていない。
解説
正解の根拠
労務管理システムにおいて、監査やログの集約を行うためには、個人ごとの処理単位を特定する必要があります。
従業員を一意に識別し、集計のキーとして使用されるカラムは 従業員番号 です。
高得点のポイント
システム内で個人を特定・集約するためのキー項目の重要性を理解しているか
カラム名として正確に記述できているか
(5)
図5中の ア で行うべき処理を40字以内で答えよ。
模範解答
“再開位置”テーブルからジョブIDがHJOBIDの行を削除する。
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: ジョブ正常終了時に不要となった再開位置情報を削除するクリーンアップ処理の必要性を完全に理解している。
- 1点: 終了時の処理の必要性は認識しているが、再開位置情報の削除という具体的な目的の理解がやや不十分である。
- 0点: 正常終了時の必要な処理を理解していない。
論理性(構造)(2点)
- 2点: 対象となる「再開位置テーブル」と、削除条件である「ジョブID」を明確かつ論理的に記述できている。
- 1点: 削除処理について記述しているが、対象テーブルや条件の指定が曖昧である。
- 0点: 削除対象や条件を論理的に記述できていない。
解説
正解の根拠
監査機能などのバッチ処理が中断後に再開できるよう、システムは再開位置情報をテーブルに保存します。
ジョブが正常に終了した場合、その再開位置情報は不要となるため、次回の実行やシステムの健全性を保つためにクリーンアップ(削除)する必要があります。
高得点のポイント
正常終了時のクリーンアップ処理(再開位置情報の削除)の必要性を理解しているか
対象となるテーブル名と、削除条件(該当するジョブID)を明確かつ論理的に記述できているか
(6)
A の対象となる処理に該当するものを,図5中の④〜⑬から選べ。なお,該当する処理が複数ある場合は全て選ぶこと。
模範解答
選択肢キ: ⑩
配点 3点
解説
正解の根拠
監査対象となる処理Aの範囲を特定する問題です。
排他ロックが継続する区間と解放される契機をトランザクションの処理内容から分析すると、該当する処理ステップは ⑩(キ) に限定されます。
各選択肢の解説
⑩(キ): 正答。トランザクションの処理内容とロックの範囲から、監査処理Aの対象として適切です。
その他の選択肢: ロックの取得範囲や解放のタイミングと合致しないため、処理Aの対象としては誤りです。
(7)
B の対象となる処理に該当するものを,図5中の④〜⑬から選べ。なお,該当する処理が複数ある場合は全て選ぶこと。
模範解答
選択肢イ: ⑤
選択肢ウ: ⑥
選択肢エ: ⑦
選択肢オ: ⑧
選択肢カ: ⑨
配点 3点
解説
正解の根拠
監査対象となる処理Bの範囲を特定する問題です。
トランザクションの実行に伴う排他ロックの期間を考慮すると、排他ロック解放待ちによるタイムアウトを引き起こさない許容期間の対象は、⑤から⑨までの範囲にまたがります。
各選択肢の解説
⑤(イ)〜⑨(カ): 正答。これらは監査処理Bの対象として、排他ロックのタイムアウトを引き起こさない適切な許容期間内に含まれるステップです。
その他の選択肢: 処理Bの対象範囲外であり、ロック継続の観点から不適切です。
設問2では,(3)の正答率が低かった。排他ロック解放待ちタイムアウトさせないために,許容できる排他ロック時間を考える問題であり,トランザクションの処理内容から,どの区間でロックが継続し,どの契機でロックが解放されるのかよく考えてもらいたい。