令和4年度 秋期 データベーススペシャリスト試験 午後Ⅰ 問題 問2 商品テーブルの履歴管理トリガーとクラウド移行の基盤設計
学習ガイド
専門商社の見積システムを題材に、商品テーブルの履歴管理をトリガーで実装し、パブリッククラウドへ移行する際の基盤設計を検討する問題です。設計変更案の比較、BEFORE/AFTERトリガーと相関名の使い方、データ移行の手順、RPO・RTOの見積り、レプリケーションの同期型と非同期型の違いを、クラウドサービスの仕様に沿って確認します。
この記事で押さえる論点
- 既存アプリケーションへの影響を抑えつつ履歴を保存する設計変更(適用開始日の追加と履歴テーブル)を選べる
- BEFORE/AFTERトリガーの実行タイミングと、操作前後の行を参照する相関名の使い方を理解し、SQL文を完成できる
- 見積回答から変更履歴を抽出するSQLの結果に基づき、移行時の適用開始日とNULLの扱いを判断できる
- フルバックアップとアーカイブログの前提からRPOとRTOを見積もり、同期型・非同期型レプリケーションの違いを説明できる
出題情報
- 出題
- 2022(R4)秋 データベーススペシャリスト 午後I 問2
- 配点
- 50点満点
- 模範解答
- 公表(設問ごとに掲載)
出題趣旨・採点講評(IPA 公表)
近年,パブリッククラウドの普及に伴い,既存の業務システムをクラウド環境へ移行することがある。また,その際,既存アプリケーションプログラムに極力影響を与えずに,何らかの業務改善が期待されることが多い。本問では,見積業務システムのマスター保守業務及びクラウド環境への移行を題材として,マスターテーブルの設計変更,トリガーの実装,列の値の変更を前提としたマスターデータの移行についての理解を問う。また,クラウド環境のRDBMS基盤設計でディスク障害を考慮した,RPO/RTOの見積り,レプリケーションの考慮点についての理解を問う。
問2では,専門商社における見積業務を題材に,マスターテーブルの変更履歴を保存するための設計変更,RPO及びRTOの見積り,並びにトリガー,データ移行及びレプリケーションの考慮点について出題した。全体として正答率は平均的であった。
問題本文
問2 データベースの実装に関する次の記述を読んで,設問に答えよ。
専門商社のB社では,見積業務で利用するシステム(以下,見積システムという)の,マスター保守に伴う調査業務を改善中である。また,見積システムのパブリッククラウドへの移行を計画している。
〔パブリッククラウドが提供するサービスの主な仕様〕
- オブジェクトストレージ
オブジェクトストレージには,任意のファイルを保存することができる。RDBMSとは独立して稼働し,RDBMSの障害時にも影響を受けずに,ファイルにアクセスすることができる。 - RDBMS
PaaSとして提供されるRDBMSは,インスタンスごとに割り当てられた仮想マシンで稼働する。
(1) ログ
ログはログファイルに記録する。ログファイルの切替え時に,切替え前に使用していたログファイル(以下,アーカイブログという)を,オブジェクトストレージに保存する。ログ切替えの時間間隔は,任意に設定することができる。
(2) バックアップ
① データベース全体のフルバックアップを,オブジェクトストレージに保存する。バックアップは,データベースを停止して,オフラインで取得する。バックアップを取るタイミングは,任意に設定することができる。
② オブジェクトストレージに保存したフルバックアップとアーカイブログを使って,データベースを回復することができる。
(3) レプリケーション
ログを使って,RDBMSのデータをほかのRDBMSに複製する。複製元のテーブルに対する変更操作(挿入・更新・削除)を複製先のテーブルに自動的に反映する。
レプリケーションには,同期型と非同期型がある。
① 同期型では,複製先でログをディスクに出力した後,複製元のトランザクションがコミットされる。
② 非同期型では,複製先へのログの到達を待たずに,複製元のトランザクションがコミットされる。
(4) トリガー
テーブルに対する変更操作(挿入・更新・削除)を契機に,あらかじめ定義した処理を実行する。
① 実行タイミングを定義することができる。BEFORE トリガーは,テーブルに対する変更操作の前に実行され,更新中又は挿入中の値を実際の反映前に修正することができる。AFTER トリガーは,変更操作の後に実行され,ほかのテーブルに対する変更操作を行うことができる。
② トリガーを実行する契機となった変更操作を行う前と後の行を参照することができる。参照するには,操作前と操作後の行に対する相関名をそれぞれ定義し,相関名で列名を修飾する。
〔見積システムの概要〕
- テーブル
主なテーブルのテーブル構造を図1に示す。

