DBデータベーススペシャリスト試験 午後Ⅰ

平成22年度春期 データベーススペシャリスト 午後Ⅰ 問3

事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。

問題

問3 データベースの保守・運用に関する次の記述を読んで,設問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に示す。 図1 請求情報処理で使用するテーブルの構造 〔請求情報照会処理の概要〕 請求情報照会処理では,図2のSQL文を使用する。照会1と照会2のアクセス経路は主索引(主キーに定義された索引)である。トランザクションのISOLATIONレベルはREPEATABLE READであり,排他は行単位に行われる。 図2 請求情報照会処理で使用するSQL文 〔請求情報更新処理の概要〕 請求情報更新処理は,請求登録処理,入金登録処理,請求一括削除処理及び請求取消処理から構成される。 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の間で同期点を取るものとする。ページ中の削除された行の領域は,新たな行の追加のときに再利用可能である。 図3 請求一括削除処理で使用するSQL文 〔問題の発生・検討〕 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からREAD UNCOMMITTEDに変更したところ,長時間の排他待ちは解消したが,照会2では,実行のタイミングによって,請求額合計が少ないという不整合が発生した。そこで,“請求”テーブルの明細数と“請求明細”テーブルの明細行の数が不一致の場合は,照会結果に含まれないように,図2中の照会2を図4のように修正した。 図4 照会2を修正したSQL文(一部未完成) 〔請求一括削除処理の内容・手順の変更〕 Fさんは,検討Cで述べた対策とは別に,問題Cに対する対策として,請求一括削除処理の手順を表1のように変更した。このとき,ある手順からある手順の間,オンライントランザクションからの“請求”テーブルと“請求明細”テーブルへのアクセスを停止することにした。また,手順5の終了後,次の請求一括削除処理を行うまで,差分IC又は増分ICを定期的に取得することにした。 表1 変更後の請求一括削除処理の手順 〔テーブルの定期バックアップ計画〕 Fさんはまず,請求情報処理の各処理とテーブルのCRUD及び各処理の稼働情報(処理形態,稼働時間帯及び処理頻度)を調査し,表2のように整理した。 表2 請求情報処理の各処理とテーブルのCRUD及び各処理の稼働情報(一部未完成) 次に,月末日の請求一括削除処理の終了後に全体ICを取得し,請求登録処理と入金登録処理の終了後に,差分IC又は増分ICを取得することにした。バックアップ時間は,その時点のICの容量にほぼ比例することが分かったので,各テーブルの1か月分の全体ICの容量に対する差分IC及び増分ICの容量の割合を見積もった。その結果を表3に示す。ここで,請求取消処理による影響は無視するものとする。 表3 1か月分の全体ICに対する差分IC及び増分ICの容量の割合(一部未完成) 設問1 〔問題の発生・検討〕中の検討A~Cについて,(1)~(3)に答えよ。 (1) 検討Aにおいて,“請求”テーブルに追加すべき制約の適切な列名又は列名の組合せを答えよ。また,その制約の追加目的を,15字以内で述べよ。 (2) 検討Bにおいて,Fさんは方法2を選択した。方法2が方法1よりも優れている理由を,20字以内で述べよ。 (3) 検討Cに関する,図4中の[a]~[c]に入れる適切な字句を答えよ。 設問2 表1の変更後の請求一括削除処理の手順について,(1)~(3)に答えよ。 (1) 表1の手順1の全体オンラインICは,どのような障害の発生に備えて必要か,例を一つ答えよ。 (2) オンライントランザクションからのアクセス(参照だけの場合とすべての操作の場合)を停止すべき対象範囲(手順)に関する次の記述中の[ア]~[エ]に入れる適切な手順番号を答えよ。 参照だけの場合:手順[ア]の開始から手順[イ]の終了まで すべての操作の場合:手順[ウ]の開始から手順[エ]の終了まで (3) 手順5の処理終了後に障害が発生し,手順5のICを利用した回復が必要になったにもかかわらず,そのICが利用不可能だった。しかし,できるだけ障害直前の整合性のある状態に戻したい。回復可能な整合性のある状態のうち,障害直前に最も近い状態は,どの手順番号の後の状態か,その手順番号を答えよ。また,その回復方法を表1や本文中の用語を用いて,25字以内で述べよ。 なお,整合性のある状態とは,未コミット状態のデータが含まれず,かつ,オンライントランザクションを開始できる状態であるものとする。また,回復方法にはバックアップファイルを作成する手順を含めなくてよい。 設問3 〔テーブルの定期バックアップ計画〕について,(1),(2)に答えよ。 (1) 表2中の[d]~[g]に入れるCRUDの中で,最も適切で欠かせないものを一つ答えよ。 (2) 表3中の[h]~[o]に入れる最も近い値を25,50,75,100,125,150,175,200の中から選んで,表を完成させよ。
図1 請求情報処理で使用するテーブルの構造。会員(会員番号,住所,電話番号,最新請求日,最新入金日),請求(請求番号,会員番号,請求日,明細数,請求取消日,入金日),請求明細(請求番号,請求明細番号,商品コード,請求額,返品フラグ),商品別請求(商品コード,請求額合計,最新請求日)。実線下線が主キー,破線下線が外部キー。
図1 請求情報処理で使用するテーブルの構造。会員(会員番号,住所,電話番号,最新請求日,最新入金日),請求(請求番号,会員番号,請求日,明細数,請求取消日,入金日),請求明細(請求番号,請求明細番号,商品コード,請求額,返品フラグ),商品別請求(商品コード,請求額合計,最新請求日)。実線下線が主キー,破線下線が外部キー。
図2 請求情報照会処理で使用するSQL文。照会1は請求Xと請求明細Yを請求番号で結合し、指定した請求番号の明細数・請求明細番号・商品コードを取得する。照会2は請求明細から、指定した請求番号で返品フラグが'Y'以外の請求額の合計を求める。
図2 請求情報照会処理で使用するSQL文。照会1は請求Xと請求明細Yを請求番号で結合し、指定した請求番号の明細数・請求明細番号・商品コードを取得する。照会2は請求明細から、指定した請求番号で返品フラグが'Y'以外の請求額の合計を求める。
図3 請求一括削除処理で使用するSQL文。削除1は、請求日が前月末日以前で入金日がNULLでない請求の請求番号に該当する請求明細を削除する。削除2は、同じ条件に該当する請求の行を削除する。
図3 請求一括削除処理で使用するSQL文。削除1は、請求日が前月末日以前で入金日がNULLでない請求の請求番号に該当する請求明細を削除する。削除2は、同じ条件に該当する請求の行を削除する。
図4 照会2を修正したSQL文(一部未完成)。請求Xと請求明細Yを結合し、返品フラグが'Y'以外の請求額合計を求める。条件の X.明細数=(SELECT[a]FROM[b]Z WHERE[c]) の部分が空欄になっている。
図4 照会2を修正したSQL文(一部未完成)。請求Xと請求明細Yを結合し、返品フラグが'Y'以外の請求額合計を求める。条件の X.明細数=(SELECT[a]FROM[b]Z WHERE[c]) の部分が空欄になっている。
表1 変更後の請求一括削除処理の手順。手順1:全体オンラインIC取得、手順2:残す行を抽出したファイルを作成し1か月保存、手順3:ログを出さずにテーブルと索引の全ページを空にする、手順4:ログを出さないオプションでロード、手順5:全体オフラインIC取得。
表1 変更後の請求一括削除処理の手順。手順1:全体オンラインIC取得、手順2:残す行を抽出したファイルを作成し1か月保存、手順3:ログを出さずにテーブルと索引の全ページを空にする、手順4:ログを出さないオプションでロード、手順5:全体オフラインIC取得。
表2 請求情報処理の各処理とテーブルのCRUD及び各処理の稼働情報(一部未完成)。5処理(照会・請求登録・入金登録・請求一括削除・請求取消)と4テーブルのCRUD、処理形態、稼働時間帯、処理頻度の表。請求登録の請求・請求明細・会員欄が空欄d・e・f、請求取消の請求欄が空欄g。CRUDの意味と処理形態の略号を注記している。
表2 請求情報処理の各処理とテーブルのCRUD及び各処理の稼働情報(一部未完成)。5処理(照会・請求登録・入金登録・請求一括削除・請求取消)と4テーブルのCRUD、処理形態、稼働時間帯、処理頻度の表。請求登録の請求・請求明細・会員欄が空欄d・e・f、請求取消の請求欄が空欄g。CRUDの意味と処理形態の略号を注記している。
表3 1か月分の全体ICに対する差分IC及び増分ICの容量の割合(一部未完成)。4テーブルについて、全体IC(100%)に対する1~4回目の差分IC・増分ICの容量割合(%)の表。請求明細は差分25・25・25・25、増分25・50・75・100。空欄はh~o。網掛けは非表示と注記している。
表3 1か月分の全体ICに対する差分IC及び増分ICの容量の割合(一部未完成)。4テーブルについて、全体IC(100%)に対する1~4回目の差分IC・増分ICの容量割合(%)の表。請求明細は差分25・25・25・25、増分25・50・75・100。空欄はh~o。網掛けは非表示と注記している。
解き方のヒントを見る

