ORACLE Master Gold 無料サンプル

ORACLE Master Gold·1Z0-083ORACLE Master Gold 保有者の監修問題を無料サンプルに収録

登録なしで解ける良問。「正解・解説を見る」で解説とひっかけが開きます。

※ サンプルは実際の例題です。各問の「正解・解説を見る」を開くと、正解・詳細解説・ひっかけが表示されます。 全 30 問のうち 30 問を無料公開しています。
Q1マルチテナント(共通ユーザー)難易度 標準無料

パラメータ COMMON_USER_PREFIX は既定値(C##)のまま、CDB$ROOTSYSDBA で接続している。次の文を順に実行したとき、結果として正しいものを選べ。

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

SQL> CREATE USER hr_admin IDENTIFIED BY pw CONTAINER=ALL;   -- 文(1)
SQL> CREATE USER c##ops   IDENTIFIED BY pw CONTAINER=ALL;   -- 文(2)
  1. A文(1)・文(2) ともに成功する
  2. B文(1) は ORA-65096 で失敗し、文(2) は成功する
  3. C文(1) は成功し、文(2) は「プレフィックスが不正」で失敗する
  4. D文(1)・文(2) ともに失敗する(CONTAINER=ALL は root では使えない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

マルチテナント環境では、CDB$ROOTCONTAINER=ALL(または root 接続時の既定)として作る 共通ユーザー(common user)の名前は、COMMON_USER_PREFIX で定義されたプレフィックスで始まらなければならない。 既定値は C## である。

文(1) の hr_adminC## で始まらないため、共通ユーザーとして作成できず失敗する。 文(2) の c##opsC##(大文字小文字は不問)で始まるため有効な共通ユーザー名として成功する。

なお、プレフィックス規則が課されるのは共通ユーザーのみ。特定の PDB に接続して CONTAINER=CURRENT で作るローカルユーザーには C## プレフィックスは不要(むしろ付けてはならない)。

各誤答が違う理由
  • A文(1) は C## プレフィックスを欠くため成功しない。両方成功はあり得ない。
  • C正誤が逆。c##ops は正しいプレフィックスを持つので失敗するのは文(1) の方。
  • Droot で CONTAINER=ALL を使うのは共通ユーザー作成の正規手段であり、それ自体はエラーではない。
ひっかけ:C## は大文字でないとダメ」と思い込む。プレフィックス照合は大文字小文字を区別しない(c## でも可)。 また「root だから CONTAINER=ALL が要らない/使えない」という思い込み。root では CONTAINER 既定が ALL だが明示も可。
コマンド例と想定される挙動(未実行)
ORA-65096: 共通ユーザー名またはロール名が無効です。
(英語:ORA-65096: invalid common user or role name)
有資格者(著者)による書き下ろし解説
Q2マルチテナント(プラグイン違反)難易度 高無料

別の CDB から unplug した PDB を、XML 記述子を使ってこの CDB にプラグインした。プラグイン直後の PDB は MOUNTED 状態である。次に以下を実行した。

SQL> ALTER PLUGGABLE DATABASE sales OPEN;

Warning: PDB altered with errors.

SQL> SELECT name, open_mode, restricted FROM v$pdbs WHERE name='SALES';

プラグイン時に互換性に関わる不一致(例:オプション/コンポーネントの差異)が PDB_PLUG_IN_VIOLATIONSERROR として記録されていた。OPEN の結果として最も適切なものを選べ。(単一選択)

  1. AOPENORA-xxxxx で失敗し、PDB は MOUNTED のまま
  2. BPDB は READ WRITE かつ RESTRICTED=YES で開く
  3. CPDB は READ WRITE かつ RESTRICTED=NO で開く(ERROR は無視される)
  4. DPDB は READ ONLY で開く
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

PDB をプラグイン(またはクローン/作成)した後、Oracle は互換性チェックを行い、問題があれば PDB_PLUG_IN_VIOLATIONS ビューに記録する。 違反には ERROR(致命的)WARNING(警告)がある。

WARNING なら PDB は通常どおり(RESTRICTED=NO)開き、ERROR なら開くものの RESTRICTED モードへ降格する。この対比がこの設問の論点である。

ERROR レベルの違反が残っている状態で OPEN すると、OPEN 自体は成功して Warning: PDB altered with errors. が表示され、PDB は RESTRICTED モード(RESTRICTED=YES)で開く。これは「管理者に未解決の問題があることを気付かせ、修正させる」ための安全装置である。 一般ユーザーは RESTRICTED SESSION 権限を持たない限り接続できない。 一方 WARNING レベルの違反はアラートログに記録されるだけで、PDB の OPEN は通常どおり成功し RESTRICTED=NO のままである。

管理者は PDB_PLUG_IN_VIOLATIONS を確認して原因を解消し、いったん CLOSE → 再 OPEN すると、違反が消えていれば RESTRICTED=NO の通常モードで開けるようになる。

各誤答が違う理由
  • AERROR レベルの違反があっても OPEN 自体は成功する(違反の記録と OPEN の失敗は別物)。文も "Warning: PDB altered with errors." を返しており、MOUNTED のままではない。
  • CERROR レベルの違反が残っている以上、通常モード(RESTRICTED=NO)では開かない。RESTRICTED=NO で開くのは違反が WARNING どまりの場合である。
  • DREAD ONLYOPEN READ ONLY を明示した場合の状態。違反による自動降格は READ ONLY ではなく RESTRICTED モード。
ひっかけ: 「違反があれば OPEN できない(=A)」あるいは「違反があっても普通に開く(=C)」と二択で誤りがち。 正解は開くが RESTRICTED に降格という中間挙動。ERRORWARNING の取り違え(WARNING なら降格しない)と、RESTRICTEDREAD ONLY の混同(B vs D)も頻出。
コマンド例と想定される挙動(未実行)
ALTER PLUGGABLE DATABASE sales OPEN;
→ Warning: PDB altered with errors.

SELECT name, open_mode, restricted FROM v$pdbs WHERE name='SALES';
→ SALES / READ WRITE / YES
解消後の再OPENで restricted=NO に戻る。
有資格者(著者)による書き下ろし解説
Q3RMAN(増分バックアップ種別)難易度 高無料

あるデータベースで、日曜にレベル0、その後 月〜土に毎日 RMAN で次のコマンドを実行している。

RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;

CUMULATIVE は指定していない。ブロック変更トラッキングの有無は問わない。)金曜のこのバックアップが対象とするブロックの説明として正しいものを選べ。

  1. A直近のレベル0(日曜)以降に変更された全ブロック
  2. B直近のレベル0 または レベル1 のうち最も新しいバックアップ(=木曜のレベル1)以降に変更されたブロック
  3. Cデータベース全体の全ブロック(レベル1 は実質フルバックアップ)
  4. D前回のレベル1(木曜)以降かつレベル0 よりに変更されたブロックのみ
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

BACKUP INCREMENTAL LEVEL 1 は、CUMULATIVE を付けない場合差分(DIFFERENTIAL)が既定である。

  • 差分(DIFFERENTIAL・既定): 直近のレベル0 またはレベル1 のいずれか最も新しいバックアップ以降に変更されたブロックをバックアップする。本問では木曜のレベル1 以降の変更分。
  • 累積(CUMULATIVE): 直近のレベル0以降に変更されたブロックをバックアップする(途中のレベル1 は無視)。リストアは速いがバックアップは大きくなる。

つまり「差分はバックアップが小さくリストアが遅い/累積はバックアップが大きくリストアが速い」というトレードオフ。金曜の差分レベル1 は、最新のレベル1(木曜)以降の変更ブロックだけを取る。

各誤答が違う理由
  • Aそれは CUMULATIVE(累積)の説明。本問は CUMULATIVE 未指定=差分なので、基準はレベル0 ではなく直近のレベル1。
  • Cレベル1 はフルバックアップではない。変更ブロックのみを取る。フル相当はレベル0。
  • D「レベル0 より前」という限定は誤り。差分は単純に「直近の親バックアップ(L0/L1 のうち新しい方)以降の変更分」。
ひっかけ: 差分(DIFFERENTIAL)と累積(CUMULATIVE)の基準点の取り違え。 既定は差分(=直近の L0 または L1 が基準)であって、レベル0 基準は累積。 「レベル1=必ずフル直後からの全変更」と誤解しやすい。
有資格者(著者)による書き下ろし解説
Q4RMAN(クリティカル表領域のリカバリ)難易度 高無料

ARCHIVELOG モードで稼働中(OPEN)の単一インスタンス DB で、メディア障害により SYSTEM 表領域のデータファイル1本が破損した。RMAN でリストア&リカバリしたい。正しい手順・前提として最も適切なものを選べ。(単一選択)

  1. ADB を OPEN のまま、当該データファイルだけ OFFLINE にして RESTORE/RECOVER DATAFILE でオンラインリカバリできる
  2. BDB を SHUTDOWNSTARTUP MOUNT し、MOUNT 状態で RESTORE/RECOVER してから OPEN する必要がある
  3. CSYSTEM 表領域は RESTORE 不可。新規 DB を作って Data Pump で論理移行するしかない
  4. DNOARCHIVELOG に切り替えてからでないとリカバリできない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

データファイルのリカバリ手順は、それがクリティカル(critical)か否かで分かれる。

  • クリティカルなファイル= SYSTEM 表領域、および現在アクティブな UNDO 表領域のデータファイル。これらはデータベースが OPEN のままではオフラインにできない。よってリカバリには SHUTDOWNSTARTUP MOUNT でいったん閉じ、MOUNT 状態でリストア&リカバリし、その後 ALTER DATABASE OPEN する必要がある。
  • 非クリティカル(通常のユーザー表領域)のデータファイルは、DB を OPEN のまま当該データファイルだけ OFFLINE にしてオンラインリカバリできる。

本問は SYSTEM 表領域=クリティカルなので、MOUNT 状態でのリカバリが必要。ARCHIVELOG モードなのでアーカイブREDO を適用して障害直前まで完全リカバリできる。

各誤答が違う理由
  • ASYSTEM 表領域のデータファイルは DB が OPEN の間オフラインにできないため、オンラインリカバリ不可。ORA-01541 系(system tablespace は offline にできない)になる。これは非クリティカル表領域の手順。
  • CRMAN でリストア&リカバリ可能。論理移行で作り直す必要はない。
  • DARCHIVELOG のままで完全リカバリできる。むしろ NOARCHIVELOG にするとアーカイブが使えず復旧能力が落ちる(逆効果)。
ひっかけ: 「OPEN のままオンラインで全部直せる」という思い込み(A)。 オンラインリカバリは非クリティカル表領域だけ。SYSTEM とアクティブ UNDO は MOUNT が必須という線引きが核心。
コマンド例と想定される挙動(未実行)
ORA-01541: システム表領域はオフラインにできません。必要であればリカバリを実行してください。
(英語:ORA-01541: system tablespace cannot be brought offline; shut down if necessary)
有資格者(著者)による書き下ろし解説
Q5フラッシュバック(Flashback Table)難易度 標準無料

誤った UPDATE を 10 分前のコミット前状態に戻したい。UNDO は十分残っており、現在は OPEN 状態。次を実行した。

SQL> FLASHBACK TABLE hr.emp
  2    TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
FLASHBACK TABLE hr.emp
*
ERROR at line 1:
ORA-08189: テーブルに行移動が使用可能ではないため、フラッシュバックできません

このエラーを解消し、目的を達成するために必要な操作として正しいものを選べ。

  1. AALTER TABLE hr.emp ENABLE ROW MOVEMENT; を実行してから再度 FLASHBACK TABLE ... TO TIMESTAMP を実行する
  2. BALTER TABLE hr.emp ENABLE FLASHBACK; を実行してから再実行する
  3. Cデータベースを FLASHBACK DATABASE 可能にするため ALTER DATABASE FLASHBACK ON; を実行する
  4. D表を DROP して FLASHBACK TABLE hr.emp TO BEFORE DROP; で戻す
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A有資格者監修

解説

FLASHBACK TABLE ... TO TIMESTAMP / TO SCN は、UNDO データを使って表の内容を過去の時点へ巻き戻す機能である。 この処理は内部的に行の rowid が変わり得る(行の再配置を伴う)ため、対象表で行移動(row movement)が有効になっている必要がある。

無効のまま実行すると ORA-08189(row movement is not enabled)になる。 したがって ALTER TABLE hr.emp ENABLE ROW MOVEMENT; を実行してから FLASHBACK TABLE ... TO TIMESTAMP を再実行すればよい。

各誤答が違う理由
  • BENABLE FLASHBACK という構文の ALTER TABLE 句は存在しない(表レベルで必要なのは ROW MOVEMENT)。
  • CALTER DATABASE FLASHBACK ONFlashback Database(DB 全体を巻き戻す=フラッシュバックログ/FRA が必要)の前提であって、本件の FLASHBACK TABLE ... TO TIMESTAMP(UNDO ベース)には不要。別機能を混同している。
  • DTO BEFORE DROP は「DROP した表」をリサイクルビンから復元する機能。本件は表を消したいのではなく UPDATE を戻したいので、わざわざ DROP するのは誤り(データも壊す)。
ひっかけ: 3種のフラッシュバックの混同。 Flashback Table(TO TIMESTAMP/SCN)=UNDO+row movementFlashback Drop(TO BEFORE DROP)=リサイクルビンFlashback Database=フラッシュバックログ/FRA・DB全体。それぞれ前提(UNDO / recyclebin / flashback logs)が違う。
有資格者(著者)による書き下ろし解説
Q6UNDO(RETENTION GUARANTEE)難易度 高無料

自動 UNDO 管理(UNDO_MANAGEMENT=AUTO)の DB で、UNDO 表領域に RETENTION GUARANTEE が設定されている(固定サイズ・AUTOEXTEND OFF)。長時間のレポート問合せが走っている最中に、大量の DML を行うトランザクションが UNDO 領域を要求した。このとき起こり得る挙動として最も適切なものを選べ。(単一選択)

  1. A未失効(unexpired)の UNDO を上書きしてでも DML を優先し、レポート問合せ側が ORA-01555(スナップショットが古すぎます)になる
  2. B未失効の UNDO は UNDO_RETENTION 期間まで保護されるため上書きできず、UNDO 領域が不足して DML 側が ORA-30036 で失敗する
  3. CUNDO 表領域が AUTOEXTEND OFF でも自動的に拡張され、両方とも成功する
  4. DRETENTION GUARANTEE は読み取り一貫性に無関係で、DML・問合せの挙動は変わらない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

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 側がエラーになる。優先順位が逆。
  • CAUTOEXTEND OFF なら自動拡張はしない。両方成功は保証されない。
  • DRETENTION 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')
有資格者(著者)による書き下ろし解説
Q7領域管理(セグメント縮小 SHRINK)難易度 標準無料

大量削除でハイウォーターマーク(HWM)以下に空きが散在した表 hr.bigt(自動セグメント領域管理=ASSM の表領域上)を、オンラインで縮小したい。次を実行した。

SQL> ALTER TABLE hr.bigt SHRINK SPACE;
ALTER TABLE hr.bigt SHRINK SPACE
*
ERROR at line 1:
ORA-10636: ROW MOVEMENTが使用可能ではありません

このエラーの正しい解消法を選べ。(単一選択)

  1. AALTER TABLE hr.bigt ENABLE ROW MOVEMENT; を実行してから SHRINK SPACE を再実行する
  2. B表領域を手動セグメント領域管理(MSSM)に変更してから再実行する
  3. CALTER TABLE hr.bigt DEALLOCATE UNUSED; に置き換えれば ROW MOVEMENT 無しで HWM 以下の空きを詰められる
  4. DSHRINK SPACENOLOGGING 表でしか使えないため、表を NOLOGGING にする
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A有資格者監修

解説

ALTER TABLE ... SHRINK SPACE は、セグメント内の行を前方に詰め直して空きブロックを解放し、HWM を引き下げる操作である。 行を物理的に移動させる(rowid が変わる)ため、対象表で行移動(row movement)が有効であることが前提となる。 無効だと ORA-10636(ROW MOVEMENT is not enabled)になる。

よって ALTER TABLE hr.bigt ENABLE ROW MOVEMENT; を実行してから SHRINK SPACE を再実行すればよい。 なお SHRINK SPACEASSM の表領域でのみ使える(本問は ASSM で前提を満たす)。

各誤答が違う理由
  • B逆。SHRINK SPACEASSM が前提。MSSM に変えたら SHRINK SPACE は使えなくなる。エラー原因も領域管理方式ではなく row movement。
  • CDEALLOCATE UNUSEDHWM より上の未使用領域を解放するだけで、HWM 以下に散在する空きは詰められない(断片化は解消しない)。目的が違う。
  • DSHRINK SPACENOLOGGING は無関係。NOLOGGING 必須という制約はない。
ひっかけ: SHRINK SPACE(HWM 以下の断片を詰める・ASSM+row movement 必須)と DEALLOCATE UNUSED(HWM 以上の未使用を返すだけ)の混同(C)。 また ORA-10636(SHRINK)と ORA-08189(FLASHBACK TABLE)はどちらも row movement 起因だがエラー番号が異なる点に注意。
有資格者(著者)による書き下ろし解説
Q8権限(REVOKE の連鎖)難易度 高無料

次の順で権限を付与した後、USER_A から権限を REVOKE する。挙動として正しいものを選べ。(単一選択)

-- ① システム権限(管理オプション付き)
GRANT CREATE TABLE TO user_a WITH ADMIN OPTION;
-- user_a が user_b へ再付与
CONNECT user_a/pw
GRANT CREATE TABLE TO user_b;

-- ② オブジェクト権限(付与オプション付き)
CONNECT scott/pw
GRANT SELECT ON scott.emp TO user_a WITH GRANT OPTION;
-- user_a が user_b へ再付与
CONNECT user_a/pw
GRANT SELECT ON scott.emp TO user_b;

-- 取消
CONNECT system/pw
REVOKE CREATE TABLE FROM user_a;            -- 取消(1)
CONNECT scott/pw
REVOKE SELECT ON scott.emp FROM user_a;     -- 取消(2)
  1. A取消(1) も取消(2) も user_b の権限まで連鎖的に取り消される
  2. B取消(1)(システム権限)では user_bCREATE TABLE残るが、取消(2)(オブジェクト権限)では user_bSELECT連鎖的に取り消される
  3. C取消(1)(システム権限)では user_b も連鎖取消され、取消(2)(オブジェクト権限)では user_b は残る
  4. D取消(1) も取消(2) も user_b の権限はどちらも残る(連鎖しない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

システム権限オブジェクト権限で、再付与した相手への取消の連鎖(cascade)挙動が異なる。

  • システム権限(WITH ADMIN OPTION): 付与者から取り消しても、その付与者が他者へ与えた権限は連鎖して取り消されない(NO CASCADE)。 よって取消(1) で user_aCREATE TABLE は消えるが、user_bCREATE TABLE残る
  • オブジェクト権限(WITH GRANT OPTION): 付与者から取り消すと、その付与者が GRANT OPTION を使って他者へ与えた権限も連鎖して取り消される(CASCADE)。 よって取消(2) で user_aSELECT が消えると、user_bSELECT連鎖して消える

この「システム権限は連鎖しない/オブジェクト権限は連鎖する」という非対称が本問の核心。

各誤答が違う理由
  • Aシステム権限(取消1)は連鎖しないので user_bCREATE TABLE は残る。両方連鎖は誤り。
  • C連鎖の向きが逆。連鎖するのはオブジェクト権限の方で、システム権限は連鎖しない。
  • Dオブジェクト権限(取消2)は連鎖するので user_bSELECT は残らない。両方残るは誤り。
ひっかけ: WITH ADMIN OPTION(システム権限)と WITH GRANT OPTION(オブジェクト権限)を「どちらも再付与可・取消も同じ」と思い込む。 再付与できる点は同じでも、取消時の連鎖はオブジェクト権限だけ。さらに付与オプションの名称自体も別物(ADMIN ↔ GRANT)。
有資格者(著者)による書き下ろし解説
Q9マルチテナント(PDB リロケート)難易度 高無料

本番 CDB(CDB1)で稼働中の PDB SALES を、ほぼ無停止で別の CDB(CDB2)へ移設したい。CDB2 から CDB1 へのデータベースリンク cdb1_linkCDB1 の共通ユーザーを指す)を作成済みで、CDB2 側で次を実行した。

-- CDB2 の CDB$ROOT に接続して実行
SQL> CREATE PLUGGABLE DATABASE sales
  2    FROM sales@cdb1_link
  3    RELOCATE;
Pluggable database created.

SQL> SELECT open_mode FROM v$pdbs WHERE name='SALES';

この RELOCATE 操作の前提と挙動として最も適切なものを選べ。(単一選択)

  1. A作成直後の SALESCDB2READ WRITE になっており、即座に利用できる。移設はこの時点で完了している
  2. B作成直後の SALESCDB2MOUNTED であり、ALTER PLUGGABLE DATABASE sales OPEN; を実行した時点で移設が確定し、CDB1 側の元 PDB はクローズされる。前提として両 CDB は ローカル UNDO モードかつソース CDB は ARCHIVELOG モードである必要がある
  3. CRELOCATE はソース PDB を READ ONLY にしてからでないと実行できず、移設中はソース側のユーザーは更新できない
  4. DRELOCATE は共有 UNDO モードでのみ使用可能で、ローカル UNDO 環境では ORA-65114 になる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

CREATE PLUGGABLE DATABASE ... FROM <pdb>@<link> RELOCATE は、 PDB を別の CDB へほぼ無停止で移設(relocate)するための構文である。リモートの「ホットクローン」基盤の上に成り立つ。

前提条件(これが満たされないと実行できない):

  • ローカル UNDO モード:ソース PDB がオープン(READ WRITE)のまま移設・クローンするには、CDB がローカル UNDO(local undo)である必要がある。共有 UNDO ではホット(オンライン)操作はできない。
  • ソース CDB が ARCHIVELOG モード:オープン中の PDB を一貫した状態でコピーするためにアーカイブ REDO が要る。

挙動の流れ:

  • ターゲット CDB2CREATE ... RELOCATE を実行すると、SALESMOUNTED 状態で作成される(まだオープンしていない)。この間、ソース CDB1 側の SALES は READ WRITE のまま稼働を続け、ユーザーは更新できる
  • ターゲットで ALTER PLUGGABLE DATABASE sales OPEN; を実行すると、移設が確定(finalize)する。差分が同期され、ソース側 SALESクローズされ、リスナーの接続転送によって既存接続が新しい場所へ引き継がれる(ダウンタイム最小)。
各誤答が違う理由
  • A作成直後は MOUNTED であって READ WRITE ではない。移設は OPEN で初めて確定する。「作成=完了」ではない。
  • Cそれはコールド(オフライン)クローンRELOCATE なしの単純クローン)の前提。RELOCATE/ホットクローンの主眼は「ソースを READ WRITE のまま」移すことにある。READ ONLY 化は不要。
  • D逆。ホット(オンライン)な RELOCATEローカル UNDO が前提で、共有 UNDO ではできない。共有 UNDO 必須という説明は誤り。
