対策する資格
Java Silver ・ 近日ORACLE Silver ・ 近日
ORACLE Master Gold1Z0-083

無料サンプル問題

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

※ サンプルは実際の例題です。各問の「正解・解説を見る」を開くと、正解・詳細解説・ひっかけが表示されます。 全 20 問のうち 20 問を無料公開しています。
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
✓ 正解:BGold監修

解説

マルチテナント環境では、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)
Gold 保有者による書き下ろし解説・実機で検証済
Q2マルチテナント(プラグイン違反)難易度 高無料

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

SQL> ALTER PLUGGABLE DATABASE sales OPEN;
Pluggable database altered.

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

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

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

解説

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

WARNING レベルの違反が残っている状態で OPEN すると、PDB は開くものの RESTRICTED モード(RESTRICTED=YES)で開く。これは「管理者に未解決の問題があることを気付かせ、修正させる」ための安全装置である。 一般ユーザーは RESTRICTED SESSION 権限を持たない限り接続できない。

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

各誤答が違う理由
  • AWARNING レベルでは OPEN 自体は成功する(失敗=エラーで開けないのは別物)。文も "Pluggable database altered." を返している。
  • C違反が記録されている以上、通常モード(RESTRICTED=NO)では開かない。WARNING は「無視」されない。
  • DREAD ONLYOPEN READ ONLY を明示した場合の状態。違反による自動降格は READ ONLY ではなく RESTRICTED モード。
ひっかけ: 「違反があれば OPEN できない(=A)」あるいは「警告くらいなら普通に開く(=C)」と二択で誤りがち。 正解は開くが RESTRICTED に降格という中間挙動。RESTRICTEDREAD ONLY の混同(B vs D)も頻出。
実機確認の答え合わせ
SELECT name, open_mode, restricted FROM v$pdbs WHERE name='SALES';
→ SALES / READ WRITE / YES
解消後の再OPENで restricted=NO に戻る。
Gold 保有者による書き下ろし解説・実機で検証済
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
✓ 正解:BGold監修

解説

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=必ずフル直後からの全変更」と誤解しやすい。
Gold 保有者による書き下ろし解説・実機で検証済
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
✓ 正解:BGold監修

解説

データファイルのリカバリ手順は、それがクリティカル(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)
Gold 保有者による書き下ろし解説・実機で検証済
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
✓ 正解:AGold監修

解説

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)が違う。
Gold 保有者による書き下ろし解説・実機で検証済
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
✓ 正解:BGold監修

解説

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')
Gold 保有者による書き下ろし解説・実機で検証済
Q7データポンプ(impdp)難易度 高無料

ターゲットスキーマには、ダンプに含まれる表 EMP既に存在し、行データも入っている。次の impdp を実行した(TABLE_EXISTS_ACTIONCONTENT も指定していない)。

$ impdp hr/pw DIRECTORY=dp_dir DUMPFILE=hr.dmp TABLES=EMP

