連載
» 2018年05月22日 05時00分 公開

ORACLE MASTER Silver Oracle Database 12cの攻め方(4):12c Silver試験の「領域の管理」「UNDOデータの管理」「データの並行性の管理」に関するポイント

「ORACLE MASTER Silver Oracle Database 12c」資格を取得するための傾向と対策を紹介する連載。今回のテーマは、「領域の管理」「UNDOデータの管理」「データの並行性の管理」です。

[河邊ふくゑ,日本オラクル オラクルユニバーシティ]
「ORACLE MASTER Silver Oracle Database 12cの攻め方」のインデックス

ORACLE MASTER Silver Oracle Database 12cの攻め方

 本連載では、「ORACLE MASTER Silver Oracle Database 12c」(以下、12c Silver)資格を取得するための「1Z0-062-JPN Oracle Database 12c Administration試験」(以下、12c Silver試験)の傾向と対策を紹介します。

 初回は、ORACLE MASTERの資格制度や2017年8月に行われた12c Silver試験改訂のポイントを紹介しました。連載第2回から例題を使って、主要出題分野のポイントを押さえています。

 今回は、領域の管理、UNDOデータの管理、データの並行性の管理について見ていきます。

領域の管理

 領域の管理は、試験範囲が限られているので、正確に理解すれば確実な得点源になります。自動セグメント領域管理、圧縮、「セグメント・アドバイザ」、セグメント縮小が重点出題ポイントです。また、改訂前は再開可能領域割り当てと領域使用量の予防的な監視の出題がありましたが、改訂により、これらのトピックは試験内容チェックリストから除外されました。

例題1

あなたは、次のような条件の表(テーブル)を作成しようと考えています。

  • 大量のデータを格納することになる
  • ディスク領域を節約する必要がある
  • オンライントランザクションにより、通常のデータ挿入、更新が頻繁に発生するが、そのパフォーマンスは維持する必要がある
  • アプリケーションを改修することはできない

CREATE TABLE文の中で、どのオプションを使用しますか。

  • A. COMPRESS
  • B. ROW STORE COMPRESS ADVANCED
  • C. SHRINK SPACE COMPACT
  • D. COLUMN STORE COMPRESS FOR QUERY HIGH
  • E. ENCRYPT

 表の圧縮に関する問題です。表圧縮については、以前のリリースから少し変更があるので、要チェックです。また、この例題のように、複数の条件を提示されるタイプの出題はよくあります。このタイプの出題では、条件と選択肢の両方を見て検討するといいでしょう。

 さて、例題の条件を見てみますと「大量のデータ」「ディスク領域を節約」という条件から圧縮のオプションが考えられます。また、オンライントランザクションで通常のデータ挿入、更新も頻繁に行うことから、通常のDMLも圧縮の対象となる高度な行圧縮のオプションが最適です。高度な行圧縮はアプリケーションに影響を与えません。

A. 基本表圧縮のオプションです。基本表圧縮では、「ダイレクト・パス・インサート」で挿入された行のみが圧縮の対象となります。

B. 正解です。高度な行圧縮のオプションです。

C. ALTER TABLE文のオプションで、セグメント縮小を行うときに使用します。セグメント縮小は、行データの削除による領域の断片化を解消する目的で使用します。COMPACTを付けないと同じタイミングで最高水位標の引き下げも行われ、結果、エクステントの解放も行われますが、半面、ロックが掛かるというデメリットがあります。COMPACTを付けると行を移動することで領域の断片化の解消は行われますが、最高水位標は変更されません。ロックを許容できるタイミングでCOMPACT句なしでこのコマンドを再発行し、最高水位標を引き下げます。

D. 「COLUMN STORE COMPRESS」という句からも分かるように、行圧縮ではなく、ハイブリッド列圧縮です。さらに「FOR QUERY」とあるので、データウェアハウス向けの圧縮です。

E. 透過的データ暗号化のオプションです。


 次は、自動セグメント・アドバイザに関する例題です。

例題2

自動セグメント・アドバイザについて正しい説明を選択してください(2つ選択してください)。

  • A. オプティマイザ統計が失効しているセグメントを識別し、統計収集コマンドを推奨する機能である
  • B. 領域のクリティカルまたは警告の閾(しきい)値を超えた表領域は自動セグメント・アドバイザの分析の対象である
  • C. 推奨事項として、高度な行圧縮が推奨されることもある
  • D. 自動セグメント・アドバイザにより、断片化の多い表が自動的にセグメント縮小され、領域が再生される
  • E. 実際のワークロードを元にアクティビティーが多いセグメントについて、索引作成やパーティション化などを推奨する機能である

 自動セグメント・アドバイザは、自動化メンテナンスタスクの1つで、セグメント縮小の効果が期待できるオブジェクトを提案する機能です。手動でのセグメント・アドバイザと異なり、高度な行圧縮の効果が期待できるオブジェクトも提案します。

 また、自動セグメント・アドバイザの分析対象は、次の通りです。

  • クリティカルまたは警告の閾値を超えた表領域
  • アクティビティーが最も多いセグメント
  • 増加率が最も高いセグメント

 自動セグメント・アドバイザの分析対象は変更できませんので、これ以外のセグメントについて分析したい場合は、手動でセグメント・アドバイザを実行する必要があります。

A. 自動オプティマイザ統計収集により、自動的にオプティマイザ統計は取得されます。

B. 正解です。

C. 正解です。