ひっかけ: 「作成した時点でもう使える(A)」という思い込みと、ローカル UNDO ⇄ 共有 UNDO の前提の取り違え(B vs D)。 オンライン操作(ホットクローン/リロケート/PDB のオンライン化)はローカル UNDO が前提。また「ソースを READ ONLY にする必要があるか」はコールドクローン(必要)とリロケート/ホットクローン(不要)で分かれる。
コマンド例と想定される挙動(未実行)
SELECT open_mode FROM v$pdbs WHERE name='SALES';
→ 作成直後は MOUNTED。
ALTER PLUGGABLE DATABASE sales OPEN; 後に READ WRITE となり、CDB1 側 SALES はクローズされる。
有資格者(著者)による書き下ろし解説
Q10マルチテナント(アプリケーションコンテナ)難易度 高無料

アプリケーションコンテナのアプリケーションルート(APPROOT)で、共通の表構造を持つアプリケーション HR_APP をバージョン 2.0 へアップグレードした。アプリケーション PDB は HRPDB1HRPDB2 の2つがある。

-- アプリケーションルート APPROOT に接続して実行
SQL> ALTER PLUGGABLE DATABASE APPLICATION hr_app
  2    BEGIN UPGRADE '1.0' TO '2.0';

SQL>  ... (新しい共通表 / 列 / シードデータの定義を実行) ...