図の説明テキスト
枠内に以下の関係スキーマが記述されている。実線の下線は主キー、破線の下線は外部キーを表していると思われる。
・仕入先 (仕入先コード(実線), 会社名, …)
・社員 (社員コード(実線), 社員名, …)
・商品 (商品コード(実線), メーカー名, 商品名, モデル名, 定価, 更新日)
・見積依頼 (見積依頼番号(実線), 仕入先コード(破線), 社員コード(破線), 見積依頼日)
・見積依頼明細 (見積依頼番号(実線), 明細番号(実線), 商品コード(破線), 数量)
・見積回答 (見積依頼番号(実線), 仕入先コード(破線), 社員コード(破線), 見積回答日)
・見積回答明細 (見積依頼番号(実線), 明細番号(実線), 商品コード(破線), 数量, 仕入単価, モデル名, 定価)
- 仕入先への見積依頼業務
(1) B社の社員は,顧客からの引き合いを受けて,仕入先への見積依頼を入力する。
見積依頼番号を採番し,“見積依頼”,“見積依頼明細”テーブルに見積依頼の内容を登録する。
(2) 仕入先に見積りを依頼し,回答を受け取る。
(3) 仕入先からの回答を入力する。対応する見積依頼の見積依頼番号を参照し,“見積回答”,“見積回答明細”テーブルに見積回答の内容を登録する。商品のモデル名,定価が変更されたことが分かることがある。この場合,当該商品は,“見積回答明細”テーブルに変更後の内容を登録する。ただし,“商品”テーブルへの反映は後日行う。
〔“商品”テーブルの履歴管理〕
モデル名又は定価のいずれかが変更されたが,変更が“商品”テーブルへ反映されていない商品を調べるため,図2に示すSQL文を定期的に実行している。

図の説明テキスト
SELECT A.モデル名 AS 新モデル名, C.モデル名 AS 旧モデル名, A.定価 AS 新定価, C.定価 AS 旧定価
FROM 見積回答明細 A INNER JOIN 見積回答 B ON A.見積依頼番号 = B.見積依頼番号
INNER JOIN 商品 C ON A.<span id="q2_blank_a" class="blank-label">a</span> = C.<span id="q2_blank_a" class="blank-label">a</span>
WHERE B.見積回答日 > C.更新日
AND (A.モデル名 <> C.モデル名 <span id="q2_blank_b" class="blank-label">b</span> A.定価 <> C.定価)
- “商品”テーブルの設計変更
“商品”テーブルを更新すると,過去の属性情報は失われてしまう。そこで,商品属性情報の変更を履歴として保存するために,“商品”テーブルの設計変更を行うことにした。ただし,既存のアプリケーションプログラムには,極力影響を与えないようにする必要がある。表1に示す2案を検討した結果,案2を採用した。

図の説明テキスト
| 変更後のテーブル構造 | |
|---|---|
| 案1 | 商品(商品コード,メーカー名,商品名,モデル名,定価,更新日,適用開始日,適用終了日) |
| 案2 | 商品(商品コード,メーカー名,商品名,モデル名,定価,更新日,適用開始日,適用終了日) 商品履歴(商品コード,メーカー名,商品名,モデル名,定価,更新日,適用開始日,適用終了日) |
注記1 “商品履歴” テーブルの主キーは表示していない。
注記2 適用開始日は,その行の適用が開始される日,適用終了日は,その行の適用が終了される日。適用終了日が未定の場合は NULL が設定される。
案2の実装に当たり,“商品”テーブルへの列の追加,“商品履歴”テーブルの作成,及び主キーの追加を表2のSQL1に示すSQL文で行った。
また,同一の適用開始日に同一の商品を複数回更新することはない前提で,“商品”テーブルの更新時に行う追加の処理を,表2のSQL2に示すトリガーで実装した。

