UNDO(RETENTION GUARANTEE)難易度 高無料
自動 UNDO 管理(UNDO_MANAGEMENT=AUTO)の DB で、UNDO 表領域に RETENTION GUARANTEE が設定されている(固定サイズ・AUTOEXTEND OFF)。長時間のレポート問合せが走っている最中に、大量の DML を行うトランザクションが UNDO 領域を要求した。このとき起こり得る挙動として最も適切なものを選べ。(単一選択)
- A未失効(unexpired)の UNDO を上書きしてでも DML を優先し、レポート問合せ側が
ORA-01555(スナップショットが古すぎます)になる - B未失効の UNDO は
UNDO_RETENTION期間まで保護されるため上書きできず、UNDO 領域が不足して DML 側がORA-30036で失敗する - CUNDO 表領域が
AUTOEXTEND OFFでも自動的に拡張され、両方とも成功する - D
RETENTION GUARANTEEは読み取り一貫性に無関係で、DML・問合せの挙動は変わらない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B✓Gold監修
解説
RETENTION GUARANTEE は「失効していない(unexpired)UNDO を UNDO_RETENTION 期間が経過するまで絶対に上書きさせない」設定である。
これにより、長時間の問合せが必要とする読み取り一貫性用の UNDO が確実に保護され、ORA-01555(snapshot too old)を防げる。
そのトレードオフとして、UNDO 領域が逼迫し、かつ保護対象(未失効)の UNDO を上書きできないと、
新しい DML 側が UNDO 領域を確保できず失敗する。固定サイズで AUTOEXTEND OFF なので拡張もできず、
典型的には ORA-30036(UNDO 表領域内でセグメントを拡張できません)になる。
つまり「問合せの一貫性を守る代わりに、領域不足時は DML が犠牲になる」。
- Aそれは
RETENTION NOGUARANTEE(既定)の挙動。保証ありでは未失効 UNDO を上書きしないので、ORA-01555でなく DML 側がエラーになる。優先順位が逆。 - C
AUTOEXTEND OFFなら自動拡張はしない。両方成功は保証されない。 - D
RETENTION GUARANTEEはまさに読み取り一貫性(長時間問合せの UNDO 保護)のための設定であり、無関係ではない。
ひっかけ: 「保証ありにすればすべて安全」ではない。守るもの(問合せの一貫性)と犠牲になるもの(領域不足時の DML)がトレードオフ。
ORA-01555(問合せ側)と ORA-30036(DML 側)のどちらが出るかが、GUARANTEE / NOGUARANTEE で入れ替わる点が核心。実機確認の答え合わせ
ORA-30036: UNDO表領域'UNDOTBS1'内でセグメントを拡張できません。 (英語:ORA-30036: unable to extend segment by N in undo tablespace 'UNDOTBS1')
✓Gold 保有者による書き下ろし解説・実機で検証済