SQL> ALTER PLUGGABLE DATABASE APPLICATION hr_app END UPGRADE;
Pluggable database altered.

この END UPGRADE 完了後、各アプリケーション PDB(HRPDB1 / HRPDB2)でアプリケーションの変更を反映させるために必要な操作として、最も適切なものを選べ。(単一選択)

  1. Aアプリケーションルートでアップグレードを完了した時点で、すべてのアプリケーション PDB に変更は自動的に反映されているため、追加操作は不要
  2. B各アプリケーション PDB に接続し、ALTER PLUGGABLE DATABASE APPLICATION hr_app SYNC; を実行する
  3. C各アプリケーション PDB を CLOSEOPEN し直せば、再オープン時に自動で同期される
  4. Dアプリケーションルートで ALTER PLUGGABLE DATABASE APPLICATION hr_app SYNC ALL PDBS; を1回実行すれば、全アプリケーション PDB が一括同期される
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

アプリケーションコンテナでは、アプリケーションルートでアプリケーションのインストール/アップグレード/パッチを行い(BEGIN INSTALL/UPGRADE/PATCHEND ... で囲む)、 その変更は各アプリケーション PDB で明示的に「同期(SYNC)」して初めて適用される。

同期は各アプリケーション PDB に接続して ALTER PLUGGABLE DATABASE APPLICATION hr_app SYNC; を実行する。 これによりその PDB が、ルートに記録されたアプリケーションの最新バージョン(ここでは 2.0)まで共通オブジェクト定義・シードデータを取り込む。

言い換えると、ルートでの END UPGRADE は「ルート側の正本を更新した」だけであり、各 PDB は SYNC するまで旧バージョンのまま動き続ける(段階的ロールアウトが可能)。

各誤答が違う理由
  • A自動反映されない。ルートのアップグレードと各 PDB への適用は分離されており、SYNC が必須。
  • CCLOSE/OPEN では同期されない。再オープンはアプリケーションの同期トリガーにはならない(必要なのは APPLICATION ... SYNC)。
  • DSYNC ALL PDBS のような「ルートから全 PDB を一括同期する」構文は標準の同期手段ではない。同期は各アプリケーション PDB 側で APPLICATION ... SYNC を実行するのが基本(コンテナ全体へ文を送る CONTAINERS/一括実行は別概念で、本問の正規解ではない)。
ひっかけ: 「ルートで終われば全 PDB に行き渡る(A)」という中央集権の思い込み。実際はルートで定義 → 各 PDB で SYNC して適用の二段構え。 これにより PDB ごとにアップグレード適用のタイミングをずらせる(=可用性管理)。SYNC を実行する場所が「ルート」か「各 PDB」かの取り違え(B vs D)も狙い。
有資格者(著者)による書き下ろし解説
Q11RMAN(ブロックメディアリカバリ BMR)難易度 高無料

ARCHIVELOG モードで OPEN 中の DB で、SELECT 実行中に ORA-01578(データブロック破損)が報告された。破損は1つのデータファイルの数ブロックに限定されている。V$DATABASE_BLOCK_CORRUPTION に該当ブロックが登録済みで、有効な全体(レベル0)バックアップとアーカイブ REDO が揃っている。次を実行する。

RMAN> RECOVER CORRUPTION LIST;

ブロックメディアリカバリ(BMR)の挙動・前提として正しいものを選べ。(単一選択)

  1. ABMR は破損ブロックを含むデータファイル全体をオフラインにしてからリストア&リカバリする。その間そのデータファイルにはアクセスできない
  2. BBMR は破損したブロックだけを復旧し、データファイル(および DB)はオンラインのまま。残りの正常なブロックには引き続きアクセスできる。ARCHIVELOG モードが前提で、復旧には全体/レベル0 バックアップ等を使い、増分レベル1 バックアップは BMR には使えない
  3. CBMR は NOARCHIVELOG モードでも、直近のレベル1 増分バックアップだけで破損ブロックを復旧できる
  4. DBMR を行うには DB を MOUNT 状態に落とす必要があり、OPEN のままでは RECOVER ... BLOCK は実行できない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

ブロックメディアリカバリ(Block Media Recovery, BMR)は、メディア破損した個々のブロックだけを復旧する機能である (RECOVER ... BLOCK または、登録済み破損を一括処理する RECOVER CORRUPTION LIST)。

核心となる性質:

  • 粒度がブロック単位:データファイル全体を復旧する必要がない。破損ブロック以外は触らない。
  • オンラインのまま:対象データファイルも DB もオフラインにせず、復旧中も正常ブロックにはアクセスできる(可用性が高い)。
  • ARCHIVELOG が前提:破損ブロックの過去イメージを古いバックアップから取り出し、アーカイブ REDO を適用して現在時点まで追いつかせる。よって NOARCHIVELOG では成立しない。
  • 増分バックアップは使えない:BMR でブロックの基となるイメージに使えるのは全体/レベル0 バックアップ・イメージコピー・(あれば)フラッシュバックログ等であり、レベル1 増分バックアップは BMR には使用できない
各誤答が違う理由
  • ABMR の利点はまさに「ファイル全体をオフラインにしない」点。データファイル全体オフライン+全体リストアは通常のデータファイルリカバリであって BMR ではない。
  • CBMR は ARCHIVELOG が前提でアーカイブ REDO を適用する。NOARCHIVELOG では不可。さらに増分レベル1 は BMR に使えないので二重に誤り。
  • DBMR は OPEN(または MOUNT)状態で実行できる。むしろ「オンラインのまま破損ブロックだけ直す」のが目的で、OPEN 不可という前提は誤り。