図の説明テキスト
| SQL | SQL文(上段:目的,下段:SQL文) |
|---|---|
| SQL1 | “商品”テーブルへ適用開始日列,適用終了日列を追加する。 “商品履歴”テーブルを作成し,主キーを追加する。 ALTER TABLE 商品 ADD COLUMN 適用開始日 DATE DEFAULT CURRENT_DATE NOT NULL; ALTER TABLE 商品 ADD COLUMN 適用終了日 DATE; CREATE TABLE 商品履歴 LIKE 商品; ALTER TABLE 商品履歴 ADD PRIMARY KEY( c, d ); |
| SQL2 | 次のトリガーを定義する。 ・“商品”テーブルの更新時に,適用開始日が NULL の場合,現在日付に更新する。 ・“商品”テーブルの更新時に,対象行の更新前の行を“商品履歴”テーブルに挿入する。このとき,挿入行の適用終了日には,更新後の行の適用開始日の前日を設定する。 CREATE TRIGGER トリガー1 e UPDATE ON 商品 REFERENCING OLD AS OLD1 NEW AS NEW1 FOR EACH ROW SET NEW1.適用開始日 = COALESCE(NEW1.適用開始日, CURRENT_DATE); CREATE TRIGGER トリガー2 f UPDATE ON 商品 REFERENCING OLD AS OLD2 NEW AS NEW2 FOR EACH ROW INSERT INTO 商品履歴 VALUES (OLD2.商品コード, OLD2.メーカー名, OLD2.商品名, OLD2.モデル名, OLD2.定価, OLD2.更新日, g.適用開始日, ADD_DAYS(h.適用開始日, -1)); |
注記1 CREATE TABLE A LIKE B は,テーブル B を基にして同じ列構成のテーブル A を定義する。
注記2 OLD1, OLD2, NEW1, NEW2 は,トリガーを実行する契機となったテーブルに対する変更操作が行われた行を参照する相関名を表す。OLD1 及び OLD2 は変更前,NEW1 及び NEW2 は変更後の行を参照する。
注記3 ADD_DAYS(引数 1, 引数 2)は,引数 1(日付型)から引数 2(整数型)日後の日付を返すユーザー定義関数である。ただし,引数 1 が NULL の場合は NULL を返す。
- データ移行
“見積回答”,“見積回答明細”テーブルから“商品”,“商品履歴”テーブルへデータを移行するため,商品のモデル名又は定価のいずれかが変更されたことの履歴を,図3のSQL文で調べた。“見積回答”,“見積回答明細”テーブルの内容を表3,表4に示す。SQL文の結果を表5に示す。

図の説明テキスト
WITH Q1 AS (SELECT A.商品コード, A.モデル名, A.定価, B.見積回答日,
LAG(A.モデル名) OVER (PARTITION BY A.商品コード ORDER BY B.見積回答日) AS 前行モデル名,
LAG(A.定価) OVER (PARTITION BY A.商品コード ORDER BY B.見積回答日) AS 前行定価
FROM 見積回答明細 A INNER JOIN 見積回答 B ON A.見積依頼番号 = B.見積依頼番号),
Q2 AS (SELECT Q1.* FROM Q1 WHERE Q1.前行定価 IS NULL
OR Q1.モデル名 <> Q1.前行モデル名 <span id="q2_blank_b" class="blank-label">b</span> Q1.定価 <> Q1.前行定価)
SELECT ROW_NUMBER() OVER (ORDER BY Q2.商品コード, Q2.見積回答日) AS 行番号,
Q2.商品コード, Q2.定価, Q2.モデル名, Q2.見積回答日 AS 適用開始日,
ADD_DAYS(LEAD(Q2.見積回答日)
OVER (PARTITION BY Q2.商品コード ORDER BY Q2.見積回答日), -1) AS 適用終了日
FROM Q2 ORDER BY Q2.商品コード, 適用開始日;
注記1 ADD_DAYS(引数 1, 引数 2)は,引数 1(日付型)から引数 2(整数型)日後の日付を返すユーザー定義関数である。ただし,引数 1 が NULL の場合は NULL を返す。
注記2 図中の b には,図2 の b と同じ字句が入る。
注記3 LAG関数は,ウィンドウ区画内で順序付けられた各行に対して,現在行の1行前の行の列の値を返す。1行前の行がない場合はNULLを返す。
注記4 LEAD関数は,ウィンドウ区画内で順序付けられた各行に対して,現在行の1行後の行の列の値を返す。1行後の行がない場合はNULLを返す。

