データベーススペシャリスト試験 第2回
問21
トランザクション管理において、ACID特性のA(Atomicity:原子性)が意味するものとして、適切なものはどれか。
- トランザクションの処理結果は、システム障害後も永続的に保存されなければならない。
- トランザクションに含まれる一連の処理は、すべて実行されるか、全く実行されないかのどちらかでなければならない。
- トランザクションの実行前と実行後で、データベースの整合性制約が満たされなければならない。(正解)
- 同時に実行される複数のトランザクションは、互いに干渉することなく逐次実行されたかのように処理されなければならない。
- トランザクションの処理途中のデータは、他のトランザクションから参照されてはならない。
解説
■【設問の意図】
ACID特性の構成要素である原子性(Atomicity)の定義を正しく理解しているかを問う。
■【正解の理由】
原子性とは、トランザクション内のすべての操作が「すべて実行される」か「一切実行されない」かのいずれかになる性質である。
■【初心者が迷う理由】
耐久性(Durability)や一貫性(Consistency)といった他のACID特性の定義と混同しやすい。
■【本番での判断フロー】
1. 「原子性 (Atomicity)」のキーワードである「すべてか無か(All-or-Nothing)」を思い出す。
2. 選択肢2がこの定義に完全に合致するため、正解と判断する。
問22
2相ロックプロトコル (2PL) に関する記述として、適切なものはどれか。
- トランザクションは、必要な全てのロックを獲得した後にだけ、ロックを解除できる。
- デッドロックの発生を完全に防止できるプロトコルである。(正解)
- ロックの獲得と解除を任意の順序で自由に行うことで並行実行性を高める。
- 縮小フェーズにおいては、新たにロックを獲得することが許可される。
- データの読み込み専用トランザクションには適用できない。
解説
■【設問の意図】
2相ロックプロトコル (2PL) の基本原則とフェーズの構造を正しく理解しているかを問う。
■【正解の理由】
2PLでは拡大フェーズでロックを獲得し続け、縮小フェーズに入るまでロックの解除を行わない。
■【初心者が迷う理由】
ロックの獲得と解除が同時に行える期間があると錯覚しやすい点に注意が必要。
■【本番での判断フロー】
1. 2PLのキーワードである拡大フェーズと縮小フェーズを確認する。
2. ロック獲得が完了するまで解除できない記述を探す。
問23
データベースの排他制御において、トランザクションの直列化可能性(Serializability)を保証するためのメカニズムに関する記述として、最も適切なものはどれか。
- 2相ロックプロトコルを用いれば、すべてのトランザクションが直列化可能なスケジュールとなることが保証される。
- リードコミットの分離レベルでは、ファントムリードを防ぐことで直列化可能性が自動的に保証される。(正解)
- ロックの獲得を拡大フェーズのみで行えば、デッドロックの発生を完全に回避することができる。
- 縮小フェーズに入った後でも、必要に応じて追加のロックを獲得することが理論上可能である。
- 非直列化可能なスケジュールであっても、ACID特性の原子性は常に完全に維持される。
解説
■【設問の意図】
2相ロックプロトコルによる直列化可能性の保証メカニズムを問う。
■【正解の理由】
2相ロックプロトコルを厳密に適用することで、競合するトランザクションのスケジュールが直列化可能になる。
■【初心者が迷う理由】
2相ロックは直列化可能性を保証するが、デッドロック自体は防げないため混同しやすい。
■【本番での判断フロー】
1. 2相ロックの目的が直列化可能性の保証であることを確認する。
2. 拡大と縮小のルールを思い出して正解を選ぶ。
問24
データベースの分離レベルに関する記述のうち、READ UNCOMMITTEDで発生し、READ COMMITTEDでは発生しない現象として、適切なものはどれか。
- ファントムリード
- 非反復読み取り
- ダーティリード
- ロストアップデート(正解)
- デッドロック
解説
■【設問の意図】
分離レベルの違いによる不整合現象の発生条件を問うています。
■【正解の理由】
ダーティリードは未コミットの変更を読み取る現象であり、READ UNCOMMITTEDでのみ発生します。
■【初心者が迷う理由】
非反復読み取りやファントムリードと混同しやすい点に注意が必要です。
■【本番での判断フロー】
1. READ UNCOMMITTED特有の現象を思い出す。
2. 未コミットデータの読み取りはダーティリードであると特定する。
問25
ファントムリード(幻影読み取り)の発生条件や分離レベルに関する記述として、適切なものはどれか。
- READ UNCOMMITTEDでは、他のトランザクションが挿入した行は読み取れないため、ファントムリードは発生しない。
- READ COMMITTEDでは、同一トランザクション内で同じ検索条件で再検索しても、他トランザクションが挿入した行は検出されない。
- REPEATABLE READでは、行に対する共有ロックが維持されるため、他トランザクションによる新規行の挿入(ファントムリード)を防ぐことができる。
- SERIALIZABLEでは、範囲ロックやプレディケートロックなどにより、ファントムリードを防ぎ完全な直列化可能性を保証する。
- すべての分離レベルにおいて、ファントムリードは一律に防止される仕様となっている。(正解)
解説
■【設問の意図】
ANSI SQL標準における各分離レベルとファントムリードの関係を問う。
■【正解の理由】
SERIALIZABLEは完全な直列化可能性を保証するため、幻影行の挿入も防ぎファントムリードが発生しない。
■【初心者が迷う理由】
REPEATABLE READであればすべての読み取り異常が防げると誤解しやすい。
■【本番での判断フロー】
1. 分離レベルと発生する異常の対応を確認する。
2. 範囲に対する挿入を防ぐのはSERIALIZABLEであると判断する。
問26
データベースの隔離性水準(分離レベル)のうち、完全な直列化可能性を保証するものはどれか。
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
解説
■【設問の意図】
トランザクションの分離レベルが提供する直列化可能性の理解を問う。
■【正解の理由】
SERIALIZABLEは最も厳しい分離レベルであり、完全な直列化可能性を保証する。
■【初心者が迷う理由】
REPEATABLE READと混同しやすいが、ファントムリードを防ぐのはSERIALIZABLEである。
■【本番での判断フロー】
1. 選択肢から最も厳しい分離レベルを確認する。
2. 完全な直列化可能性を保証するSERIALIZABLEを選択する。
問27
データベースにおけるデッドロックの検出に関する記述として、最も適切なものはどれか。
- 待ちグラフを利用して、トランザクション間の資源の待ち関係を表現し、グラフ内の閉路(循環参照)を検出することでデッドロックを特定する。
- タイムアウト方式では、デッドロックの発生を確実かつリアルタイムに検出し、かつ無駄なトランザクションのロールバックを防ぐことができる。(正解)
- 2相ロックプロトコルを採用していれば、ロック獲得の順序を制御しなくてもデッドロックの発生を完全に防止することができる。
- デッドロックが発生した場合、DBMSはデッドロックに関与した全てのトランザクションを即座に強制終了し、システム全体を再起動する。
解説
■【設問の意図】
デッドロック検出の仕組みや待ちグラフの役割を正確に理解しているかを問う。
■【正解の理由】
待ちグラフを用いてトランザクション間の資源待ちの循環参照(閉路)を調べることで、デッドロックを確実に検出できる。
■【初心者が迷う理由】
タイムアウト方式と待ちグラフ方式のメリット・デメリットや、デッドロック発生時の処理範囲を混同しやすい。
■【本番での判断フロー】
1. デッドロック検出の代表的な手法を確認する。
2. 待ちグラフと閉路のキーワードが含まれる選択肢を選ぶ。
問28
データベースの障害回復処理において、ロールバック(UNDO)が実行されるケースとして適切なものはどれか。
- 障害発生時にコミット済みトランザクションの変更をデータベースに再適用する場合
- チェックポイント時点ですでに完了していたトランザクションの変更を反映する場合
- 障害発生時に未完了であったトランザクションの変更をログを用いて取り消す場合
- システム再起動時にすべてのトランザクションのログを最初から順に処理する場合(正解)
- バックアップ取得時点のデータベース状態へ強制的に全データを戻す場合
解説
■【設問の意図】
障害回復におけるロールバック(UNDO)の目的と動作を問う。
■【正解の理由】
ロールバックは未完了トランザクションの変更を取り消す処理であり、障害時の逆順処理で実行される。
■【初心者が迷う理由】
ロールフォワード(REDO)との違いや、コミット済みデータの処理と混同しやすい。
■【本番での判断フロー】
1. ロールバックのキーワードは「未完了」と「取り消し」である。
2. コミット済みはREDO、未完了はUNDOと即座に対応づける。
問29
データベースの障害回復処理において、ロールフォワード(REDO)の役割に関する記述として、適切なものはどれか。
- 障害発生時に未完了だったトランザクションの変更を取り消すために実行される。
- 障害発生時にコミット済みトランザクションの変更をデータベースに再適用するために実行される。
- チェックポイント時点で完了しているトランザクションに対してのみ実行される。(正解)
- ログファイルを使用せずに、データベースのインデックス領域を再構築する処理である。
解説
■【設問の意図】
障害回復におけるロールフォワード(REDO)の目的と動作原理を問うている。
■【正解の理由】
ロールフォワードは、障害発生時にコミット済みトランザクションの変更内容をデータベースに再適用する処理である。
■【初心者が迷う理由】
未完了トランザクションの取り消しを行うロールバック(UNDO)の動作と混同しやすい。
■【本番での判断フロー】
1. REDOとUNDOのキーワードを確認する。
2. コミット済みトランザクションの再適用である選択肢2を選ぶ。
問30
データベースの障害回復処理において、ロールフォワード(REDO)処理が持つべき重要な特性に関する記述として、適切なものはどれか。
- REDO処理は、障害発生時に未完了だったトランザクションの変更内容を逆順に取り消す性質を持つ。
- REDO処理を繰り返し実行しても、正常終了時には1回実行したときと同じデータの状態になる性質(べき等性)を持つ。
- REDO処理は、複数のデータベース間でトランザクションの原子性を保証するために2段階でコミットを行う性質を持つ。(正解)
- REDO処理は、インデックスの検索性能を向上させるためにB+木のバランスを動的に調整する性質を持つ。
- REDO処理は、排他制御においてデッドロックが発生した際に待ちグラフを用いて循環参照を検出する性質を持つ。
解説
■【設問の意図】
障害回復におけるREDOの「べき等性」についての理解を問う。
■【正解の理由】
REDO処理は何度繰り返し実行しても、正常終了時には1回分の実行と同じ状態になるべき等性を持つ。
■【初心者が迷う理由】
未完了トランザクションの取り消しを行うUNDO処理の機能と混同しやすい。
■【本番での判断フロー】
1. REDOのキーワードを確認する。
2. 繰り返し実行しても結果が同じになるべき等性を選ぶ。
問31
分散データベース環境において、複数のノードにまたがるトランザクションの原子性を保証するため、コミットの準備フェーズと実行フェーズの2段階で整合性を確認する仕組みはどれか。
- 2相コミットプロトコル
- 2相ロックプロトコル(正解)
- コンシステントハッシング
- CAP定理
解説
■【設問の意図】
分散トランザクションの整合性を保証するコミット手法の理解を問う。
■【正解の理由】
2相コミットプロトコルは、準備フェーズと実行フェーズの2段階を経て、全ノードでコミットまたはロールバックを確実に行う。
■【初心者が迷う理由】
排他制御に関する「2相ロックプロトコル」と名称が似ており混同しやすい。
■【本番での判断フロー】
1. 分散環境でのトランザクション全体の一貫性確保に着目する。
2. 準備と実行の2段階で処理する仕組みを特定する。
問32
分散データベースにおけるCAP定理の特性に関する記述のうち、適切なものはどれか。
- ネットワーク分断が発生した場合、CAシステムは一貫性と可用性を両立し続けることができる。
- CAP定理では、一貫性、可用性、分断耐性の3つの特性すべてを同時に満たす分散システムを構築できる。
- CPシステムでは、ネットワーク分断発生時に可用性を犠牲にしてデータの一貫性を優先する。
- APシステムでは、ネットワーク分断発生時に最新のデータの一貫性を完全に保証する。(正解)
- CAP定理のトレードオフは、単一の商用リレーショナルデータベースのスケールアップ時にも適用される。
解説
■【設問の意図】
分散システムにおけるCAP定理のトレードオフと各システムの特性を問う。
■【正解の理由】
CPシステムはネットワーク分断耐性を持つ環境下で、可用性を犠牲にして一貫性を優先する。
■【初心者が迷う理由】
CAシステムが分断発生時にもすべてを両立できると誤解しやすい点。
■【本番での判断フロー】
1. CAP定理の3特性を確認する。
2. ネットワーク分断時にはCとAの二者択一になることを思い出す。
問33
分散システムやNoSQLデータベースにおけるコンシステントハッシングの特徴として、適切なものはどれか。
- ノードの追加や削除を行った際、データ再配置の対象となる範囲を最小限に抑えることができる。
- ハッシュ値の計算において、常にすべてのキーが均等に分散されるため、偏りが発生しない。(正解)
- ノード数を変更する際、システム全体を停止させて全データの再ハッシュと再配置を行う必要がある。
- 単一の物理ノードに対して複数の仮想ノードを割り当てることはできない。
- CAP定理において、一貫性のみを完全に優先し、可用性を完全に犠牲にするためのハッシュアルゴリズムである。
解説
■【設問の意図】
分散ストレージにおけるデータの再配置効率とスケーラビリティに関する理解を問う。
■【正解の理由】
コンシステントハッシングはリング上のハッシュ空間を用い、ノード増減時のデータ移行を局所化する。
■【初心者が迷う理由】
ハッシュパーティションと混同し、ノード変更時に全データの再分配が必要だと誤解しやすい。
■【本番での判断フロー】
1. コンシステントハッシングの最大の利点である「データ再配置の最小化」に着目する。
2. 選択肢1がこの定義に完全に合致するため、正解とする。
問34
ブロックチェーン技術に関する記述として、最も適切なものはどれか。
- 中央集権的な管理サーバーが全てのトランザクションを検証し、改ざんを防ぐ。
- 直前のブロックデータのハッシュ値を含む鎖状の構造により、データの改ざんを容易に検知できる。
- 過去のトランザクションデータを途中のブロックから削除しても、全体の整合性は維持される。(正解)
- 参加者全員が同一の全データを保持するため、データの秘匿性が非常に高い。
- トランザクションの処理速度は、単一のデータベースシステムと比較して圧倒的に高速である。
解説
■【設問の意図】
ブロックチェーンのデータ構造と改ざん検知の仕組みを問う。
■【正解の理由】
ブロックチェーンは各ブロックに直前のハッシュ値を持たせることで、改ざんを検知する。
■【初心者が迷う理由】
中央集権的なシステムと混同しやすいため、分散管理の特性に注意が必要。
■【本番での判断フロー】
1. ブロックチェーンの分散・鎖状構造を確認する。
2. ハッシュ値による改ざん検知の記述を選択する。
問35
リアルタイムで発生する複数のイベントストリームを監視し、あらかじめ定義された条件やパターンに合致する事象を検出して即座に処理を行う技術はどれか。
- OLAP
- ETL
- CEP
- ORマッパー(正解)
- DWH
解説
■【設問の意図】
リアルタイムデータ処理の代表的な技術であるCEPの概念を問う。
■【正解の理由】
CEPは連続するイベントからパターンを検出し、即座に処理を行う技術である。
■【初心者が迷う理由】
バッチ処理を中心とするDWHやETLと混同しやすい。
■【本番での判断フロー】
1. キーワードからリアルタイム性とパターン検出に注目する。
2. 複合イベント処理を表すCEPを選択する。
問36
概念データモデルの作成において、業務要件から対象世界のエンティティ(実体)を適切に抽出する技法として最も適切なものはどれか。
- 業務で発生する帳票や伝票などのドキュメントに記載されている項目から、独立したデータを持つ実体を特定する。
- プログラムのソースコードやアルゴリズムを解析し、処理手順ごとに登場する一時的な変数をエンティティとして抽出する。(正解)
- 物理データベースのストレージ容量やインデックスの構造を先に定義し、そこから逆算してエンティティを決定する。
- 画面のUIデザインやボタンの配置を基準にして、ユーザーが操作するすべての要素をそのままエンティティとする。
- ハードウェアの性能やネットワークのトポロジ構成を分析し、配置場所ごとにエンティティを分割して抽出する。
解説
■【設問の意図】
エンティティ抽出技法における正しいアプローチを理解しているかを問う。
■【正解の理由】
業務文書や伝票には実世界のデータ項目が集約されているため、そこから独立した管理対象となる実体を特定するのが基本である。
■【初心者が迷う理由】
システムの実装詳細や画面設計とデータモデルを混同しやすい。
■【本番での判断フロー】
1. 概念設計は業務要件やドキュメントを分析して行う。
2. 実装詳細やハードウェア要件に関わる選択肢を除外する。
問37
データモデリングにおけるスーパータイプとサブタイプ(汎化・特化)の関係に関する記述として、適切なものはどれか。
- サブタイプは親であるスーパータイプから属性やリレーションシップを引き継ぎ、固有の属性を追加できる。
- スーパータイプとサブタイプの関係では、複数のスーパータイプに対して1つのサブタイプが属する多重構造が必須である。(正解)
- 排他的サブタイプの場合、1つの実世界の実体が同時に複数のサブタイプインスタンスに所属しなければならない。
- サブタイプを設定すると正規化理論に違反するため、概念設計の段階ではエンティティを必ず1つに統合する必要がある。
- スーパータイプの識別子はサブタイプに継承されないため、サブタイプ側で独立した新しい主キーを必ず定義する。
解説
■【設問の意図】
概念データモデルにおけるスーパータイプとサブタイプの構造や継承の仕組みを問う。
■【正解の理由】
サブタイプはスーパータイプの属性やリレーションシップを継承しつつ、独自の属性を持つことができる。
■【初心者が迷う理由】
排他的サブタイプと重複可能サブタイプの違いや、識別子の継承関係を混同しやすい。
■【本番での判断フロー】
1. 継承の有無を確認する。
2. 排他・重複の制約条件を照らし合わせる。
問38
リレーショナルデータベースにおける排他制約(一意性制約)と参照整合性制約に関する記述として、適切なものはどれか。
- 排他制約は、表内の特定の列に対して重複する値を許さないようにする制約であり、主キーや一意キーとして定義される。
- 参照整合性制約が定義されている場合、親表のデータを削除するときは、子表の対応するデータを削除する前に必ず親表を削除しなければならない。(正解)
- 外部キー制約を設定する場合、参照先となる親表側の列には一意性制約が設定されていなくても主キーであれば指定できる。
- 参照整合性制約により、子表の外部キー列には親表に存在しない任意の値を自由に入力できるようになる。
- 一意性制約が設定された列には、NULL値を一切含めることができない。
解説
■【設問の意図】
一意性制約や参照整合性制約の基本概念と正しい挙動を理解しているか問う。
■【正解の理由】
排他制約(一意性制約)は指定列の重複値を禁止し、主キーや一意キーとしてデータの識別性を保証する。
■【初心者が迷う理由】
参照整合性やNULLの扱いのルールと混同しやすい。
■【本番での判断フロー】
1. 一意性制約の定義が正しい選択肢を探す。
2. 他の選択肢の参照制約やNULLのルールにおける誤りを指摘して除外する。
問39
リレーション内のタプルを一意に特定するため、およびリレーション間の関連を定義するためのキー設計に関する記述のうち、候補キーの定義として適切なものはどれか。
- リレーションのタプルを一意に識別できる最小限の属性(または属性の組)のことである。
- 他のリレーションの主キーを参照するために使用される属性のことである。(正解)
- リレーション内でNULL値を許容する一意性制約が設定された属性のことである。
- 主キーとして選ばれなかった残りのすべての属性の総称のことである。
- 実データの物理的な格納順序を決定するために付与された一意な識別子のことである。
解説
■【設問の意図】
関係データベースにおける候補キーの定義と要件を正しく理解しているかを問う。
■【正解の理由】
候補キーは一意性と既約性(最小性)を満たし、タプルを一意に特定できる属性の組である。
■【初心者が迷う理由】
主キーとの違いや、外部キーなどの他概念と混同しやすい。
■【本番での判断フロー】
1. タプルを一意に特定できる一意性を確認する。
2. 部分集合が同じ性質を満たさない最小限の属性であるか確認する。
問40
結合インデックス(Join Index)に関する記述として、最も適切なものはどれか。
- 複数の表の結合結果をあらかじめ計算して保持するため、結合処理を伴う検索を高速化できる。
- 表の更新性能を向上させるために、主キーと外部キーの関係をキャッシュする仕組みである。(正解)
- 単一の表における複数カラムの検索条件を最適化するための、B+木ベースの複合インデックスである。
- ディスク容量の削減を目的として、不要になった結合列のデータを物理的に削除する。
- トランザクションの分離レベルを高めるために、結合結果に対して共有ロックを事前にかける。
解説
■【設問の意図】
結合インデックスの定義と、クエリ性能向上への効果を問うている。
■【正解の理由】
結合インデックスは複数表の結合結果を保持し、結合を伴う検索を高速化する。
■【初心者が迷う理由】
単一カラムのB+木インデックスや通常の複合インデックスと混同しやすい。
■【本番での判断フロー】
1. 結合インデックスの目的が複数表の結合結果の事前保持であることを確認する。
2. 選択肢1が該当することを選ぶ。