ひっかけ: 「リカバリ=ファイル単位でオフラインにして戻す」という固定観念(A・D)。BMR はブロック単位・オンラインが眼目。 さらに「増分があるならそれを使えば速い」という直感に反し、BMR には増分(レベル1)が使えないのが頻出ひっかけ。
コマンド例と想定される挙動(未実行)
ORA-01578: ORACLE data block corrupted (file # 7, block # 1234)
(破損検知。V$DATABASE_BLOCK_CORRUPTION に登録され、RECOVER CORRUPTION LIST の対象になる)
有資格者(著者)による書き下ろし解説
Q12RMAN(増分更新イメージコピー)難易度 高無料

高速リカバリ(リストア時間最小化)を狙い、次の RUN ブロックを毎日1回実行する「増分更新イメージコピー(incrementally updated backup)」戦略を組んだ。

RUN {
  RECOVER COPY OF DATABASE WITH TAG 'inc_upd';
  BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'inc_upd' DATABASE;
}

この戦略の説明として最も適切なものを選べ。(単一選択)

  1. ARECOVER COPY OF DATABASE が、前回までに取得したレベル1 増分をイメージコピーに適用してロールフォワードし、コピーを最新に近い状態に保つ。リカバリ時はこの最新のイメージコピーへ SWITCH/リストアして少量の REDO だけ適用すればよく、リストアが速い
  2. B毎回フルのイメージコピーを取り直すので、ストレージ使用量は日々倍増していく
  3. CRECOVER COPY OF DATABASE は本番データベースをロールフォワードする(本番に増分を適用する)操作であり、本番が変更される
  4. Dこの構成では増分バックアップしか作られず、ベースとなるイメージコピーは決して作られないため、単独ではリストアできない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

「増分更新イメージコピー」は、1本のイメージコピーを増分で“育てて”最新に保つ定番戦略である。2つのコマンドが対になっている。

  • BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'inc_upd' DATABASE;
    … タグ inc_updイメージコピーを更新するためのレベル1 増分を取得する。
  • RECOVER COPY OF DATABASE WITH TAG 'inc_upd';
    … 取得済みのレベル1 増分をイメージコピー(バックアップ側)に適用してロールフォワードし、コピーをより新しい時点へ進める。本番データベースは一切変更しない(適用先はあくまでバックアップのコピー)。

結果として、常に「ほぼ最新のフル相当イメージコピー」が手元にある状態を維持できる。障害時は そのイメージコピーへ SWITCH(コピーをそのまま現用ファイルにする)か、リストアして少量のアーカイブ REDO を適用するだけで済むため、リストア/リカバリが高速になる。毎日フルバックアップを取り直すコストも避けられる。

なお初回実行時は適用すべき増分もイメージコピーもまだ無いため、RECOVER COPY は実質何もせず、BACKUP INCREMENTAL LEVEL 1 ...ベースとなるレベル0 のイメージコピーを生成する(以後の実行で増分が積まれ、ロールフォワードが効き始める)。

各誤答が違う理由
  • B毎回フルを取り直すのではなく、1本のコピーを増分で更新する戦略。ストレージは倍増しない(むしろ抑制される)。
  • CRECOVER COPY OF DATABASE がロールフォワードするのはバックアップのイメージコピーであって、本番データベースではない。本番は変更されない。
  • D初回にベースのイメージコピー(レベル0 相当)が生成されるため、「ベースが決して作られない」は誤り。単独でリストア可能。
ひっかけ: RECOVER COPY OF DATABASE の「誰をロールフォワードするのか」の取り違え(C)。適用先はバックアップのコピーであり本番ではない。 また「増分戦略だからベースのフルが無い(D)」という誤解。初回にベース(レベル0 コピー)が作られる。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q13Flashback(保証付きリストアポイント)難易度 標準無料

リスクの高いアプリ移行作業の直前の状態へ、失敗時に確実に DB 全体を戻せるようにしたい。ただし通常時の Flashback Database ログ収集(FLASHBACK ON)は有効にしていない。DB は ARCHIVELOG モードで、高速リカバリ領域(FRA, DB_RECOVERY_FILE_DEST)は構成済み。次を実行した。

SQL> CREATE RESTORE POINT before_migration
  2    GUARANTEE FLASHBACK DATABASE;
Restore point created.

この保証付きリストアポイント(guaranteed restore point)の説明として最も適切なものを選べ。(単一選択)

  1. AFLASHBACK DATABASE TO RESTORE POINT before_migration でこの時点へ巻き戻せる。Flashback Database ログ収集(FLASHBACK ON)を有効化していなくても、保証付きリストアポイント作成以降に必要なフラッシュバックログが保持されるため戻せる。前提として ARCHIVELOG と FRA が必要
  2. B保証付きリストアポイントを作るには、事前に ALTER DATABASE FLASHBACK ON; を実行して通常の Flashback Database を有効化しておく必要がある
  3. C保証付きリストアポイントは SCN にラベルを付けるだけで、戻すにはその時点の完全なバックアップからのリストアが別途必要
  4. D保証付きリストアポイントは作成後に自動失効し、一定時間で消えるため移行作業のような長時間用途には使えない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A有資格者監修

解説

保証付きリストアポイント(guaranteed restore point)は、その時点へ FLASHBACK DATABASE で戻せることを保証する仕組みである。 通常の Flashback Database(FLASHBACK ON による継続的なフラッシュバックログ収集)を有効にしていなくても、 保証付きリストアポイントを作ると、その時点へ戻すのに必要なフラッシュバックログが確実に保持される

前提条件:

  • DB が ARCHIVELOG モード
  • 高速リカバリ領域(FRA)が構成済み(フラッシュバックログの保存先)。

移行に失敗したら SHUTDOWNSTARTUP MOUNTFLASHBACK DATABASE TO RESTORE POINT before_migration;ALTER DATABASE OPEN RESETLOGS; で当該時点へ戻せる。 作業が成功して不要になったら DROP RESTORE POINT before_migration; で保証を解除すると、保持されていたフラッシュバックログが解放される (保持し続けると FRA を圧迫し得る点には注意)。

各誤答が違う理由
  • Bここが核心。通常の FLASHBACK ON は不要。保証付きリストアポイント単体で、その時点に限り戻せるよう必要なログが保持される(“移行直前だけ戻せれば良い”用途にちょうど合う)。
  • C単なる SCN ラベルではない。フラッシュバックログが保持され、バックアップからのリストア無しに FLASHBACK DATABASE で戻せる。
  • D自動失効しない。明示的に DROP RESTORE POINT するまで保持され続ける(だからこそ放置すると FRA を圧迫する)。短時間で消える「通常のリストアポイント(保証なし)」とは別物。
ひっかけ:FLASHBACK DATABASE で戻すなら必ず FLASHBACK ON が要る(B)」という思い込み。 保証付きリストアポイントは FLASHBACK ON 無しでも特定時点へ戻せるのが最大の特長。 また保証あり(明示 DROP まで残る)と保証なし(自動失効し得る)のリストアポイントの違い(D)も頻出。
有資格者(著者)による書き下ろし解説
Q14統合監査(Unified Auditing)難易度 標準無料

統合監査(Unified Auditing)で、HR.EMP への SELECT/UPDATE/DELETE を監査したい。次を実行した後、HR.EMP を実際に UPDATE したが、UNIFIED_AUDIT_TRAIL に該当レコードが記録されない。

SQL> CREATE AUDIT POLICY emp_dml_pol
  2    ACTIONS SELECT ON hr.emp, UPDATE ON hr.emp, DELETE ON hr.emp;
Audit policy created.

-- (別セッションで)
SQL> UPDATE hr.emp SET sal = sal * 1.1 WHERE deptno = 10;
SQL> COMMIT;

SQL> SELECT * FROM unified_audit_trail
  2    WHERE object_name='EMP' ORDER BY event_timestamp;
-- 行が返らない

監査レコードが記録されない理由として最も適切なものを選べ。(単一選択)

  1. A監査ポリシーを作成しただけで有効化していないAUDIT POLICY emp_dml_pol; を実行して初めて監査が始まる
  2. BCREATE AUDIT POLICY は作成と同時に自動的に有効化されるので、記録されないのは AUDIT_TRAIL 初期化パラメータが NONE だからである
  3. C統合監査では DML(UPDATE 等)は監査対象にできず、SELECT のみ監査可能なため
  4. DUNIFIED_AUDIT_TRAIL はリアルタイム反映されず、レコードは DBA_AUDIT_TRAIL(旧来ビュー)にしか出ないため
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A有資格者監修

解説

統合監査では、監査は2段構えになっている。

  • ① ポリシーの定義: CREATE AUDIT POLICY <名> ACTIONS ...; で「何を監査するか」を定義する。これは定義しただけで、まだ監査は始まらない
  • ② ポリシーの有効化: AUDIT POLICY <名> [BY <user> | WHENEVER ...]; を実行して有効化して初めて、以後の該当操作が UNIFIED_AUDIT_TRAIL に記録される。

本問はポリシーを CREATE しただけで AUDIT POLICY emp_dml_pol; を実行していないため、UPDATE しても記録されない。 AUDIT POLICY emp_dml_pol; を実行すれば(以降の操作から)記録される。

補足:純粋統合監査(pure unified auditing)モードでは、旧来の AUDIT_TRAIL 初期化パラメータは無視される(監査の有効/出力先は統合監査の仕組みが制御)。

各誤答が違う理由
  • BCREATE AUDIT POLICY自動有効化されない。さらに統合監査の有効/無効は AUDIT POLICY 文で制御し、純粋統合監査では AUDIT_TRAIL パラメータは関与しない。根拠が二重に誤り。
  • C統合監査は SELECT だけでなく UPDATE/DELETE 等の DML も ACTIONS で監査できる。DML 不可は誤り。
  • D有効化済みなら統合監査レコードは UNIFIED_AUDIT_TRAIL に出る。記録されない原因は「ビューの選択ミス」ではなく「ポリシー未有効化」。
ひっかけ: 「ポリシーを作れば監査が始まる」という思い込み。定義(CREATE)と有効化(AUDIT)は別ステップ。 旧来監査の AUDIT_TRAIL 初期化パラメータの話(B)に引っ張られるのも罠。純粋統合監査ではこのパラメータは無視される。
有資格者(著者)による書き下ろし解説
Q15リソースマネージャ(CPU 制御)難易度 高無料

Database Resource Manager で、コンシューマグループ REPORTS に対しレベル1で MGMT_P1=25(CPU 配分 25%)の管理(配分)ディレクティブを設定したリソースプランを有効化している。一方、REPORTSUTILIZATION_LIMITMAX_UTILIZATION_LIMIT)は設定していない。

サーバの CPU が飽和していない(空きがある)時間帯に、REPORTS グループのセッションだけが重い問合せを1本実行した。このセッションが使える CPU として最も適切なものを選べ。(単一選択)

  1. AMGMT_P1=25 が絶対上限として働くため、CPU に空きがあっても REPORTS常に最大 25% しか使えない
  2. BCPU 配分ディレクティブ(MGMT_Pn)はCPU が飽和して競合が起きているときにのみ配分比として作用する。CPU に空きがある今は抑制されず、REPORTS25% を超えて利用可能(必要なら 100% 近くまで)。25% を絶対上限にしたいなら UTILIZATION_LIMIT を別途設定する必要がある
  3. Cリソースプランが有効な時点で全グループは MGMT_Pn の値で常時固定割り当てされ、空き CPU は他へ回らず遊休する
  4. DMGMT_P1 は I/O 帯域の配分専用で、CPU 使用量には影響しない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

Resource Manager の CPU 配分(management)ディレクティブ MGMT_Pn は、CPU が飽和して取り合いになったときに、誰に何%ずつ配るかを決めるものである。 言い換えると競合時にだけ効く比率であり、CPU に余裕があるときは抑制しない。

したがって CPU に空きがある時間帯に REPORTS だけが走っているなら、競合が無いので 25% という比率は作用せず、必要なだけ CPU を使える(100% 近くまで)

「空いていても絶対に 25%(あるいは指定%)を超えさせたくない」=ハードキャップが欲しい場合は、配分ディレクティブではなく UTILIZATION_LIMITMAX_UTILIZATION_LIMITを設定する。これは CPU に空きがあっても絶対上限として頭を抑える

この「配分(competition 時のみ) vs 絶対上限(常時キャップ)」の違いが本問の核心。

各誤答が違う理由
  • AMGMT_Pn は絶対上限ではない。絶対上限は UTILIZATION_LIMIT。空きがあれば 25% を超えて使える。
  • C空き CPU を遊休させて固定割り当てするのではない。競合が無ければ抑制せず使わせる(リソースを無駄にしない設計)。
  • DMGMT_Pn は CPU 配分のディレクティブ。I/O 専用ではない(I/O は別の仕組み)。