図の説明テキスト
| 見積依頼番号 | 仕入先コード | 社員コード | 見積回答日 |
|---|---|---|---|
| 2019000101 | A001 | AB490656 | 2019-04-01 |
| 2020001201 | A001 | AH000032 | 2020-09-01 |
| 2022000201 | B002 | AA000232 | 2022-05-01 |
| 2022001201 | A001 | AH000657 | 2022-09-01 |

図の説明テキスト
| 見積依頼番号 | 明細番号 | 商品コード | 数量 | 仕入単価 | モデル名 | 定価 |
|---|---|---|---|---|---|---|
| 2019000101 | 1 | 1 | 1 | 800 | M1 | 1000 |
| 2019000101 | 2 | 2 | 1 | 1750 | M2 | 2000 |
| 2019000101 | 3 | 3 | 1 | 2600 | M3 | 3000 |
| 2020001201 | 1 | 1 | 1 | 800 | M1-1 | 1000 |
| 2022000201 | 1 | 2 | 1 | 1800 | M2-1 | 2000 |
| 2022001201 | 1 | 1 | 1 | 900 | M1-2 | 1100 |
表5の内容を基に,“商品”テーブルを更新,又は“商品履歴”テーブルへ挿入することでデータを移行した。移行前の“商品”テーブルの状態によらず,変更があった全商品を更新した。また,表2のSQL2に示すトリガーは未定義の状態で行った。