手順の目的と前提状態を対応づける

運用や障害対応に関する手順は、それぞれ何を守るために行われ、どの時点のどのような状態を前提にしているかで性格が決まります。用語の印象ではなく、目的と前提の組合せに注目して、内容が筋道として成り立つかを自分で確かめましょう。

この問題で問われていること

この問いで問われているのは、個々の用語を知っているかよりも、ある手順や仕組みが『何を防ぐ・何を取り戻すためのものか』と『それが働くには何がそろっている必要があるか』を結び付けて考えられるかという点です。

視点

運用設計の各要素は、いずれも『守りたいもの』と『そのために事前に用意・記録しておくもの』の組で理解すると整理しやすくなります。ある要素について、目的・発動のきっかけ・必要な前提の三つを自分の言葉で書き出し、互いに矛盾がないかを見比べる習慣をつけると、似た名前の概念を取り違えにくくなります。

確認ポイント

  • その手順や仕組みは、何を防ぐ・何を取り戻すことを目的としているか
  • それが機能するために、事前に何が用意・記録されている必要があるか
  • 目的と前提の組合せが、問われている状況の条件と食い違っていないか
正解と解説を見る

解説

通信販売の請求情報処理を題材に、DBの保守・運用を問う問題です。主な論点は、一意性制約による再実行時の重複防止、同期点を細かく取ることによるログ量対策、READ UNCOMMITTEDで読んだ途中状態の検出、ログを出さないロードを使った一括削除手順での停止範囲と回復方法、CRUDとデータの特徴から全体IC・差分IC・増分ICの容量を見積もることです。