EMP に対する既定の挙動として正しいものを選べ。(単一選択)

  1. A既存の EMP はスキップされ、ダンプの EMP は取り込まれない(既定 = SKIP
  2. B既存行は保持され、ダンプの行が追記される(既定 = APPEND
  3. C既存の EMPTRUNCATE され、ダンプの行で置き換わる(既定 = TRUNCATE
  4. D既存の EMPDROP され、表ごと作り直される(既定 = REPLACE
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AGold監修

解説

Data Pump Import の TABLE_EXISTS_ACTION は、取り込み先に同名の表が既にある場合の動作を制御する。取り得る値は SKIP / APPEND / TRUNCATE / REPLACE の4つ。

既定値は SKIP である(メタデータも含めて取り込む通常モードの場合)。 SKIP は「既存表には手を触れず、その表の取り込みを丸ごとスキップする」。よって既存の EMP はそのまま、ダンプの EMP は取り込まれない。

重要な例外:CONTENT=DATA_ONLY を指定した場合は、SKIP が使えないため既定が APPEND に変わる。 本問は CONTENT 未指定(=ALL)なので既定は SKIP

各誤答が違う理由
  • BAPPEND は明示指定したとき、または CONTENT=DATA_ONLY 時の既定。本問(CONTENT 未指定)の既定ではない。
  • CTRUNCATEREPLACE はいずれも明示指定が必要で、既定にはならない。既定で破壊的動作をしないのが安全側の設計。
  • DTRUNCATEREPLACE はいずれも明示指定が必要で、既定にはならない。既定で破壊的動作をしないのが安全側の設計。
ひっかけ: 「データを入れ直すツールだから既定で上書き(TRUNCATE/REPLACE)だろう」という直感が罠。 既定は非破壊の SKIP。さらに CONTENT=DATA_ONLY のときだけ既定が APPEND に変わる、という条件分岐が最大のひっかけ。
⚠️ この問題は版・既定値などで取り違えやすい論点を含みます(要確認タグ)。
Gold 保有者による書き下ろし解説・実機で検証済
Q8性能診断(AWR / STATISTICS_LEVEL)難易度 標準無料

AWR(Automatic Workload Repository)の自動スナップショットが取得されなくなった。調査すると初期化パラメータが次のようになっていた。

SQL> SHOW PARAMETER statistics_level
NAME              TYPE    VALUE
----------------- ------- -------
statistics_level  string  BASIC

この設定と AWR の関係として正しいものを選べ。(単一選択)

  1. ASTATISTICS_LEVEL=BASIC は AWR の自動スナップショット採取を無効化する。TYPICAL 以上に戻す必要がある
  2. BSTATISTICS_LEVEL は AWR と無関係。スナップショットが採れないのは別原因である
  3. CBASIC はむしろ詳細統計を増やす設定で、AWR は正常に動作するはず
  4. DAWR を動かすには STATISTICS_LEVEL=ALL が必須で、TYPICAL では不足する
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AGold監修

解説

AWR の自動スナップショット採取は STATISTICS_LEVEL に依存する。値は3段階:

  • BASIC 自動統計収集機能の大半(AWR 自動スナップショット、ADDM、各種アドバイザ等)を無効化する。手動でスナップショットは取れても自動採取は止まる。
  • TYPICAL(既定): 一般的に必要な統計を収集。AWR は正常動作。通常はこれを使う。
  • ALL TYPICAL に加え OS 統計・実行計画の行ソース統計など追加情報も収集(オーバーヘッド増)。

したがって BASIC のままだと自動 AWR スナップショットが採取されない。TYPICAL(または ALL)へ戻せばよい。

各誤答が違う理由
  • BSTATISTICS_LEVEL は AWR/ADDM の前提パラメータであり、無関係ではない。
  • CBASIC は「詳細を増やす」のではなく自動統計を止める設定。説明が逆。
  • DAWR は TYPICAL で十分動作する。ALL は必須ではない(むしろ常用は過剰)。
ひっかけ: BASIC を「軽い・無害」と捉えるが、実際は自動診断基盤を止める強い副作用がある。 また「より詳しく診断したいなら ALL が必要(D)」という過剰要求の誤り。AWR 自体は TYPICAL で足りる。
⚠️ この問題は版・既定値などで取り違えやすい論点を含みます(要確認タグ)。
Gold 保有者による書き下ろし解説・実機で検証済
Q9領域管理(セグメント縮小 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
✓ 正解:AGold監修

解説

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 起因だがエラー番号が異なる点に注意。
Gold 保有者による書き下ろし解説・実機で検証済
Q10権限(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
✓ 正解:BGold監修

解説

システム権限オブジェクト権限で、再付与した相手への取消の連鎖(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)。
Gold 保有者による書き下ろし解説・実機で検証済
Q11マルチテナント(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
✓ 正解:BGold監修

解説

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 はクローズされる。
Gold 保有者による書き下ろし解説・実機で検証済
Q12マルチテナント(アプリケーションコンテナ)難易度 高無料

アプリケーションコンテナのアプリケーションルート(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
✓ 正解:BGold監修

解説

アプリケーションコンテナでは、アプリケーションルートでアプリケーションのインストール/アップグレード/パッチを行い(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)も狙い。
Gold 保有者による書き下ろし解説・実機で検証済
Q13RMAN(ブロックメディアリカバリ 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
✓ 正解:BGold監修

解説

ブロックメディアリカバリ(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 の対象になる)
Gold 保有者による書き下ろし解説・実機で検証済
Q14RMAN(増分更新イメージコピー)難易度 高無料

高速リカバリ(リストア時間最小化)を狙い、次の 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
✓ 正解:AGold監修

解説

「増分更新イメージコピー」は、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 コピー)が作られる。
⚠️ この問題は版・既定値などで取り違えやすい論点を含みます(要確認タグ)。
Gold 保有者による書き下ろし解説・実機で検証済
Q15Flashback(保証付きリストアポイント)難易度 標準無料

リスクの高いアプリ移行作業の直前の状態へ、失敗時に確実に 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
✓ 正解:AGold監修

解説

保証付きリストアポイント(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)も頻出。
Gold 保有者による書き下ろし解説・実機で検証済
Q16統合監査(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, UPDATE, 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
✓ 正解:AGold監修

解説

統合監査では、監査は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)に引っ張られるのも罠。純粋統合監査ではこのパラメータは無視される。
Gold 保有者による書き下ろし解説・実機で検証済
Q17リソースマネージャ(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
✓ 正解:BGold監修

解説

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 キャップの区別が頻出ポイント。
Gold 保有者による書き下ろし解説・実機で検証済
Q18領域管理(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
✓ 正解:BGold監修

解説

ヒープ表の移動には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 になることを忘れて再構築を怠ると、その索引が使われずに性能劣化する点も実務の罠。
Gold 保有者による書き下ろし解説・実機で検証済
Q19オプティマイザ統計(保留統計)難易度 標準無料

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

-- ① この表の統計を「保留(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
✓ 正解:BGold監修

解説

保留統計(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 なら公開されず保留
Gold 保有者による書き下ろし解説・実機で検証済
Q20SQL 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
✓ 正解:BGold監修

解説

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 するしかない、は誤り。
ひっかけ: 「オプティマイザは常に最小コスト計画を選ぶ」という基本則が、ベースラインがあると上書きされる点。 ベースライン下では“承認済みの中で”最小コストを選ぶのであり、未承認の新計画はコストが低くても使われない。安定性を取るための意図的な振る舞い。
Gold 保有者による書き下ろし解説・実機で検証済

20 問・本番形式の模試・弱点優先の出題は今後のアップデートで開放予定です。

料金プランを見る