図の説明テキスト
| 行番号 | 商品コード | 定価 | モデル名 | 適用開始日 | 適用終了日 |
|---|---|---|---|---|---|
| 1 | 1 | 1000 | M1 | 2019-04-01 | (網掛け) |
| 2 | 1 | 1000 | M1-1 | 2020-09-01 | i |
| 3 | 1 | 1100 | M1-2 | j | k |
| 4 | 2 | 2000 | M2 | 2019-04-01 | (網掛け) |
| 5 | 2 | 2000 | M2-1 | 2022-05-01 | (網掛け) |
| 6 | 3 | 3000 | M3 | 2019-04-01 | (網掛け) |
注記 網掛け部分は表示していない。
〔基盤設計〕
- RPO,RTO の見積り
見積システムをパブリッククラウドに移行した場合の,RDBMS のディスク障害時の RPO 及び RTO を,次のように見積もった。
(1) 利用するパブリッククラウドの仕様に基づいて,データベースのフルバックアップは1日に1回取得し,ログの切替えは5分に1回行い,回復時にはオブジェクトストレージに保存したフルバックアップとアーカイブログを使って回復する,という前提で見積もる。
(2) RPO は,障害発生時に失われる ア に依存するので,最大 イ 分とみなせる。
(3) RTO のうち,データベースの回復に掛かる時間は,フルバックアップからのリストア時間と,ログを適用するのに掛かる時間の合計である。
(4) フルバックアップからのリストア時間は,データベース容量が 180 G バイト,リストア時のディスク転送速度を 100 M バイト/秒と仮定すると ウ 秒である。ここで,1 G バイトは バイト,1 M バイトは バイトとする。
(5) ログを適用する期間が最大になるのは,フルバックアップ取得後の経過時間が最大になる 24 時間である。ログが毎秒 10 ページ出力されると仮定すると,適用するログの量は最大 エ ページである。ログを適用するのに掛かる時間は,バッファヒット率を 0 %,同期入出力時間がページ当たり 2 ミリ秒と仮定すると最大 オ 秒である。
- 参照専用インスタンス
商品の変更履歴を調べるために実行する SQL 文の負荷が大きく,見積システムへの影響が懸念された。そこで,影響を最小化するために,参照専用インスタンスを本番インスタンスとは別に作成し,調査は参照専用インスタンスで行うことにした。また,全テーブルについて,本番インスタンスから参照専用インスタンスへ,非同期型のレプリケーションを行うことにした。
- 参照専用インスタンスへのフェイルオーバーによる業務継続
RPO及びRTOを短くするために,本番インスタンスが障害になった場合,参照専用インスタンスにフェイルオーバーして,参照専用インスタンスを使用して業務を継続できるかを検討した。検討の結果,非同期型のレプリケーションを行う前提だと,参照専用インスタンスでは,本番インスタンスでコミット済みの変更が失われる可能性があることが分かった。
設問と解答・解説
設問1
〔“商品”テーブルの履歴管理〕について答えよ。
図2中の a に入れる適切な字句を答えよ。
模範解答
商品コード
採点基準
- 2点: 正解(商品コード)と完全に一致している。
- 1点: 正解の部分的な要素を含んでいるが不完全である。
- 0点: 内容が誤っている、または無回答である。
解説
「商品」テーブルの履歴管理において、主キーや一意性を担保するキーを考える設問です。
- 商品コード は各商品を識別するためのキーです。
- 履歴管理を行うにあたり、元のテーブルの主キー構成にどう変更を加えるかがポイントになります。
高得点のポイント
- 設問の意図を正確に読み取り、対象となる列名を正しく記述していること。
図2中の b に入れる適切な字句を答えよ。
模範解答
OR
採点基準
- 2点: 正解(OR)と完全に一致している。
- 1点: 意味は通じるが指定された字句の形式に沿っていない。
- 0点: 内容が誤っている、または無回答である。
解説
データベースのトリガーにおける実行条件(イベント)を指定する部分です。
- データの新規追加や変更のタイミングを捉えるため、
INSERTとUPDATEのいずれかの操作を検知する必要があります。 - したがって、条件を結合する論理演算子 OR が入ります。
高得点のポイント
- SQLのトリガー定義における構文を正確に理解し記述できること。
“商品”テーブルの設計変更について,表1中の案1を採用した場合,ほかのどのテーブルの,どの制約を変更する必要があるか。テーブル名と制約を全て答えよ。
模範解答
テーブル名: 見積依頼明細,見積回答明細
制約: 外部キー制約
採点基準
- 2点: 対象のテーブル名2つと制約名を全て正確に記述している。
- 1点: テーブル名または制約名のいずれかが欠けている、もしくは一部誤りがある。
- 0点: 内容が完全に誤っている、または無回答である。
解説
テーブル設計の変更がほかのテーブルに与える影響を問う設問です。
- 案1では「商品」テーブルの主キー構成が変更されるため、商品コード を参照しているほかのテーブルの制約に影響が及びます。
- 対象となるテーブルは、商品コードを持つ 見積依頼明細 と 見積回答明細 です。
- 変更が必要な制約は 外部キー制約 です。
高得点のポイント
- 影響を受けるテーブル名(2つ)を漏れなく挙げていること。
- 関連する制約名(外部キー制約)を正確に答えていること。
表2中の c に入れる適切な字句を答えよ。
模範解答
商品コード
適用開始日
採点基準
- 2点: 商品コード または 適用開始日(順不同。c・d の両方で同じ字句を答えていないこと)を正しく導いている。
- 1点: 正解の部分的な要素を含んでいるが不完全である。
- 0点: 内容が誤っている、または無回答である。
解説
履歴テーブルにデータを格納する際のマッピングに関する設問です。
- 主キーの一部である 商品コード を履歴側にも正しく引き継ぐ必要があります。
高得点のポイント
- 履歴テーブルのキー構成と元テーブルの対応関係を正しく把握していること。
公式解答例では c・d は順不同です(商品コード/適用開始日のいずれを c・d に入れても正解。ただし c・d に同じ字句を入れた回答は正答ではありません)。
表2中の d に入れる適切な字句を答えよ。
模範解答
商品コード
適用開始日
採点基準
- 2点: 商品コード または 適用開始日(順不同。c・d の両方で同じ字句を答えていないこと)を正しく導いている。
- 1点: 正解の部分的な要素を含んでいるが不完全である。
- 0点: 内容が誤っている、または無回答である。
解説
履歴の有効期間を管理するための列を指定します。
- 変更前のデータの有効期限を区切るため、元データの 適用開始日 などに基づいて適用終了日を計算します。
高得点のポイント
- 履歴管理における期間(開始と終了)の考え方を理解していること。
公式解答例では c・d は順不同です(商品コード/適用開始日のいずれを c・d に入れても正解。ただし c・d に同じ字句を入れた回答は正答ではありません)。
表2中の e に入れる適切な字句を答えよ。
模範解答
BEFORE
採点基準
- 2点: 正解(BEFORE)と完全に一致している。
- 1点: 正解に近い意図の語(OLDなど)を記述しているが、指定枠に適合しない。
- 0点: 内容が誤っている、または無回答である。
解説
更新時の新旧データを参照するための相関名です。
- 更新前のデータを参照するためには BEFORE (またはOLD)に相当する修飾子が必要です。
高得点のポイント
- トリガー内で更新前データを参照するキーワードを正しく理解していること。
表2中の f に入れる適切な字句を答えよ。
模範解答
AFTER
採点基準
- 2点: 正解(AFTER)と完全に一致している。
- 1点: 正解に近い意図の語(NEWなど)を記述しているが、指定枠に適合しない。
- 0点: 内容が誤っている、または無回答である。
解説
更新時の新旧データを参照するための相関名です。
- 更新後の新しいデータを参照するためには AFTER (またはNEW)に相当する修飾子が必要です。
高得点のポイント
- トリガー内で更新後データを参照するキーワードを正しく理解していること。
表2中の g に入れる適切な字句を答えよ。
模範解答
OLD2
採点基準
- 2点: 正解(OLD2)と完全に一致している。
- 1点: 数字が抜けているなど、一部不完全である。
- 0点: 内容が誤っている、または無回答である。
解説
表2の相関名に基づくデータ参照に関する設問です。
- 定義された相関名(更新前)を用いて値を参照するため、該当する OLD2 を指定します。
高得点のポイント
- 設問内で定義されている相関名を正確に読み取ること。
表2中の h に入れる適切な字句を答えよ。
模範解答
NEW2
採点基準
- 2点: 正解(NEW2)と完全に一致している。
- 1点: 数字が抜けているなど、一部不完全である。
- 0点: 内容が誤っている、または無回答である。
解説
表2の相関名に基づくデータ参照に関する設問です。
- 定義された相関名(更新後)を用いて値を参照するため、該当する NEW2 を指定します。
高得点のポイント
- 設問内で定義されている相関名を正確に読み取ること。
表5中の i に入れる適切な字句を答えよ。
模範解答
2022-08-31
採点基準
- 2点: 正解の日付(2022-08-31)と完全に一致している。
- 1点: 日付のフォーマットがわずかに異なるが、意味は同じである。
- 0点: 内容が誤っている、または無回答である。
解説
更新に伴う履歴データの期間設定に関する設問です。
- 新しいデータの適用開始日が
2022-09-01である場合、古いデータの適用終了日はその前日である 2022-08-31 となります。
高得点のポイント
- 期間の連続性を保つための境界値(前日)を正しく計算できること。
表5中の j に入れる適切な字句を答えよ。
模範解答
2022-09-01
採点基準
- 2点: 正解の日付(2022-09-01)と完全に一致している。
- 1点: 日付のフォーマットがわずかに異なるが、意味は同じである。
- 0点: 内容が誤っている、または無回答である。
解説
新しいレコードの有効期間の開始日に関する設問です。
- 更新操作が行われた時点、または指定された適用日である 2022-09-01 が新たなデータの適用開始日となります。
高得点のポイント
- 履歴管理テーブルにおける新しい状態の開始日を正確に特定できること。
表5中の k に入れる適切な字句を答えよ。
模範解答
NULL
採点基準
- 2点: 正解(NULL)と完全に一致している。
- 1点: 空欄や未定など、類似の意図を表現しているが指定語と異なる。
- 0点: 内容が誤っている、または無回答である。
解説
最新データの適用終了日に関する設問です。
- 現在有効である(最新の)データについては、終了日が未定であるため NULL を設定するのが一般的です。
高得点のポイント
- 最新レコードの期間終了フラグとして
NULLを用いる慣例を理解していること。
表5のうち,“商品”テーブルへの更新行に当たる行を,行番号で全て答えよ。
模範解答
3,5,6
採点基準
- 2点: 対象の行番号(3,5,6)をすべて正確に記述している。
- 1点: 一部の行番号が欠けている、または余計な行が含まれている。
- 0点: 内容が完全に誤っている、または無回答である。
解説
履歴管理の仕組みにおいて、元のテーブルに対する直接的な操作を特定する設問です。
- トリガーの発火元となる「商品」テーブルの更新操作に該当する行を選択します。
- 対象となる行番号は 3, 5, 6 です。
高得点のポイント
- 更新操作(UPDATE)と履歴挿入(INSERT)のプロセスを正確に区別できること。
表5のうち,“商品履歴”テーブルへの挿入行に当たる行を,行番号で全て答えよ。
模範解答
1,2,4
採点基準
- 2点: 対象の行番号(1,2,4)をすべて正確に記述している。
- 1点: 一部の行番号が欠けている、または余計な行が含まれている。
- 0点: 内容が完全に誤っている、または無回答である。
解説
履歴管理の仕組みにおいて、過去データを保持するための操作を特定する設問です。
- トリガーによって自動的に実行される「商品履歴」テーブルへの挿入操作に該当する行を選択します。
- 対象となる行番号は 1, 2, 4 です。
高得点のポイント
- 更新操作に伴いトリガーがどのように履歴データを生成するかを正確に理解していること。
設問1は,(5)の正答率がやや低かった。“商品”テーブルへの更新行,“商品履歴”テーブルへの挿入行を重複して解答している誤答が散見された。設問の状況に基づいて,商品テーブルには最新の状態,商品履歴テーブルには過去の状態を保存する設計であることを読み取ってほしい。
設問2
〔基盤設計〕について答えよ。
本文中の ア に入れる適切な字句を答えよ。
模範解答
ログの量
採点基準
- 2点: 正解(ログの量)と完全に一致している。
- 1点: 正解に近い意図の語句を記述しているが不完全である。
- 0点: 内容が誤っている、または無回答である。
解説
RPO(Recovery Point Objective: 目標復旧時点)の見積もりに関する問題です。
- 障害発生時にどの程度のデータ損失を許容するかを見積もる際、一定期間内に生成される ログの量 と転送速度が重要な指標となります。
高得点のポイント
- クラウド環境やデータベース基盤におけるバックアップ・リカバリ設計の基本用語を理解していること。
本文中の イ に入れる適切な数値を答えよ。
模範解答
5
解説
RPO/RTOの見積もりに用いる具体的な数値を算出する設問です。
- システム要件およびバックアップ/レプリケーションの仕様に基づき、許容される遅延や転送にかかる時間を計算します。
- 算出の結果、正解は となります。
各選択肢の解説
- 本設問は選択式ではなく数値記入式のため、誤答選択肢はありません。計算過程での単位間違いや前提条件の見落としに注意が必要です。
本文中の ウ に入れる適切な数値を答えよ。
模範解答
1800
解説
基盤設計におけるデータ転送や処理時間の見積もりを問う設問です。
- 問題文に示されたパラメータ(転送速度やデータ量など)を用いて時間を計算します。
- 算出の結果、正解は となります。
各選択肢の解説
- 本設問は数値記入式であるため、誤答選択肢はありません。与えられた条件から正確な数式を立てることが求められます。
本文中の オ に入れる適切な数値を答えよ。
模範解答
1728
解説
システムの運用設計において必要となる具体的なパラメーターを算出する設問です。
- 条件式に当てはめ、必要なリソース量や時間を導き出します。
- 算出の結果、正解は となります。
各選択肢の解説
- 本設問は数値記入式であるため、誤答選択肢はありません。要件定義の数値を正確に拾い上げることが重要です。
“2. 参照専用インスタンス”について,参照専用インスタンスへのレプリケーションを非同期型にすると,見積システムへの影響を最小化できるのはなぜか。レプリケーションの仕様に基づいて,30字以内で答えよ。
模範解答
非同期型では複製先へのログの到達を待たないから
同期型では複製先でのログのディスク出力を待つから
採点基準
- 4点: 非同期型の仕様(複製先へのログ到達や書き込みを待機しないこと)を正確に理解し記述している。
- 2点: 仕様についての記述が不十分、あるいはやや不正確である。
- 0点: 内容が誤っている、または言及がない。
- 2点: 理由として適切な文末(「〜待たないから」等)で論理的に構成されている。
- 1点: 文脈は通じるが、理由としての構造がやや不明確である。
- 0点: 論理的ではない、または意味が通らない。
解説
同期型と非同期型のレプリケーションの違いと、それが本番システムに与える影響について問う設問です。
- 非同期レプリケーション では、本番インスタンス(複製元)でのトランザクションコミット時に、複製先へのログ到達や反映を待機しません。
- そのため、本番側の処理がレプリケーションのネットワーク遅延や複製先の負荷に引きずられず、見積システムへの影響を最小化 できます。
高得点のポイント
- 「非同期型」の仕様(複製先へのログ到達を待たないこと)を明確に記述していること。
- それがなぜ「システムへの影響を最小化するのか」の理由に繋がる論理構造になっていること。
- 指定された字数(30字以内)に収めつつ、過不足なく要点をまとめていること。
“3. 参照専用インスタンスへのフェイルオーバーによる業務継続”について,参照専用インスタンスでは,本番インスタンスでコミット済みの変更が失われる可能性がある。どのような場合か。レプリケーションの仕様に基づいて,30字以内で答えよ。
模範解答
複製元の変更操作が複製先で未反映だった場合
複製元と複製先の間の通信が切断されていた場合
複製先のインスタンスが停止していた場合
採点基準
- 4点: データが複製先で未反映(ログ転送遅延など)である状態を正確に記述している。
- 2点: 遅延や未反映についての記述が不十分である。
- 0点: 内容が誤っている、または言及がない。
- 2点: どのような場合かという問いに対し、「〜場合」など適切な形で構成されている。
- 1点: 文脈は通じるが、条件としての構造がやや不明確である。
- 0点: 論理的ではない、または意味が通らない。
解説
非同期レプリケーション環境において、フェイルオーバー時にデータロスト(コミット済みの変更が失われる現象)が発生する条件を問う設問です。
- 非同期型では、本番インスタンスでコミットが完了しても、その更新内容(ログ)が参照専用インスタンスに届くまでに タイムラグ が生じます。
- このタイムラグの間に本番インスタンスが障害等で停止し、参照専用インスタンスへフェイルオーバーを行うと、未反映の変更操作 は失われてしまいます。
高得点のポイント
- 複製元(本番)と複製先(参照専用)の間でデータの「未反映(遅延)」状態が発生している状況を明記していること。
- 非同期レプリケーションの仕様に起因するデータロストのメカニズムを正しく理解していること。
- 指定された字数(30字以内)で簡潔にまとめていること。
設問2は,全体として正答率は平均的であった。レプリケーションは,データベースの可用性及び拡張性を確保する目的で広く用いられている。同期型と非同期型それぞれの特徴をよく理解し,要件に応じて適切に使い分ける技術を身に付けてほしい。