ひっかけ:MGMT_P1=25 = 上限 25%」と読む誤り(A)。これは競合時の配分比であって絶対上限ではない。 絶対上限が必要なら UTILIZATION_LIMIT を使う、という配分 vs キャップの区別が頻出ポイント。
有資格者(著者)による書き下ろし解説
Q16領域管理(ALTER TABLE … MOVE ONLINE)難易度 標準無料

24時間稼働の OLTP で、ヒープ表 hr.orders(B-Tree 索引が複数ある)を別の表領域 data_new無停止で移したい。次の2案を検討している。

-- 案1
SQL> ALTER TABLE hr.orders MOVE TABLESPACE data_new;

-- 案2
SQL> ALTER TABLE hr.orders MOVE ONLINE TABLESPACE data_new;

2案の違いとして最も適切なものを選べ。(単一選択)

  1. A案1・案2 とも DML を許可したまま移動でき、索引も自動で保守されるので動作は同じ
  2. B案1(MOVE)は移動中、表に排他ロックがかかり DML がブロックされ、移動後は索引が UNUSABLE になるため索引の再構築が必要。案2(MOVE ONLINE)は移動中もDML を許可し、索引も自動的に保守される(再構築不要)
  3. C案2(MOVE ONLINE)は索引を UNUSABLE にする点は案1 と同じで、違いは移動中に SELECT を許可するかどうかだけである
  4. DMOVE ONLINE は索引専用の構文で、表(ヒープ表)には使えず ORA-00922 になる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

ヒープ表の移動には2つのモードがある。

  • オフライン移動 ALTER TABLE ... MOVE(案1): 移動中は表に排他ロックがかかり、DML がブロックされる。さらに移動で rowid が変わるため、移動後は表の索引が UNUSABLE になり、索引を再構築(ALTER INDEX ... REBUILDするか UPDATE INDEXES 句を併用する必要がある。
  • オンライン移動 ALTER TABLE ... MOVE ONLINE(案2): 移動中もDML(INSERT/UPDATE/DELETE)を許可し、索引も自動的に保守される(移動後に UNUSABLE にならず、別途再構築は不要)。24時間稼働の無停止移動にはこちらが適する。

本問は「無停止で移したい」ので案2(MOVE ONLINE)が適切。

各誤答が違う理由
  • A案1 は DML をブロックし索引も UNUSABLE になる。両案が同じ動作というのは誤り。
  • CMOVE ONLINE の眼目は「DML 許可+索引の自動保守」。索引が UNUSABLE になる点が案1 と同じ、という説明は誤り(ONLINE は索引を使用可能なまま保守する)。
  • DMOVE ONLINEヒープ表に対して使える(12.2 以降)。索引専用構文という説明は誤り。
ひっかけ:ONLINE = 読めるだけ(SELECT 可)」という浅い理解(C)。MOVE ONLINE の本質はDML 継続+索引の自動保守(再構築不要)。 オフライン MOVE の後に索引が UNUSABLE になることを忘れて再構築を怠ると、その索引が使われずに性能劣化する点も実務の罠。
有資格者(著者)による書き下ろし解説
Q17オプティマイザ統計(保留統計)難易度 標準無料

本番に影響を与えずに新しい統計を検証したい。次を実行した。

-- ① この表の統計を「保留(pending)」にする設定
SQL> EXEC DBMS_STATS.SET_TABLE_PREFS('HR','ORDERS','PUBLISH','FALSE');

-- ② 統計を収集
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('HR','ORDERS');

収集後、本番の通常セッションは依然として以前の(古い)統計に基づく実行計画のままだった。検証のために新しく収集した統計を、自分の検証セッションでだけオプティマイザに使わせたい。正しい操作を選べ。(単一選択)

  1. A収集と同時に新統計は全セッションへ公開されるはずなので、古い計画のままなのは別原因。SET_TABLE_PREFS は無関係
  2. B検証セッションで ALTER SESSION SET OPTIMIZER_USE_PENDING_STATISTICS = TRUE; を実行する。これでそのセッションだけ保留統計を使って計画を立てる。問題なければ DBMS_STATS.PUBLISH_PENDING_STATS で本公開する
  3. C検証セッションで ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS; を実行すれば保留統計が使われる
  4. D保留統計は SQL からは一切参照できず、PUBLISH_PENDING_STATS で公開するまでオプティマイザでもツールでも使えない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

保留統計(pending statistics)は、収集した統計を即座に全体公開せず、“保留”として隔離しておき、検証してから公開する仕組みである。

  • DBMS_STATS.SET_TABLE_PREFS(...,'PUBLISH','FALSE') を設定した表では、以後の GATHER_..._STATS の結果は公開されず保留になる(DBA_TAB_PENDING_STATS 等で確認可)。通常セッションは引き続き従来の公開済み統計を使うので、計画は変わらない。
  • 保留統計を使って計画を確かめたいセッションだけ ALTER SESSION SET OPTIMIZER_USE_PENDING_STATISTICS = TRUE; を実行する。そのセッションに限りオプティマイザが保留統計を採用する。
  • 検証して問題なければ EXEC DBMS_STATS.PUBLISH_PENDING_STATS('HR','ORDERS'); で公開(全体へ反映)。ダメなら DBMS_STATS.DELETE_PENDING_STATS で破棄。

これにより「新統計で計画が劣化しないか」を本番影響なしに先行検証できる。

各誤答が違う理由
  • APUBLISH=FALSE にしたので新統計は公開されず保留。だから通常セッションは古い統計のまま。SET_TABLE_PREFS はまさに原因(無関係ではない)。
  • COPTIMIZER_MODE は最適化の目的(全行/初期行)を変えるだけで、保留統計の使用可否とは無関係。保留統計を使わせるのは OPTIMIZER_USE_PENDING_STATISTICS
  • D保留統計は OPTIMIZER_USE_PENDING_STATISTICS=TRUE のセッションでオプティマイザが使用できるし、DBA_TAB_PENDING_STATS 等のビューでも参照できる。「一切参照できない」は誤り。
ひっかけ: パラメータ名の取り違え。保留統計を使わせるのは OPTIMIZER_USE_PENDING_STATISTICS であって OPTIMIZER_MODE ではない(C)。 また「統計を収集したら即全体に効く」という思い込み(A)。PUBLISH=FALSE なら公開されず保留
有資格者(著者)による書き下ろし解説
Q18SQL Plan Baseline(SPM)難易度 高無料

ある SQL に対し SQL Plan Management(SPM)で承認済み(accepted)のプランを持つ SQL Plan Baseline が1つ存在する(OPTIMIZER_USE_SQL_PLAN_BASELINES=TRUE=既定)。索引追加により、オプティマイザがこの SQL に対し従来より低コストの新しい実行計画を見つけた。次回以降この SQL を実行したときの挙動として最も適切なものを選べ。(単一選択)

  1. A新しい計画の方がコストが低いので、オプティマイザは即座に新計画へ切り替えて実行する。ベースラインは自動的に新計画で上書きされる
  2. Bオプティマイザは引き続きベースライン内の承認済み計画を使う。新しい低コスト計画は未承認(unaccepted)としてプラン履歴に追加されるだけで、そのままでは使われない。使わせるには DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE 等で検証・承認(accept)する必要がある
  3. Cベースラインが存在する SQL は、新しい計画を一切記録せず破棄するため、プラン履歴にも残らない
  4. Dベースラインがあると新索引はその SQL では使われない。索引を使うにはベースラインを DROP するしかない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B有資格者監修

解説

SQL Plan Management(SPM)/SQL Plan Baseline の目的は実行計画の安定性である。 「コストが低いから」という理由だけで計画を勝手に乗り換えて性能が突然劣化する(plan regression)のを防ぐ。

ベースラインを持つ SQL の挙動(OPTIMIZER_USE_SQL_PLAN_BASELINES=TRUE):

  • オプティマイザはベースライン内の「承認済み(accepted)かつ有効・再現可能」な計画のうち最小コストのものを選んで使う。
  • 今回見つかった新しい低コスト計画は、ベースラインに無い計画なのでそのまま採用されない。代わりに未承認(non-accepted)としてプラン履歴に記録される。
  • その新計画を使えるようにするには、DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(または自動 SPM 進化タスク)で「本当にベースラインより速いか」を検証し、合格すれば承認(accept)してベースラインに昇格させる。

つまり「低コスト=即採用」ではなく、承認(accept)されて初めて使われるのが SPM の肝。

各誤答が違う理由
  • A自動で即切り替え&上書きはしない。それでは plan regression を防げず SPM の意味がない。承認プロセスが必須。
  • C新計画は破棄されず、未承認としてプラン履歴に追加される(後で evolve できる)。記録されないは誤り。
  • D新索引が永久に使えないわけではない。evolve して承認すれば、索引を使う新計画もベースラインに入って使われる。DROP するしかない、は誤り。
ひっかけ: 「オプティマイザは常に最小コスト計画を選ぶ」という基本則が、ベースラインがあると上書きされる点。 ベースライン下では“承認済みの中で”最小コストを選ぶのであり、未承認の新計画はコストが低くても使われない。安定性を取るための意図的な振る舞い。
有資格者(著者)による書き下ろし解説
Q19マルチテナント(ALTER SESSION SET CONTAINER)難易度 標準無料

共通ユーザー C##DBACDB$ROOT に接続している。同一の物理接続を使い回して、複数の PDB を横断して管理タスクを行いたい。次を実行した。

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

SQL> ALTER SESSION SET CONTAINER = salespdb;
Session altered.

ALTER SESSION SET CONTAINER の挙動として最も適切なものを選べ。(単一選択)

  1. A同一の物理接続を維持したまま、カレントコンテナを SALESPDB へ切り替える。再接続や再認証は不要で、SET CONTAINER 権限を持つ共通ユーザーが実行できる
  2. B内部的に SALESPDB への新しい接続を張り直し、そのユーザーのパスワードで再認証する必要がある
  3. CCDB$ROOT から PDB への一方向にしか使えず、PDB から CDB$ROOT へ戻すことはできない
  4. Dローカルユーザーでのみ実行可能で、共通ユーザーは CONNECT ... @pdb のサービス経由でしか PDB に入れない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

ALTER SESSION SET CONTAINER = <pdb> は、いま張っている接続(セッション)を切らずに、カレントコンテナだけを対象 PDB へ切り替える文である。 新しい接続を張り直したり、再認証(パスワード再入力)したりする必要はない。接続プールが多数の PDB を効率よく捌くための中核機能である。

実行できるのは、対象コンテナへの SET CONTAINER システム権限を持つユーザー(典型的には共通ユーザー)である。 CDB$ROOT ⇄ 各 PDB のどちらの向きにも切り替えられ、ALTER SESSION SET CONTAINER = CDB$ROOT; でルートへ戻せる。

切り替え後は、その PDB がカレントとなり、以後の SQL はその PDB のスキーマ/オブジェクトを対象に解決される。物理接続は一つのまま維持される。

各誤答が違う理由
  • BSET CONTAINER接続を張り直さないのが本質。既存セッションのカレントコンテナを付け替えるだけで、再認証も発生しない。
  • C双方向に切り替え可能。ALTER SESSION SET CONTAINER = CDB$ROOT; でルートへ戻せるし、PDB 間の切り替えもできる(権限があれば)。
  • D逆で、SET CONTAINER はコンテナを横断できる共通ユーザー向けの機能。ローカルユーザーは自分の PDB に閉じるため、他コンテナへの SET CONTAINER はできない。
ひっかけ: 「PDB を変える=接続し直し/再ログインが要る」という思い込み。SET CONTAINER の眼目は同一接続のままコンテナだけ切り替える点にある。 また「root からしか(あるいは PDB からは)切り替えられない」という一方向の誤解も罠で、実際は双方向に切り替えられる(権限次第)。
コマンド例と想定される挙動(未実行)
ALTER SESSION SET CONTAINER = salespdb; → "Session altered."(新規接続は張られない)
SHOW CON_NAME で SALESPDB を返す。ALTER SESSION SET CONTAINER = CDB$ROOT; でルートへ戻る。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q20マルチテナント(PDB ポイントインタイムリカバリ)難易度 高無料

ローカル UNDO・ARCHIVELOG モードの CDB がある。ある PDB HRPDB だけで誤った一括更新が行われ、その直前の時刻へ HRPDB のみを巻き戻したい。他の PDB(SALESPDB など)や CDB$ROOT はオンラインのまま稼働を続けさせたい。RMAN で次を実行する。

RMAN> RECOVER PLUGGABLE DATABASE hrpdb
  2    UNTIL TIME "TO_DATE('2026-07-03 09:00:00','YYYY-MM-DD HH24:MI:SS')";
RMAN> ALTER PLUGGABLE DATABASE hrpdb OPEN RESETLOGS;

この PDB ポイントインタイムリカバリ(PDB PITR)の挙動として最も適切なものを選べ。(単一選択)

  1. A対象 HRPDB だけが指定時刻へ巻き戻り、他の PDB と CDB$ROOT はオンラインのまま影響を受けない。ローカル UNDO なら補助インスタンス無しで実施でき、ARCHIVELOG が前提である
  2. BPDB PITR は CDB 全体を指定時刻へ巻き戻すため、実行中は全 PDB と CDB$ROOTMOUNT に落とす必要がある
  3. C巻き戻し後は ALTER PLUGGABLE DATABASE ... OPENRESETLOGS 不要)で通常どおり開ける
  4. DPDB PITR は NOARCHIVELOG モードでも、直近の全体バックアップさえあれば任意時刻へ戻せる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

