フラッシュバック(Flashback Query / AS OF)難易度 標準無料
誤った更新の内容を確認するため、表 hr.emp を 1時間前の状態で参照だけしたい(本番データは変更しない)。次を実行した。
SQL> SELECT empno, sal 2 FROM hr.emp 3 AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR) 4 WHERE deptno = 10;
この Flashback Query(AS OF)の説明として最も適切なものを選べ。(単一選択)
- AUNDO を使って指定時点のコミット済み内容を参照するだけで、本番データは変更されない。UNDO が不足すれば
ORA-01555、対象時点以降に表定義が変わっていればORA-01466になり得る - B
AS OF TIMESTAMPは表を実際に1時間前の状態へ巻き戻すため、実行後は現在のデータが失われる - CFlashback Query はフラッシュバックログ(
FLASHBACK ON)を使うため、有効化していないと使えない - DUNDO の残量に関係なく、いくらでも過去の時点を正確に再現できる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
SELECT ... AS OF TIMESTAMP/SCN(Flashback Query)は、UNDO データを使って、指定した過去時点でコミット済みだった内容を読み取る参照専用の機能である。
表の現在のデータは一切変更しない。
前提・失敗ケース:
- 過去イメージの再構成に十分な UNDOが残っている必要がある。足りなければ
ORA-01555(snapshot too old)になる。 - 参照しようとする時点以降に対象表の定義が変わった(
ALTER TABLE等の DDL)場合は、ORA-01466(データを読み取れません: 表定義が変更されました)になり得る。
結果を INSERT ... SELECT ... AS OF ... で救出したり、Flashback Version Query(VERSIONS BETWEEN)で変更履歴を追ったりと組み合わせられる。あくまで読み取りで、表を巻き戻すのは FLASHBACK TABLE(別機能)。
- B
AS OFは参照専用で表を巻き戻さない。表を巻き戻すのはFLASHBACK TABLE ... TO TIMESTAMP(別機能)。 - CFlashback Query が使うのはUNDOであって、フラッシュバックログ(Flashback Database 用)ではない。
FLASHBACK ONは不要。 - DUNDO に依存するため、保持期間を越えて過去イメージが失効していれば
ORA-01555で再現できない。無制限ではない(長期履歴は Flashback Data Archive が必要)。
ひっかけ: Flashback Query(AS OF・読むだけ)と Flashback Table(TO TIMESTAMP・表を巻き戻す)の混同。
前者は本番を変えない参照。UNDO 依存なので不足で
ORA-01555、対象時点以降の DDL で ORA-01466 という失敗条件も要注意。コマンド例と想定される挙動(未実行)
十分な UNDO があれば1時間前のコミット済み値を返す。 UNDO 不足 → ORA-01555。 対象時点以降に表の構造を変える DDL(列の削除/変更・MOVE・パーティション削除・TRUNCATE・制約追加など)を実行していると、それ以前の UNDO は無効化されるため ORA-01466(table definition has changed)となる。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)