問題の全体像

E社の請求情報処理では、4テーブル(会員、請求、請求明細、商品別請求)を、照会(オンライン)と請求登録・入金登録・請求一括削除(バッチ)・請求取消(オンライン)が使います。テストで三つの問題が起きました。A:異常終了後に再実行すると請求が二重に登録される。B:削除1がログ量の上限を超えて失敗する。C:一括削除中に照会が長時間排他待ちになる。これらへの対策に加え、ログを出さないロードを使った削除手順(表1)と、定期バックアップ計画(表2・表3)を検討します。出題趣旨では、バックアップ・回復・ロードといったRDBMSの機能の知識と、業務の理解に基づいて、制約・SQL・排他制御・保守運用を設計する力を問うとしています。

設問1(1)(列名)

注目するのは、再実行で『請求番号を除き、同じ内容の請求データ行』が追加された点です。請求番号はRDBMSが自動で採番するので、請求番号の一意性では重複を防げません。請求登録処理は会員ごとに月1回行い、請求日には処理日を設定します。したがって、同じ会員に同じ請求日の請求が2行あってはいけません。公式解答例でも、制約の対象は『会員番号,請求日』の組合せです。

設問1(1)(目的)

{会員番号,請求日}に一意性制約(候補キーとしての制約)を付けると、同じ処理日に最初から再実行しても、登録済みの会員の行は追加が拒否されます。そのため重複行ができません。公式解答例では、目的を『一意性を保証するため』としています。15字以内なので、『(会員番号と請求日の組の)一意性を保証する』という要素に絞って書けば十分です。