PDB ポイントインタイムリカバリ(PDB PITR)は、対象 PDB だけを過去の時点へ巻き戻す。CDB 全体を止める必要はなく、 他の PDB と CDB$ROOT はオンラインのまま影響を受けないのが最大の利点である。

手順は、対象 PDB をクローズ(MOUNTED 相当)にして RECOVER PLUGGABLE DATABASE ... UNTIL TIME/SCN で不完全リカバリし、 ALTER PLUGGABLE DATABASE ... OPEN RESETLOGS で開く。ローカル UNDOだと補助(auxiliary)インスタンスを別途用意せずに済み、PDB PITR がすっきり行える (共有 UNDO では補助インスタンスが必要になる)。ARCHIVELOG が前提。

巻き戻すのは対象 PDB のデータのみ。CDB 全体を UNTIL TIME で戻すわけではないので、他業務は継続できる。

各誤答が違う理由
  • BPDB PITR は対象 PDB のみを巻き戻す。CDB 全体を止めたり全 PDB を巻き戻したりはしない(それでは PDB 単位の意味がない)。
  • C不完全リカバリ(UNTIL)の後は OPEN RESETLOGS が必要。単なる OPEN では開かない。
  • DNOARCHIVELOG ではアーカイブ REDO が無く、任意時点までの不完全リカバリはできない。PDB PITR は ARCHIVELOG が前提。
ひっかけ: 「PDB を過去に戻す=CDB 全体を戻す(=全 PDB が巻き戻る/CDB を止める)」という誤解。PDB PITR は対象 PDB だけに閉じる。 また PDB PITR とローカル/共有 UNDO の関係(共有 UNDO は補助インスタンスが要る)も頻出。
コマンド例と想定される挙動(未実行)
RECOVER PLUGGABLE DATABASE hrpdb UNTIL TIME ... → HRPDB のみ対象時刻へ。
他 PDB・CDB$ROOT は稼働継続(1つの PDB を PITR しても残りの PDB は影響を受けず、OPEN のまま運用できる)。
OPEN RESETLOGS 後は HRPDB の新しいインカネーション(PDB サブインカネーション)で再オープンされる。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q21RMAN(保存方針と OBSOLETE)難易度 標準無料

RMAN で次のように保存方針(retention policy)を設定している。

RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

RMAN> REPORT OBSOLETE;
RMAN> DELETE OBSOLETE;

REPORT OBSOLETE / DELETE OBSOLETE が対象とするバックアップの説明として最も適切なものを選べ。(単一選択)

  1. A保存方針(ここでは 7 日のリカバリウィンドウ)を満たすうえでもう不要になったバックアップを対象とする。REPORT OBSOLETE は一覧表示のみ、DELETE OBSOLETE が実際に削除・登録解除する
  2. BCROSSCHECK で実体ファイルが見つからなかった(物理的に存在しない)バックアップを対象とする
  3. C破損(CORRUPTION)が検出されたバックアップだけを対象とし、正常なバックアップは対象にならない
  4. D保存方針を設定した時点で、超過したバックアップは RMAN が即時に自動削除するため、DELETE OBSOLETE は不要である
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

保存方針(retention policy)は「どのバックアップを保持すべきか(=保持しなくてよいか)」を定義する。方式は2つ。

  • リカバリウィンドウ(RECOVERY WINDOW OF n DAYS): 過去 n 日以内の任意時点へ復旧できるだけの一連のバックアップ+アーカイブを保持する。
  • 冗長性(REDUNDANCY n): 各ファイルについて最新 n 世代のバックアップを保持する。

OBSOLETE(不要)とは、この保存方針を満たすうえでもう必要ないバックアップを指す。REPORT OBSOLETE はその一覧を表示するだけで、 DELETE OBSOLETE が実際に削除(+カタログから登録解除)する。

重要:保存方針を満たしていても、RMAN が自動で勝手に消すわけではない(FRA の空き圧迫時に FRA 内ファイルが再利用対象になる挙動は別)。基本は DELETE OBSOLETE を明示実行して整理する。

各誤答が違う理由
  • Bそれは EXPIRED の定義であり、対象は DELETE EXPIREDOBSOLETE(保存方針上不要)とは別概念。
  • COBSOLETE は破損の有無とは無関係。保存方針を満たすのに余分か否かで判定する。
  • D保存方針は「不要の定義」を与えるだけで、自動では削除しない。整理には DELETE OBSOLETE の明示実行が必要(FRA の空き再利用とは別挙動)。
ひっかけ: OBSOLETE(保存方針上もう不要=冗長)と EXPIREDCROSSCHECK でファイル実体が見つからなかった=物理的に消えている)の混同が最大の罠。両者は別概念で、DELETE OBSOLETEDELETE EXPIRED も別物。
コマンド例と想定される挙動(未実行)
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; → 7日ウィンドウ。
REPORT OBSOLETE で不要世代を列挙、DELETE OBSOLETE で削除。(自動削除ではない)
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q22RMAN(CROSSCHECK と EXPIRED)難易度 標準無料

ディスク上の古いバックアップピースを OS のコマンドで手動削除してしまった。RMAN のリポジトリ(制御ファイル/カタログ)にはまだそのバックアップの登録が残っている。整合性を取るために次を実行する。

RMAN> CROSSCHECK BACKUP;
RMAN> DELETE EXPIRED BACKUP;

CROSSCHECKDELETE EXPIRED の役割として最も適切なものを選べ。(単一選択)

  1. ACROSSCHECK はリポジトリ登録と実体ファイルを突き合わせ、実体が見つからないものを EXPIRED にマークする(実体は消さない)。DELETE EXPIRED はその EXPIRED なリポジトリ登録だけを削除する
  2. BCROSSCHECK は保存方針を超過したバックアップを検出して OBSOLETE にマークし、DELETE EXPIRED がそれを実体ごと削除する
  3. CCROSSCHECK はディスク上の実体ファイルそのものを削除して掃除するコマンドである
  4. DDELETE EXPIRED は実体が残っているバックアップを物理削除し、リポジトリ登録は残す
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

CROSSCHECK は、RMAN リポジトリの登録内容と実際のメディア(ディスク/テープ)上のファイルの有無を突き合わせる。 リポジトリに載っているのに実体が見つからないバックアップは、状態が EXPIRED にマークされる(=物理的に消えている)。

DELETE EXPIRED は、その EXPIRED とマークされたリポジトリの登録(メタデータ)だけを削除する。実体はすでに無いので、消すのはカタログ側の記録である。 これで「登録はあるが実体は無い」という食い違いが解消する。

対比:DELETE OBSOLETE は「保存方針上もう不要」なバックアップを実体ごと削除する。EXPIRED(実体が消えている)と OBSOLETE(保存方針上不要)は別軸である。

各誤答が違う理由
  • BCROSSCHECK が扱うのは実体の有無(EXPIRED)であって保存方針(OBSOLETE)ではない。両概念を取り違えている。
  • CCROSSCHECK は照合して状態を更新するだけで、ファイルを削除しない。削除は DELETE 系コマンドの役割。
  • DEXPIRED は「実体がすでに無い」状態なので、削除対象はリポジトリ登録(メタデータ)。実体を物理削除するのは OBSOLETE 側の話で、説明が逆。
ひっかけ: CROSSCHECKファイルを削除する操作だと誤解する罠(実際は「照合して状態を更新するだけ」で実体は消さない)。 さらに EXPIRED(実体が無い)と OBSOLETE(保存方針上不要)の取り違え。
コマンド例と想定される挙動(未実行)
CROSSCHECK BACKUP; → 実体が無いピースを "EXPIRED" にマーク(削除はしない)。
DELETE EXPIRED BACKUP; → EXPIRED なリポジトリ登録のみ削除。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q23RMAN(制御ファイル自動バックアップ)難易度 標準無料

リカバリカタログを使わず、制御ファイルのみを RMAN リポジトリとして運用している。次を設定した。

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