D. セグメント縮小の推奨は出しますが、自動的に縮小まで行うわけではありません。

E. 実際のワークロードを元に、索引作成やパーティション化などを推奨する機能は、SQLアクセス・アドバイザです。


UNDOデータの管理

 UNDOデータの管理については、まずはUNDOの仕組みや用語をしっかり確認した上で、UNDO関連の初期化パラメーターやコマンドを押さえておくとよいでしょう。UNDO保存保証やOracle Database 12cからの新機能である一時UNDOが頻出ポイントです。

例題3

UNDO表領域をAUTOEXTEND ONで作成しました。UNDO保存保証の設定はデフォルトのままです。また、UNDO_RETENTIONは1200に、TEMP_UNDO_ENABLEDはTRUEに設定しています。正しい説明はどれですか。

  • A. 新規トランザクションに対するUNDOを格納するため、アクティブなUNDOが上書きされる可能性がある
  • B. 期限切れでないUNDOを保持するため、新規トランザクションが失敗する可能性がある
  • C. 長時間実行問い合わせで、「スナップショットが古過ぎます」というエラーが発生する可能性がある
  • D. 期限切れでないUNDOを保持するため、新規トランザクションが一時表領域に書き込まれる可能性がある

 UNDO_RETENTIONとUNDO保存保証に関する正誤問題です。

 ここで、UNDOの状態とUNDO保存期間の関係を整理しておきます。

  • アクティブなUNDO
    未コミットのトランザクションによるUNDO。これは決して上書きされることはない
  • 期限切れでないUNDO
    コミットされたトランザクションによるUNDOのうち、UNDO_RETENTIONパラメーターで設定した保存期間内のUNDOのこと。UNDO保存保証が設定されていない場合、上書きされる可能性がある
  • 期限切れのUNDO
    コミットされたトランザクションによるUNDOのうち、保存期間が過ぎたUNDOのこと。これは上書き可能

 また、この設問ではUNDO保存保証はデフォルトの設定とありますが、UNDO保存保証のデフォルトは「RETENTION NOGUARANTEE」、つまり「期限切れでないUNDO」であっても、非アクティブであれば、新規トランザクションのために上書きされる可能性があります。

A. アクティブなUNDOは決して上書きされることはありません。

B. RETENTION GUARANTEEに設定している場合の説明です。

C. 正解です。自動拡張の上限まで拡張したケースなど、期限切れでないUNDOは上書きされる可能性があります。

D. TEMP_UNDO_ENABLEDは一時UNDOを有効化するパラメーターですが、期限切れでないUNDOを保持するために新規トランザクションを一時表領域に書き込む機能ではありません。


 次は、一時UNDOについての出題です。

例題4

あなたは一時表へのトランザクションが多いことに気付き、TEMP_UNDO_ENABLEDをTRUEに変更することにしました。どのような変化が想定されますか(2つ選択してください)。

  • A. UNDO表領域の使用量が減る
  • B. REDOログの生成量が増える
  • C. 一時表領域の使用量が増える
  • D. 一時表へのトランザクションはロールバックできなくなる

 一時UNDOは、一時表へのトランザクションにより生成されるUNDOを、通常の永続表へのトランザクションにより生成されるUNDO(「永続表のUNDO」と呼びます)と区別して管理するための機能です。一時UNDOはUNDO表領域ではなく一時表領域に格納します。また一時表へのトランザクションによるUNDOですから、永続表のUNDOと違い、REDOを生成する必要もありません。一時UNDOはTEMP_UNDO_ENABLEDパラメーターをTRUEに設定すると有効になりますが、デフォルトでは無効になっています。

A. 正解です。

B. REDOログの生成量は減ります。

C. 正解です。

D. 一時UNDO自体は生成するので、一時表へのトランザクションがロールバックできなくなるわけではありません。


データの並行性の管理

 出題数は多くはありませんが、ロックメカニズムやロック競合の監視、ロック競合の解消が出題されることがあります。DML時に取得されるロックの種類や、どのようなケースでロック待ちになるのか、といったことを一通り軽く確認しておくといいでしょう。

例題5

次のSQL文を実行したときに自動的に取得されるロックについて正しい説明を選択してください。

UPDATE employees SET job_id=10 WHERE employee_id=100;

  • A. 行ロックのみが取得される
  • B. 表ロックのみが取得される
  • C. 列ロックのみが取得される
  • D. 行ロックと表ロックが取得される
  • E. 手動でロックを取得する必要がある

 INSERT、UPDATE、DELETE、MERGE、SELECT〜FOR UPDATEでは、変更される行に行ロックが取得され、トランザクションが終了するまで保持されます。また、その操作対象の表に対するDDL操作と競合しないように表ロックも取得されます。表ロックについては「行排他」「行共有」などのモードがあり、自動的に最適なモードのロックが取得されます。

 設問の例では、「employee_id=100」の行に対する行ロックと、RXモード(行排他モード)の表ロックが取得されます。

 なお、設問のような状況で、「他のセッションで、どのようなSQLを実行するとロック待ちの状態になるか」も確認しておくとよいでしょう。

A. 間違いです。

B. 間違いです。

C. 列ロックという種類のロックはありません。

D. 正解です。

E. 間違いです。




 今回は、領域の管理、UNDOデータの管理、データの並行性の管理をテーマに見てきました。特に領域の管理とUNDOデータの管理を重点的に確認するとよいでしょう。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。