設問1(2)

本文には『最も多い月で平均的な月の1.2倍』『今後,年率20%以上の増加が見込まれる』とあります。方法1のように上限値を20%上げても、データ量が増え続ければ、いずれまた上限を超えます。方法2のように一定行数ごとに同期点を取れば、1作業単位のログ量は削除対象の総件数に関係なく一定に収まります。公式解答例では、理由を『データ量の増加に影響されないから』としています。

設問1(3)(a)

READ UNCOMMITTEDでは、未コミットのデータや処理途中の状態を読むことがあります。例えば、削除1と削除2の間の状態では、請求明細の行が先に消えて請求の行は残っています。また請求登録では、請求番号ごとに同期点を取るため、明細の追加が途中の状態もあります。このとき照会2の請求額合計は少なくなります。そこで、請求の明細数と、実際に存在する請求明細の行数を比べます。公式解答例では、aは『COUNT(*)』または『MAX(請求明細番号)』です。請求明細番号は請求番号ごとに1から振る連番なので、最大値も行数の代わりになります。

設問1(3)(b)

副問合せで数えたいのは、請求番号ごとの明細行の数です。そのため、FROMに指定するテーブルは請求明細で、相関名はZです。公式解答例でもbは『請求明細』です。副問合せでは返品フラグで絞り込まない点に注意してください。明細数は返品を含めた明細全体の数だからです。

設問1(3)(c)

副問合せは、照会対象の請求番号の明細だけを数える必要があります。公式解答例では、cは『X.請求番号=Z.請求番号』『Y.請求番号=Z.請求番号』『Z.請求番号=:請求番号』のいずれかです。どれも、外側の問合せと同じ請求番号にZを限定する条件です。

設問2(1)

手順1の全体オンラインICは、手順2以降でテーブルを元の状態に戻す必要が生じたときの拠り所になります。手順3ではログを出さずに全ページを空にするので、手順2の抽出ファイルが使えないと元に戻す手段がありません。公式解答例では、例として次の三つを挙げています。手順2の最中にディスク障害が発生した場合。手順2の出力ファイルが破損して読み込めなかった場合。手順2で残すべき行を選択しなかった場合。採点講評では、OS障害などのシステム障害を挙げた解答が多かったと指摘しています。システム障害はDBMSの再始動で回復できます。バックアップファイルが必要になる障害(媒体障害や作業ミス)を答える必要があります。

設問2(2)(ア)

参照も止めるべきなのは、テーブルの中身が不完全になっている間です。手順3でページを空にし始めた時点から、正しい行は存在しなくなります。公式解答例では、アは『3』です。

設問2(2)(イ)

手順4でロードが終わると、残すべき行はすべてそろいます。ログを出さないロードの後は参照だけが可能で、手順5のオフラインICの取得中も参照は可能です。したがって、参照を止める範囲は手順4の終了までです。公式解答例では、イは『4』です。

設問2(2)(ウ)

手順2で残すべき行を抽出し始めた後に追加・更新・削除を許すと、その変更は抽出ファイルに反映されません。手順3・4を経ると、その変更は消えてしまいます。そのため、更新系の操作は手順2の開始から止める必要があります。手順1はオンラインICなので、すべての操作を許せます。公式解答例では、ウは『2』です。

設問2(2)(エ)

本文によると、ログを出さないロードの後は参照だけが可能で、全体ICを取得して初めてすべての操作が可能になります。手順5の全体オフラインICが終わるまでは、更新系の操作を再開できません。公式解答例では、エは『5』です。

設問2(3)(手順番号)