制御ファイル自動バックアップ(controlfile autobackup)の役割として最も適切なものを選べ。(単一選択)

  1. Aバックアップ後や構造変更後に制御ファイルと SPFILE を自動でバックアップする。制御ファイルも SPFILE も失った最悪時に、カタログ無しでも RESTORE ... FROM AUTOBACKUP で復元の起点を確保できる
  2. Bすべてのデータファイルの完全バックアップを毎回自動で取得するので、明示的な BACKUP DATABASE が不要になる
  3. Cリカバリカタログを使っている場合にのみ意味があり、制御ファイルのみの運用では効果がない
  4. D制御ファイルをオンラインREDOログに多重化して、メディア障害から保護する機能である
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

CONTROLFILE AUTOBACKUP ON にすると、RMAN はバックアップ実行後や、DB の物理構造変更後に、 制御ファイルと SPFILE を自動的にバックアップする。自動バックアップは既定のフォーマットで格納され、DBID から探し出せる。

これが効くのは、制御ファイルも SPFILE も失われ、リポジトリ情報が手元に無い最悪ケースである。 RESTORE SPFILE FROM AUTOBACKUP; / RESTORE CONTROLFILE FROM AUTOBACKUP; により、カタログ無しでも起点を復元でき、そこからデータベース全体のリストアに進める。

カタログ運用でも有用だが、カタログを使わない(制御ファイルのみ)運用では特に重要。制御ファイルが飛ぶとバックアップ情報ごと失うため、自動バックアップが復旧の生命線になる。

各誤答が違う理由
  • B自動バックアップの対象は制御ファイルと SPFILEであり、データファイルの完全バックアップは代替しない。BACKUP DATABASE は依然必要。
  • C逆で、カタログを使わない(制御ファイルのみ)運用でこそ重要。制御ファイルが失われるとリポジトリごと失うため、自動バックアップが復旧の頼りになる。
  • D自動バックアップは REDO への多重化とは無関係。制御ファイルの保護は多重化(CONTROL_FILES の複数指定)であり、別の仕組み。
ひっかけ: 「自動バックアップ=データファイルも含めて全部が毎回自動で取られる」という誤解。対象は制御ファイルと SPFILEであって、データファイルの完全バックアップを代替するものではない。
コマンド例と想定される挙動(未実行)
RESTORE SPFILE FROM AUTOBACKUP; / RESTORE CONTROLFILE FROM AUTOBACKUP; がカタログ無しで機能する起点になる。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q24フラッシュバック(Flashback Query / AS OF)難易度 標準無料

誤った更新の内容を確認するため、表 hr.emp1時間前の状態で参照だけしたい(本番データは変更しない)。次を実行した。

SQL> SELECT empno, sal
  2    FROM hr.emp
  3    AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR)
  4    WHERE deptno = 10;

この Flashback Query(AS OF)の説明として最も適切なものを選べ。(単一選択)

  1. AUNDO を使って指定時点のコミット済み内容を参照するだけで、本番データは変更されない。UNDO が不足すれば ORA-01555、対象時点以降に表定義が変わっていれば ORA-01466 になり得る
  2. BAS OF TIMESTAMP は表を実際に1時間前の状態へ巻き戻すため、実行後は現在のデータが失われる
  3. CFlashback Query はフラッシュバックログ(FLASHBACK ON)を使うため、有効化していないと使えない
  4. 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 QueryVERSIONS BETWEEN)で変更履歴を追ったりと組み合わせられる。あくまで読み取りで、表を巻き戻すのは FLASHBACK TABLE(別機能)。

各誤答が違う理由
  • BAS 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が作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q25フラッシュバック(Flashback Data Archive)難易度 高無料

コンプライアンス要件で、ある表の変更履歴を数年間保持し、任意の過去日付時点の値を後から参照できるようにしたい。UNDO 保持期間はせいぜい数時間で、これでは足りない。Flashback Data Archive(Flashback Time Travel)を検討している。

SQL> CREATE FLASHBACK ARCHIVE fla1
  2    TABLESPACE fda_ts RETENTION 5 YEAR;

SQL> ALTER TABLE hr.salary_hist FLASHBACK ARCHIVE fla1;

Flashback Data Archive(FDA)の説明として最も適切なものを選べ。(単一選択)

  1. A対象表の変更履歴を専用のフラッシュバックアーカイブへ長期間(RETENTION 指定の年単位)自動保持し、UNDO の保持期間を越えた過去時点の値を AS OF 等で参照できる。履歴記録は透過的でアプリ改修は不要
  2. BFDA も内部的には UNDO を使うため、UNDO_RETENTION を越えた過去は参照できず、実質的に Flashback Query と保持期間は同じである
  3. CFDA を使うには、履歴を記録するためのトリガーと履歴表をアプリ側で自作する必要がある
  4. DFDA は Flashback Database(DB 全体の巻き戻し)の別名で、対象表単位ではなくデータベース全体の履歴を保持する
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

Flashback Data Archive(FDA / Flashback Time Travel)は、対象表の変更履歴を専用のフラッシュバックアーカイブ長期間(年単位)自動保持する仕組みである。 UNDO の保持期間に縛られず、RETENTION で指定した期間だけ履歴を残せる。

有効化した表に対しては、SELECT ... AS OF TIMESTAMP/SCNVERSIONS BETWEEN を使って、UNDO の限界をはるかに越えた過去時点の値・変更履歴を参照できる。 履歴の記録は透過的で、アプリ側の改修(履歴用トリガーや履歴表の自作)は不要である。

UNDO ベースの Flashback Query が「直近(UNDO 保持期間内)」しか遡れないのに対し、FDA は「監査・法令保持のような長期要件」に応える。両者は守備範囲が異なる。

各誤答が違う理由
  • BFDA は UNDO とは別の専用アーカイブに長期保持する。まさに UNDO の限界を越えるための機能で、保持期間が Flashback Query と同じというのは誤り。
  • CFDA の記録は透過的で、トリガーや履歴表の自作は不要。むしろそうした手作りを置き換えるのが FDA の狙い。
  • DFDA は表(オブジェクト)単位の変更履歴保持であり、Flashback Database(DB 全体をフラッシュバックログで巻き戻す)とは全く別の機能。
ひっかけ: UNDO ベースの Flashback Query(短期)と FDA(長期・専用アーカイブ)の混同。 「FDA も UNDO を使うので保持期間は UNDO と同じ」という誤解が典型。FDA は UNDO とは別の専用領域に長期保持する。
コマンド例と想定される挙動(未実行)
CREATE FLASHBACK ARCHIVE ... RETENTION 5 YEAR; → 5年保持。
以後 hr.salary_hist は AS OF で数年前まで遡れる(履歴記録は透過的)。
ライセンス:Oracle Database 11g Release 2 (11.2.0.4) 以降、Flashback Data Archive は全エディションで利用できる。履歴表の最適化(OPTIMIZE DATA)だけは Advanced Compression オプションのライセンスが必要。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q26フラッシュバック(Flashback Drop / リサイクルビン)難易度 標準無料

ユーザー表領域上の表 hr.emp を誤って DROP した。リサイクルビンは有効(recyclebin=on・既定)である。次のいずれの操作で消したかで復旧可否が変わる。

-- ケース1
SQL> DROP TABLE hr.emp;

-- ケース2
SQL> DROP TABLE hr.emp PURGE;

Flashback Drop とリサイクルビンの挙動として最も適切なものを選べ。(単一選択)

  1. Aケース1(DROP TABLE)はリサイクルビンへ移動されるので FLASHBACK TABLE hr.emp TO BEFORE DROP; で復元できるが、ケース2(PURGE)はリサイクルビンを経由せず即完全削除されるため TO BEFORE DROP では戻せない
  2. Bケース1・ケース2 とも表はリサイクルビンに入るので、どちらも TO BEFORE DROP で戻せる
  3. CFlashback Drop はフラッシュバックログ(FLASHBACK ON)を必要とし、有効化していないと TO BEFORE DROP は失敗する
  4. Dケース1 でも表は即座に物理削除され領域も解放されるため、TO BEFORE DROP は常に領域不足で失敗する
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

リサイクルビンが有効なとき、通常の DROP TABLE(ケース1)は表を即時に物理削除せず、リサイクルビンへ移動(BIN$... にリネーム)する。 占有領域は保持されたままなので、FLASHBACK TABLE hr.emp TO BEFORE DROP;元に戻せる

一方 DROP TABLE ... PURGE(ケース2)はリサイクルビンを経由せず即座に完全削除する。リサイクルビンに入らないため、 TO BEFORE DROP では戻せない(この場合の復旧は、より重い時点指定リカバリ等に頼ることになる)。

補足:リサイクルビンはユーザー表領域のオブジェクトが対象で、SYSTEM 表領域のオブジェクトは対象外。領域が逼迫すると、リサイクルビン内のオブジェクトは古い順に自動的に追い出され得る(=いつまでも戻せる保証はない)。

各誤答が違う理由
  • BPURGEリサイクルビンを経由しないため、ケース2 は TO BEFORE DROP で戻せない。両方戻せるは誤り。
  • CFlashback Drop が使うのはリサイクルビンで、フラッシュバックログ(Flashback Database 用)は不要。前提を取り違えている。
  • D通常の DROP では領域はすぐ解放されず、リサイクルビンに保持される。だからこそ TO BEFORE DROP で戻せる(領域逼迫で追い出される前なら)。
ひっかけ: PURGE の有無で TO BEFORE DROP の可否が分かれる点が核心。 また Flashback Drop(リサイクルビン)と Flashback Table(UNDO で TO TIMESTAMP)の混同、フラッシュバックログ(Flashback Database)との取り違えにも注意。
コマンド例と想定される挙動(未実行)
DROP TABLE hr.emp; → リサイクルビンへ(FLASHBACK TABLE hr.emp TO BEFORE DROP; で復元)。
DROP TABLE hr.emp PURGE; → 即完全削除(TO BEFORE DROP 不可)。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q27UNDO(一時UNDO TEMP_UNDO_ENABLED)難易度 高無料

グローバル一時表(GTT)への DML が多く、その UNDO が通常の UNDO 表領域を消費し、結果として REDO も増えている。次を設定した。

SQL> ALTER SESSION SET TEMP_UNDO_ENABLED = TRUE;

一時 UNDO(temporary undo)の効果として最も適切なものを選べ。(単一選択)

  1. Aグローバル一時表(GTT)への DML の UNDO を通常の UNDO 表領域ではなく一時表領域(TEMP)に格納する。これにより通常 UNDO とそれに伴う REDO の生成が抑えられる(対象は一時オブジェクトの UNDO のみ)
  2. Bすべての表(永続表を含む)について UNDO の生成を停止し、UNDO 表領域を完全に不要にする
  3. CREDO の生成を全面的に停止するため、インスタンス障害からのクラッシュリカバリができなくなる
  4. D一時表領域を UNDO 表領域として恒久的に転用し、以後は永続表の UNDO もすべて TEMP に書かれる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

一時 UNDO(temporary undo)は、グローバル一時表(GTT)に対する DML の UNDOを、通常の UNDO 表領域ではなく一時表領域(TEMP)に格納する機能である (TEMP_UNDO_ENABLED=TRUE で有効化)。

効果:

  • 通常 UNDO 表領域の消費が減り、その分に対応する REDO 生成も減る(一時 UNDO 自体はロギングされない)。
  • 一時オブジェクトの UNDO が REDO を生まないため、Active Data Guard のリードオンリー・スタンバイ上でも GTT への DML が可能になる、といった利点にもつながる。

あくまで対象は一時オブジェクト(GTT 等)の UNDO であり、通常の永続表の UNDO や REDO を無くすものではない(永続表の変更は引き続き通常 UNDO+REDO で保護される)。

各誤答が違う理由
  • B対象は一時オブジェクト(GTT)の UNDO だけ。永続表の UNDO は引き続き必要で、UNDO 表領域が不要になるわけではない。
  • C永続表の変更に対する REDO は生成され続けるので、クラッシュリカバリは可能。REDO を全面停止する機能ではない。
  • D一時 UNDO が TEMP を使うのは一時オブジェクトの UNDO に限る。永続表の UNDO まで TEMP に書かれるわけではない。
ひっかけ: 「一時 UNDO を有効化すれば UNDO も REDO も全部要らなくなる」という過大解釈。対象は一時オブジェクト(GTT)の UNDO のみ。 永続表の UNDO/REDO はこれまで通り必要(さもなければ回復不能になる)。
コマンド例と想定される挙動(未実行)
ALTER SESSION SET TEMP_UNDO_ENABLED = TRUE; 後、GTT の UNDO は一時表領域へ格納される。
一時 UNDO は REDO ログに記録されないため、UNDO 表領域の消費と REDO の生成量がともに減る(その分 一時表領域の使用量は増える)。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q28データポンプ(NETWORK_LINK インポート)難易度 高無料

本番 DB(PROD)のスキーマ HR を、検証 DB(TEST)へ移したい。TEST から PROD を指すデータベースリンク prod_link を作成済み。TEST 側で次を実行した。

$ impdp system/pw@test \
    NETWORK_LINK=prod_link \
    SCHEMAS=HR \
    REMAP_SCHEMA=HR:HR_TEST

この NETWORK_LINK を使ったインポートの説明として最も適切なものを選べ。(単一選択)

  1. Aデータベースリンク経由でソース PROD から直接データを引き込み、ダンプファイルを介さずに TEST へ取り込む。REMAP_SCHEMA による付け替えも併用でき、中間ダンプファイルは不要
  2. BNETWORK_LINK を使う場合でも、事前に expdp でダンプファイルを作成し DUMPFILE で指定する必要がある
  3. CNETWORK_LINK はソース DB とターゲット DB のバージョン・プラットフォームが完全一致していないと一切使えない
  4. Dこのコマンドは TEST のデータを PROD へ書き戻す(エクスポート方向の)操作になる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

impdp ... NETWORK_LINK=<dblink> は、ダンプファイルを介さず、ソース DB からデータベースリンク経由で直接データを引き込み、ターゲット DB に取り込む方式である。

利点・特徴:

  • ダンプファイルが不要expdp でファイルを作ってから転送・impdp、という二段階が要らない。中間ファイルの置き場(DIRECTORY)やディスクを気にせず済む。
  • REMAP_SCHEMA 等の変換もそのまま使える(本問は HRHR_TEST に付け替え)。
  • 読み取りはリンク先(PROD)で行われ、書き込みはターゲット(TEST)。ネットワーク経由なので、巨大データや LOB が多いと帯域がボトルネックになり得る。

なお NETWORK_LINK インポートでは DUMPFILE は指定しない(ファイルを使わないため)。ファイル方式とネットワーク方式は排他的に選ぶ。

各誤答が違う理由
  • BNETWORK_LINK 方式はダンプファイル不要DUMPFILE は指定しない(ファイル方式とは排他)。それが本方式の利点。
  • CData Pump はバージョン間・プラットフォーム間の移送に対応する(互換性の範囲はあるが「完全一致必須」ではない)。前提が過度に厳しすぎる。
  • Dimpdp はインポートで、書き込み先は実行元の TEST。読み取り元がリンク先 PROD。方向が逆。
ひっかけ: 「Data Pump は必ずダンプファイルが要る」という思い込み。NETWORK_LINK ならファイルレスで直接転送できる。 DUMPFILENETWORK_LINK を同時指定するような誤り(ファイル方式とネットワーク方式の取り違え)にも注意。
コマンド例と想定される挙動(未実行)
impdp ... NETWORK_LINK=prod_link SCHEMAS=HR REMAP_SCHEMA=HR:HR_TEST → ダンプファイル無しで PROD.HR を TEST.HR_TEST として取り込む。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q29性能診断(SQL Tuning Advisor)難易度 標準無料

特定の遅い SQL について、DBMS_SQLTUNE(SQL Tuning Advisor)でチューニングタスクを作成・実行し、レポートを確認した。

SQL> -- タスク作成~実行~レポート取得(概略)
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('my_task') FROM dual;

SQL Tuning Advisor が返し得る推奨内容として最も適切なものを選べ。(単一選択)

  1. A統計の収集・SQL プロファイルの作成・索引の作成・SQL の書き換えなど複数種類の推奨を返し得る。ただし推奨は DBA が採用(accept)して初めて適用され、自動で本番の計画を差し替えはしない
  2. B推奨できるのは索引の作成のみで、統計や SQL プロファイルは対象外である
  3. C分析すると同時に、推奨(SQL プロファイル等)を自動的に本番へ適用し、以後の実行計画を強制的に置き換える
  4. DSQL Tuning Advisor はワークロード全体に対する索引・マテリアライズドビューの設計専用で、単一 SQL の分析はできない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

SQL Tuning AdvisorDBMS_SQLTUNE)は、単一の SQL 文を分析し、性能改善のための推奨を返す。返し得る推奨は複数種類ある。

  • 統計の収集:欠落/失効した統計があれば、収集を推奨。
  • SQL プロファイルの作成:オプティマイザに補助情報を与え、より良い計画を選ばせる(SQL 文自体は書き換えない)。ACCEPT_SQL_PROFILE で適用する。
  • 索引の作成:新しい索引が有効なら提案(詳細な索引設計は SQL Access Advisor 領域)。
  • SQL の書き換え(再構成):より効率的な記述への変更を提案。

重要なのは、Advisor は推奨を出すだけで、DBA が採用(accept)して初めて適用される点(例:SQL プロファイルは ACCEPT_SQL_PROFILE)。自動で勝手に本番の計画を差し替えたりはしない。

各誤答が違う理由
  • B索引だけではない。統計収集・SQL プロファイル・SQL 書き換えなども推奨する。索引/MV の網羅設計はむしろ SQL Access Advisor の守備範囲。
  • CAdvisor は推奨を出すだけで自動適用はしない。SQL プロファイルは ACCEPT_SQL_PROFILE 等で明示採用が必要。
  • Dそれは SQL Access Advisor の説明。SQL Tuning Advisor は単一 SQLの分析が主眼。両アドバイザを取り違えている。
ひっかけ: 「SQL Tuning Advisor=索引を作るだけのツール」という狭い理解。実際は統計・SQL プロファイル・索引・SQL 書き換えまで幅広く推奨する。 また「推奨が出たら自動適用される」という誤解も罠で、accept して初めて有効。索引/MV の網羅的設計はむしろ SQL Access Advisor の領域。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
Q30性能診断(自動索引 Automatic Indexing・19c)難易度 高無料

Oracle Database 19c の自動索引(Automatic Indexing)機能を有効化した。

SQL> EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT');

自動索引が候補索引を「本採用(可視化)」するまでの流れとして最も適切なものを選べ。(単一選択)

  1. Aワークロードから候補索引を挙げ、まず不可視(invisible)で作成→実際に性能を改善するか検証し、改善が確認できた候補だけを可視(使用可能)に昇格させる。改善しない候補は可視化しない
  2. B候補を見つけた時点で即座に可視索引を作成し、全 SQL に無条件で適用する(検証段階は無い)
  3. C自動索引は候補を提案するだけで索引の作成は一切行わず、作成はすべて DBA が手動で行う必要がある
  4. D性能が改善しない候補も含め、すべての候補を最終的に可視索引として残す
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

19c の自動索引(Automatic Indexing)は、実ワークロードを分析して索引の候補を挙げ、 それらをまず不可視(invisible)索引として作成する。次に、その候補が実際に性能を改善するかを検証(対象 SQL の実行で比較)する。

  • 候補が既存計画より性能を改善すると判定されれば、可視(visible)=使用可能に昇格させる。
  • 改善しない(または悪化する)候補は可視化せず、不可視のまま/使用不可(該当文には使わせない)にする。
  • 一連の判断と結果はレポート(DBMS_AUTO_INDEX.REPORT_ACTIVITY 等)で確認できる。

ポイントは「いきなり全 SQL に効かせない」こと。まず不可視で作り、検証に合格したものだけ本採用する(=退行を避けつつ自動化する)。

※Automatic Indexing を利用できるのは Enterprise Edition on Engineered Systems(Exadata。Oracle Database Appliance は対象外)Oracle Exadata Database Service に限られ、Standard Edition 2 およびオンプレミスの Enterprise Edition では利用できない。

各誤答が違う理由
  • B検証を経ずに即可視化はしない。まず不可視で作り検証に合格したものだけ可視化する(退行防止のための段階)。
  • C自動索引は候補を実際に作成(まず不可視で)し検証・昇格まで自動化する。「提案のみで作成しない」は誤り。
  • D改善しない候補は可視化されない(不可視のまま/使用不可)。無差別に残すわけではない。
ひっかけ: 「候補を見つけたら即座に全 SQL で使える可視索引を作る」という誤解。実際は不可視で作成 → 検証 → 合格したものだけ可視化という段階を踏む(退行防止)。
コマンド例と想定される挙動(未実行)
候補索引はまず不可視(INVISIBLE)で作成され、検証に合格したものだけが可視(VISIBLE)になる。
利用条件:Automatic Indexing が使えるのは Enterprise Edition on Engineered Systems(Exadata。Oracle Database Appliance は対象外)と Oracle Exadata Database Service で、Standard Edition 2 およびオンプレミスの Enterprise Edition では利用できない。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)

無料サンプルはここまでです。全問に挑戦するには6ヶ月アクセスパス(1回払い・自動更新なし)をご利用ください。ログインすると、間違えた問題だけを集めて復習できます。

料金プランを見る