手順5の後の更新はログに残っていますが、ログを適用する起点になる手順5のICが使えません。手順4のロードはログを出していないので、手順1のICにログを適用して手順5の時点までたどることもできません。未コミットのデータを含まず、オンライントランザクションを開始できる状態のうち、障害の直前に最も近いのは、残すべき行だけがロードされた手順4の後の状態です。公式解答例でも『4の後』です。採点講評によると、『手順2の後』と答えた解答が多かったとのことです。手順2の後はまだ削除すべき行が残っており、手順4の後とは内容が違う点に注意が必要です。

設問2(3)(回復方法)

手順2で作ったファイルは1か月間保存されます。これをもう一度テーブルにロードすれば、手順4の後の状態を再現できます。公式解答例では『手順2のファイルをテーブルにロードする。』です。25字以内なので、『手順2のファイル』と『テーブルへのロード』という要素を、表1の用語で書くことがポイントです。

設問3(1)(d)

請求登録処理は、『“請求”テーブルと“請求明細”テーブルに行を追加し』と書かれています。請求テーブルに対して欠かせない操作は追加なので、公式解答例ではdは『C』です。

設問3(1)(e)

同じ記述から、請求明細テーブルにも行を追加します。公式解答例ではeは『C』です。

設問3(1)(f)

請求登録処理では、会員テーブルの最新請求日に処理日を設定します。これは既存行の更新なので、公式解答例ではfは『U』です。

設問3(1)(g)

請求取消処理では、請求テーブルの請求取消日に返品日を設定します。これも既存行の更新なので、公式解答例ではgは『U』です。

設問3(2)(h)

請求テーブルは、1回の請求登録で全会員の25%分(1か月分の25%)の行が追加されます。同じ日の入金登録では、別の25%の行の入金日が更新されます。合わせると、1回で約50%のページが変わります。与えられた請求明細の値(追加だけなので1回25%)とも対応が取れます。公式解答例ではhは『50』です。

設問3(2)(i)

増分ICは、全体ICの取得以降に変更されたページを累積して持ちます。請求テーブルでは、毎回、別の会員の行が追加・更新されるため重なりません。2回目は50+50=100%になります。公式解答例ではiは『100』です。

設問3(2)(j)

同様に1回50%ずつ累積するので、4回目は200%になります。請求テーブルには最大2か月分の行を保存するので、1か月分の全体ICの2倍になり得ます。公式解答例ではjは『200』です。

設問3(2)(k)

会員テーブルは、請求登録で25%、入金登録で別の25%の会員の行が更新され、1回で最大50%です。差分ICは前回の差分IC以降の変更だけを持つので、2回目も50%になります。公式解答例ではkは『50』です。

設問3(2)(ℓ)

会員テーブルの行数は増えません。更新されるページは、既存ページの範囲内に限られます。2回目の増分ICで既に100%に達しているので、4回目も100%を超えません。公式解答例ではℓは『100』です。

設問3(2)(m)

商品別請求テーブルは、請求登録で請求額合計が更新されます。売れる商品は月平均で全種類の25%なので、各回に更新されるのは、その25%の商品のページです。公式解答例ではmは『25』です。

設問3(2)(n)

月内に売れる商品は同じ25%の範囲に収まるので、各回に更新されるページは重なります。そのため、増分ICを累積しても25%のままです(1回目の増分ICも25)。公式解答例ではnは『25』です。

設問3(2)(o)

同じ理由で、4回目の増分ICも25%です。公式解答例ではoは『25』です。採点講評では、各テーブルがいつ、どの処理によって、どの範囲で変更されるかをつかめていない解答が多かったと指摘しています。そのうえで、表2のCRUDと表3の請求明細の値を手掛かりにすれば正解を導けるとしています。

学習のポイント

ICの種類と回復に使う入力の組合せ、ログを出さないロード後の制約、システム障害と媒体障害の違い、各処理がどのテーブルをどの範囲・どの頻度で変更するかの読み取りを重点的に学習してください。

出典:独立行政法人 情報処理推進機構(IPA)平成22年度春期 データベーススペシャリスト試験 午後Ⅰ 問3(公式資料:問題冊子(PDF) / 解答例 / 採点講評)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針