Oracle DBA Gold試験に関する試験メモ＆感想

# 概要
【内容】
Oracle DBA Gold（12c）の試験勉強用のメモ、受験に関する感想のまとめ。
<font color="Red">※12cの感想になるため、19cで追加になった範囲や、変更になった個所は未対応。</font>
【想定読者】
Oracle DBA Goldの受験を考えている方、受験勉強中の方。
<font color="Red">※BronzeやSilverで学ぶことはある程度理解できている前提。REDOやRMAN、データベースリプレイとは何かなど下位試験の用語の説明は割愛。</font>

# 目次
[1.リカバリマネージャーでのバックアップとリカバリ](#1-リカバリマネージャーでのバックアップとリカバリ)
[2.リカバリカタログ](#2-リカバリカタログ)
[3.バックアップの計画と種類](#3-バックアップの計画と種類)
[4.バックアップ情報の表示](#4-バックアップ情報の表示)
[5.バックアップの圧縮と暗号化](#5-バックアップの圧縮と暗号化)
[6.ブロック破損](#6-ブロック破損)
[7.リストアとリカバリの実行](#7-リストアとリカバリの実行)
[8.Oracleセキュアバックアップ](#8-oracleセキュアバックアップ)
[9.フラッシュバック](#9-フラッシュバック)
[10.データの転送](#10-データの転送)
[11.Point-in-Timeリカバリ](#11-point-in-timeリカバリ)
[12.データベースの複製](#12-データベースの複製)
[13.RMANトラブルシューティング及びチューニング](#13-rmanトラブルシューティング及びチューニング)
[14.CDBとPDBの基本](#14-cdbとpdbの基本)
[15.CDBとPDBの作成](#15-cdbとpdbの作成)
[16.CDBとPDBの管理](#16-cdbとpdbの管理)
[17.CDBとPDBの表領域の管理](#17-cdbとpdbの表領域の管理)
[18.CDBとPDBでのセキュリティ管理](#18-cdbとpdbでのセキュリティ管理)
[19.CDBとPDBのバックアップとリカバリとフラッシュバック](#19-cdbとpdbのバックアップとリカバリとフラッシュバック)
[20.マルチテナント環境のパフォーマンス管理](#20-マルチテナント環境のパフォーマンス管理)
[21.マルチテナント環境での各ユーティリティの使用について](#21-マルチテナント環境での各ユーティリティの使用について)
[22.試験の感想や勉強方法等](#22-試験の感想や勉強方法等)

# 1. リカバリマネージャーでのバックアップとリカバリ
①RMAN（リカバリマネージャー）で使用するコマンドのほとんどは末尾に";"が必要。
②制御ファイルの自動バックアップはデフォルトでoffなので、onにすることが推奨されている。
③SYSBACKUP権限で接続する際には、rman target '" / as SYSBACKUP "'といった形で権限をシングルクォーテーションとダブルクォーテーションで囲む必要がある。

# 2. リカバリカタログ
①バックアップ情報を長期間保存できる<font color="Red">※リカバリカタログを用いない場合、制御ファイルに保存されるバックアップ情報はデフォルトでは7日で上書きされる。</font>
②RMANのストアドスクリプトを登録できる。
③リカバリカタログには同一のDBIDのDBは登録できない。

# 3. バックアップの計画と種類
■バックアップ計画
①全体及び増分バックアップ
・リカバリ方法：全体バックアップをリストア後、増分バックアップ、アーカイブログをリストア。
・活用シーン：数時間/数日のRTO(リカバリ時間目標)が許容される場合、ディスクが不足している場合。
②増分更新バックアップ
・リカバリ方法：事前に増分バックアップをイメージコピーに適用（RECOVER COPY OF...を使用）。
・活用シーン：数時間のRTOしか許容できない場合、データベースと同じサイズの領域をディスクに割り当てられる場合。
③フィジカルスタンバイデータベースへのオフロード・バックアップ
・リカバリ方法：プライマリデータベースと同期されているバックアップをリストア。
・活用シーン：数分間のRTOしか許容できない場合、フィジカルスタンバイデータベースに記憶域が割り当てられる環境。

■バックアップの種類
①バックアップセット
概要：データファイルを圧縮してバックアップ。未使用領域をスキップしてバックアップするので、ファイルサイズが小さくなる。
バックアップ形式：ディスク、SBT（System Backup to Tape）。
②イメージコピー
概要；データファイルをそのままコピー。SWITCHを使用することでコピー側を参照するように切り替えることができる。指定するファイル名は入れ替えたいファイル名。
バックアップ形式：ディスクのみ。

■その他
①ブロックチェンジトラッキング
概要：変更箇所を記憶しておくため、高速増分バックアップが可能。増分バックアップ8個分を記憶しておける。
<font color="Red">※リカバリに関係するため、高速リカバリ領域に格納できそうだが、トラッキングファイルは高速リカバリ領域に格納できない。</font>

# 4. バックアップ情報の表示
■コマンドの使用
①LIST：バックアップセットやイメージコピーの情報を表示できる。イメージコピーはCOPY、バックアップセットはBACKUPを指定。
②REPORT NEED BACKUP：バックアップが必要なデータファイル（バックアップされていない）を表示。
■SQLで取得
下記の動的ビューから取得が可能。
①V$BACKUP_SET：作成済みのバックアップセット
②V$BACKUP_FILES：作成済みのバックアップファイルの情報

# 5. バックアップの圧縮と暗号化
■圧縮
①バックアップセットで圧縮する際の圧縮アルゴリズムはHIGH、MEDIUM、LOW、BASIC。
デフォルトはBASIC。HIGHは圧縮率が高いが圧縮/解凍で用いるCPUリソースが大きい。
BASICはHIGHとMEDIUMの間でちょうど良い圧縮率。
<font color="Red">※BASIC以外はOracle Advanced Compressionのオプションを適用しないと使用できない。</font>
■暗号化
RMANでバックアップ時に暗号化が可能。暗号化可能なのはバックアップセットのみ。
①パスワード暗号化
バックアップ時にパスワードを指定し、リストア時にパスワードの入力が求められる。
暗号化はRMANセッションの間のみ有効。
②透過的データ暗号化
キーストアに格納されているキー（暗号化の鍵）を用いて暗号化を行う。SYSKMユーザを用いる。
キーストアがオープンしていないと使用できない。
③デュアルモード暗号化
①②を併用し、バックアップ時にパスワードの指定とキーの双方が必要。
複合化時にはパスワード、もしくはキーどちらか一方で複合化を行う。

# 6. ブロック破損

①物理破損
メディア破損など。RMANのVALIDATEコマンドでチェックできる。
②論理破損
アクセスはできるが、Oracleのブロックとしては異常。

# 7. リストアとリカバリの実行
①SET NEWNAMEを使用したリストア
デフォルト以外の場所にリストアを行いたい場合に使用。
SET NEWNAME→RESTORE→SWITCH→RECOVERの順で実施。<font color="Red">※制御ファイルに持っているデータファイルの名称を書き換えるために、SWITCHを実行。</font>
②リストアポイント
現在、またはある時点や特定のSCN（システムチェンジナンバー）の断面に名前をつけて置くことができる。
フラッシュバックや不完全リカバリ時にどの時点に戻すかを指定できる。
過去を指定する場合は、AS OFをコマンドに指定。
③Point-int-Timeリカバリ
指定した時間、SCN、リカバリポイントまでの時点にリカバリが可能。指定した値は含まない。
例えば、SCNを10にした場合は、9の状態にリカバリされる。
SET UNTILで条件を指定し、RESTORE→RECOVERを実施。
④SPFILEのリストア
SPFILEのリストアはSTARTUP NOMOUNT→RESTORE SPFILE FROM AUTOBACKUP→STARTUP
<font color="Red">※本来SPFILEが存在しないとインスタンスの起動ができないが、仮のSPFILEをRMANが自動で用意するため、STARTUP NOMOUNTでインスタンスの起動ができる。</font>
⑤NOLOGGINGデータベースのリカバリ
REDOログが出力されないため、リカバリできない。NOLOGGINGでSQLを実行後、直ぐにバックアップを取得するしかない。
⑥REDOログの損失
REDOロググループのメンバーが一つでも正常であれば、インスタンスは停止せずにトランザクションの実行もできる。アラートログファイルにエラーメッセージが出力されているので、アラートログファイルを見て検知。
損失したREDOログをメンバから削除し、新たにREDOログをメンバに追加する。
REDOログが全損するとインスタンスが停止するので、1つ異常を検知するたびに対応する。
⑦索引表領域
バックアップからリストア、もしくは索引を再作成する。
⑧一時ファイルの損失
ORDER BY等で大量データのソート等をしない限り、DBの動作に問題ない。
裏で再作成されるが、元々と同じ場所に再作成するため、ディレクトリ構成が変わっていると再作成に失敗する。
⑨メディアリカバリ
メディア障害で物理的にファイルが壊れた状態を指す。下記の場合が該当。
・誤ってDROP TABLESPACE（表領域の削除）を実行した場合
・データファイルが破損した
・多重化された制御ファイルが全て破壊された
・多重化されたREDOログループ内のメンバの一部が破損した

# 8. Oracleセキュアバックアップ
■概要
SBTへのバックアップを行うMML（メディア管理ライブラリ）を提供する。OSB（Oracleセキュアバックアップ）をインストールしたクライアントのバックアップをSBTに取れるようになる。OSB側ではバックアップセットの中のバックアップピースをバックアップイメージとして持つ。バックアップセットの単位では持たないので、ファイルの削除等の操作はOSB側ではなく、RMAN側で行うこと。OSB側で削除を行った場合は、RMANのクロスチェックコマンドを実行。
■インストール
rootユーザを用いる。OracleセキュアバックアップHomeディレクトリを作成し、Homeディレクトリ内でセットアップを実行。
■機能
・MMLの提供
・暗号化機能
■記憶域セレクタ
RMANとOSBを紐づける。DBIDやデータベース名等から、どのメディアファミリにデータを記憶するか等を制御する。記憶域セレクタ経由でRMANからOSBに渡されるのは下記。
・データベース名
・DBID
・コピー番号
・コンテンツタイプ（アーカイブログ、自動バックアップ、増分バックアップ等の種類）

# 9. フラッシュバック
バックアップを使わずにDBを過去の状態に戻したり、リカバリに必要な情報を取得できる機能。
UNDOを用いるものが多い。
■フラッシュバック問い合わせ
特定の時間やSCNのデータを参照できる。SELECT文にAS OFを指定。UNDOを使用。
■フラッシュバックバージョン問い合わせ
特定の期間、SCNのFROM~TOに存在するデータのバージョンを表示する。一時表、外部表、ビューの問い合わせには使用できない。ビューの問い合わせには使用できないが、ビューの作成には使用できるので注意。
SELECT文にVERSIONS BETWEENを指定する。バージョンのカラムはversions_xid。UNDOを使用。
■フラッシュバック表
特定の時点の状態に表をアップデートしリカバリできる。データベースがOPEN中、かつオンラインで使用可能（但し処理中は該当の表はロックされる。）。行移動が有効化されている必要がある。FLASHBACK TABLEコマンドで実行できる。統計情報はフラッシュバックされない。一種のDMLなのでREDO、UNDOが作成される。ディクショナリやV$VIEWには使用できない。UNDOを使用。
■フラッシュバックトランザクション問い合わせ
特定のトランザクションのSQLを確認できる。また、該当のトランザクションを打ち消すSQLの確認もできる。FLASHBACK TRANSACTION QUERYコマンドで実行。UNDO/REDOを使用
■フラッシュバックトランザクションバックアウト
トランザクション単位で取り消しが可能。トランザクションの依存<font color="Red">※</font>を意識した取り消しが可能。サプリメンタル・ロギングが有効化されている必要がある。EMやTRANSACTION_BACKOUTプロシージャを用いる。デフォルトはNOCASCADEなので、依存関係があると失敗する。依存関係がある場合は、CASCADE（関連があるものすべてを取り消し）、NOCASCADE_FORCE（依存関係を無視して該当のトランザクションのみ打ち消す）、NONCONFLICT_ONLY（依存関係のないトランザクションのみ打ち消す）の何れかのオプションを用いる。
<font color="Red">※トランザクション1でROWカラムを1→2に変更→トランザクション2でROWカラムが2を条件にROWカラムを3に変更など、トランザクションが別のトランザクションに影響を及ぼす場合。</font>
■フラッシュバックドロップ
ゴミ箱から、DROPされた表を戻す。下記の場合はゴミ箱に表が存在しないので使用不可。
・DROP時にPURGE句を指定
・DROP TABLESPACE XX INCLUDING CONTENTSを使用
・DROP USER XX CASCADEを使用
・RECYCLEBINがOFF（デフォルトはON）
■フラッシュバックデータアーカイブ（一時履歴）
UNDOデータを長期間保存可能。フラッシュバック問い合わせなどで参照可能。
保存期間を指定したフラッシュバックデータアーカイブ領域を作成。アーカイブを残したい表に対し、ALTER TABLE XX FLASHBACK ARCHIVE アーカイブ名で実行。
ユーザコンテキスト（誰が実行したか等）の取得が可能。デフォルトはNONなので取得されない。
TYPICALまたはALLを指定すると取得できる。参照する場合は、フラッシュバックバージョン問い合わせ時のSLECTにGET_SYS_CONTEXTのカラムを指定。
■フラッシュバックデータベース
DB全体を特定の時点に戻す。FLASHBACK DATABASE TO 'XX'コマンドで実行。フラッシュバックログとREDOを使用。フラッシュバックログは高速リカバリ領域にのみ格納できる。DBをMOUNTモードにして実行。最少サプリメンタルロギングの設定は不要。
実行には下記のどちらかが必要。
・フラッシュバックロギングの有効化
・保証付きリストアポイントの作成
下記の場合は実行不可。
・制御ファイルがリストア、または再作成されている場合
・表領域が削除されている場合
・データファイルのサイズが縮小されている場合
■保証付きリストアポイント
・常に該当のSCNまでフラッシュバックデータベース出来ることを保証する。

# 10. データの転送
■概要
プラットフォーム間でデータベース、データファイル、表領域の転送が可能。
イメージコピー、及びバックアップセットどちらも可能。
■条件
RMANを使用する、かつ同一エンディアン形式間以外の場合は、読み取り専用にする必要がある。<font color="Red">※バックアップセットの場合はCOMPATIBLE12:0以上。（12cからバックアップセットのデータ転送が可能になったため。）</font>
■手順
①表領域
・イメージコピーの場合：dumpを使用してメタデータを抽出→エンディアンが異なる場合はRMANのCONVERT TABLESPACEで変換→データファイルとdumpを転送→転送先でdumpをインポート→表領域をREAD WRITEにする。
・バックアップセットの場合：RMANのBACKUPコマンドを使用しバックアップセットとしてデータとメタデータを出力。BACKUPOコマンド使用時にTO PLATFORM句（ソースデータベースで変換）またはFOR TRANSPORT句（ターゲットデータベースで変換）、DATAPUMP句（メタデータの出力先）を指定しエンディアン変換。→RMANのRESTOREコマンドにFOREIGN（外部から持ってきたファイルを使用するため）を指定し実行。→表領域をREAD WRITEにする。
②データベース転送
・イメージコピーの場合：データベースをREAD ONLYにする→CONVERT DATABASE TO PLATFORMまたはCONVERT DATABASE ON TARGETを使用し内部的に必要な変換と制御ファイルやREDOの再作成用のスクリプトを生成。→データベースを転送。
・バックアップセットの場合：データベースをREAD ONLYにする→→RMANのBACKUPコマンドを使用しバックアップセットとしてデータとメタデータを出力。BACKUPOコマンド使用時にTO PLATFORM句（ソースデータベースで変換）またはFOR TRANSPORT句（ターゲットデータベースで変換）を指定し内部的に必要な変換を実行。→RMANのRESTOREコマンドにFOREIGN（外部から持ってきたファイルを使用するため）を指定し実行。→表領域をREAD WRITEにする。<font color="Red">※イメージコピーと違い制御ファイル等の再作成スクリプトが作成されないので、手動で作成が必要。</font>
③一貫性がない表領域の転送
・BACKUPコマンドの実行時にALLOW INCONSISTENTを指定し、一貫性がないバックアップを取得。→RESTORE FOREIGN TABLESPACEでリストア→RECOVER FOREIGN DATAFILECOPYでリカバリ。

# 11. Point-in-Timeリカバリ
特定時点の状態へ戻す不完全リカバリ。以降PITRと記載。
■手順
①表領域のPITR
PTIRに必要なチャネルを構成→RECOVER TABLE SPACEコマンドにAUXILIARY DESTINATIONを使用して補助インスタンス（ある時点の状態にリカバリしているデータベースのインスタンス）の出力先を指定し実行→バックアップを取得しデータベースをオンラインにする。
<font color="Red">※リカバリカタログがない、かつUNDOの場所を変更している場合はUNDO TABLE SPACE句を指定しUNDOの場所を明示する。</font>
②データベース全体のPITR
条件：アーカイブログモード、表または表パーティションをリカバリする場合はCOMPATIBLE12.0以上、SYAスキーマーやSYSTEM、SYSAUX、スタンバイデータベースは対象外。
手順：下記のコマンドを実行。
RECOVER TABLE テーブル名 UNTIL SCN XX AUXILIARY DESTINATION 補助インスタンスの出力先

# 12. データベースの複製
バックアップからリストア、またはDUPLICATEコマンドを用いる。DUPLICATEコマンドを用いるとDBIDが重複しないので、複製したDBをリカバリカタログに登録できる。
■アクティブなデータベースの複製
①イメージコピーに基づいた複製（プッシュメソッド）
DUPLICATEコマンドの実行時にFROM ACTIVE DATABASEを指定。ネットワークを用いるので、ファイルサイズが大きいと推奨しない。ターゲットのチャネルを使用。
②バックアップセットに基づいた複製（プルメソッド）
DUPLICATEコマンドを使用する際に、SET ENCRIPTION、USING BACKUPSET、SECTION SIZE、USING COMPRESSED BACKUPSETの何れかを指定した場合にこちらを実行。補助インスタンス側のチャネルを使用。
■ターゲット接続を使用したデータベースの複製
RMANのバックアップからデータベースを複製。バックアップ情報はターゲットデータベースの制御ファイルから取得。
■ターゲット接続をせず、リカバリカタログを使用したデータベースの複製
RMANのバックアップからデータベースを複製。バックアップ情報はリカバリカタログから取得。
■ターゲット接続をせず、リカバリカタログも使用しないデータベースの複製
RMANのBACKUPコマンド実行時にLOCATIONでバックアップの場所を指定。その際に指定した場所からバックアップを取得。
■DUPLICATEコマンドを使用した複製の手順
補助インスタンス用のパスワードファイルを作成→補助インスタンスへのOracle Net接続を確立→補助インスタンス用の初期化パラメータファイルを作成→補助インスタンスをNO MOUNTモードで起動→ターゲットデータベースをMOUNT、またはOPEN→バックアップ及びREDOログファイルが使用可能であることを確認→補助チャネルを割り当てる→DUPLICATEコマンドを実行

# 13. RMANトラブルシューティング及びチューニング
■パフォーマンスボトルネックの診断
V$BACKUP_ASYNC_IO（またはSYNC）のAGGREGATE行のEFFECTIVE_BYTES_PER_SECOND列（1秒当たりのファイル転送のバイト数）を問い合わせる。ストレージメディアのスループットよりも小さい場合は、BACKUP VALIDATEで追加情報を取得。（BACKUP VALIDATEはバックアップはせずに、ブロック検証を行う。ブロック検証のために、読取りを行うので、読み込み時間の検証に用いることができる。）
バックアップは読取り→コピー→書き込みの順で行われるので、どのフェイズの時間に処理がかかっているかを診断。
■パフォーマンスボトルネックの診断（読取りフェイズ）
BACKUP VALIDATEの時間が実際のBACKUP時間と近い場合は、読み込みに時間がかかっている。
読取りに時間がかかる原因はIO競合の可能性が高い。対応としてRMANを多重化する。
■パフォーマンスボトルネックの診断（書き込みフェイズ）
BACKUP VALIDATEの時間が実際のBACKUP時間より短い場合は、書き込みがボトルネックの可能性が高い。
該当のディスク上にファイルを作成し、どのくらい時間が掛かっているかを確認。もしくはRMNAのDBMS_BACKUP_RESTORE.SETPARMSファンクションを使用して書き込みを起動する。
対応としてはバックアップの圧縮や、暗号化している場合は暗号化のレベルをMEDIUNやLOWに下げるなどを検討する。
■RMANジョブの進捗状況の監視
RAMNの進捗状況の監視にはV$SESSION_LONGOPSを用いる。SOFAR列に進捗状況が出ているので、SOFAR/TOTAL_WORKで進捗率を求めることができる。
■非同期IOのボトルネック
V$BACKUP_ASYNC_IOを用いて監視。IO_COUNT列（実行されたIOの数）に対するLONG_WAIT（バックアップ/リストアプロセスがIOの完了を待機するようにOSに指示した回数）の割合が最も高いファイルがボトルネックの可能性が高い。
■同期IOのボトルネック
そもそも同期IOは同期のために待ちが発生するため、ボトルネックになる可能性が非常に高い。V$BACKUP_SYNC_IOのDISCRETE_BYTES_PER_SECOND（1秒当たりの転送率）とデバイスの最大転送率を比較して、チューニングの余地がないかを確認。
■RMANのバックアップパフォーマンスのチューニング
・割り当てられているチャネルからRATE設定（オンラインバックアップでDBに負荷をかけたくない場合にかける制限）を解除。
・同期IOを使用する場合は、DBWR_IO_SLAVESパラメータを設定する。SLAVEプロセスを用いて非同期IOのシミュレーションが可能。SGAを用いるのでLARGE_POOL_SIZE初期化パラメータの設定が必要。
・バックアップセットのパラレル化
複数チャネルを用いて、バックアップセット取得時にパラレルでバックアップを取得できるようにする。
IO競合が起こらないように確認。
■RMANの多重化
1つのチャネルによって複数のファイルを読み書きする。読み込んだファイルのIOが競合化しないように内部で調整を行う。
# 14. CDBとPDBの基本
■概要
CDBとPDBはマルチテナント・アーキテクチャ（データベースの中に複数のデータベースを作成できる）の内部で使用されるデータベース。CDBの中に複数のPDBを作成し管理することで、複数のアプリケーションで使っているDBを一元管理できる。また、インスタンスとDBが1対多になる。
SCHEMA単位でデータを論理的に分割しSCHEMAを統合し管理する場合は、個々のDBに関連性が生れるが（ユーザが独立しない、独立した起動停止は不可）、PDBは独立したデータベースになるので、複数のDBを一つにまとめつつそれぞれのDBを独立させるといった要件を満たす事ができる。また、パッチの適用を一括でできる（CDBにパッチを当てると配下のPDB全てにパッチが適用される）など保守のコストを減らすことができる。
■CDBとPDBの詳細
・非CDB（従来のDB）：インスタンスとDBが1対1の従来のDB。<font color="Red">Oracle21Cからはサポート対象外になる模様。</font>
・CDB（コンテナデータベース）：PDBを格納する大元のDB。インスタンスはCDBに紐づく。制御ファイルやREDOログファイル、システム表領域の共有部分等はCDBに持つ。
・PDB（プラガブルデータベース）：CDBの中に作成する独立したDB。独立したデータベースなので、表領域やユーザはそれぞれのPDBに同じ名称のものが存在しても問題ない。独自の表領域やシステム表領域内のPDB毎に異なる部分を持つ。PDBは独立しているため、他のPDBにつなぐ場合はデータベースリンクを用いる。CDB内で253個（シードPDB含む）の制限あり。
■各コンテナの詳細
・ルートコンテナ：CDB作成時に最初に作成されるコンテナ。共通ユーザ、共通ロール、メタデータ等を保持する。UNDO表領域はPDBでなくルートコンテナに持つ。削除不可。コンテナIDは1。（0はCDB全体）
・PDB：アプリケーション用のコンテナ。表領域、スキーマ、権限、オブジェクト等を持つ。コンテナIDは3以上。
・シードPDB：各PDBの元になるPDB。ルートコンテナと同じくCDB作成時に自動で作成される。常に読み取り専用になっている。削除不可。コンテナIDは2。
# 15. CDBとPDBの作成
■CDBの作成手順
・SQLPLUSで行う場合
NO MOUNTでインスタンスを立ち上げる→初期化パラメータのENABLE_PLUGGABLE_DATABASEをTRUEにする→CREATE DATABASE CDB名 ENABLE PLUGGABLE DATABASE... SEED FILE_NAME_CONVERT（CDBの作成場所、シードPDBの作成場所を指定）<font color="Red">※</font>を実行。
<font color="Red">※OMF（Oracle Managed Files）側に設定しておく、または初期化パラメータに指定しておけばシードPDBの作成場所の指定は不要。</font>
・DBCAで行う場合<font color="Red">※推奨はこちら</font>
基本的なDBの作成手順とほぼ同じ。CREATE AS CONTAINER DATABASEのチェックボックスにチェックを入れる。
■PDBの作成手順
PDBの作成方法は下記の4つがある。SQLPLUS、DBCA、EM Cloud Control等で作成可能。
<font color="Red">※SQL PLUSを用いた際のコマンドを下記に明記。</font>
①シードPDBから作成：CREATE PLUGGABLE DATABASE PDB名... FILE_NAME_CONVERT（シードPDBの場所、PDBの作成場所を指定）<font color="Red">※</font>を実行。その後READ WRITEでOPEN（共通ユーザや共通ロールはREAD WRITEで無いとPDB側に作成できないため）。
<font color="Red">※OMF（Oracle Managed Files）側に設定しておく、または初期化パラメータに指定しておけばシードPDBの作成場所の指定は不要。</font>
②CDBに非CDBを接続：接続する非CDBのDBをREAD ONLYでOPEN→EXEC DBMS PDB.DESCRIBE 'xmlの作成先'を実行しメタデータの記載されたxmlを作成→CREATE PLUGGABLE DATABASE権限を持つ共通ユーザでターゲットCDBに接続→CREATE PLUGGABLE DATABASE PDB名 USING 'xmlの作成先'を実行→noncdb_to_pdb.sqlを実行→PDBをOPENする。   
③別のPDBからクローニング：init.oraにDB_CREATE_FILE_DEST='コンバート先'、またはPDB_FILE_NAME_CONVERT='コンバート先'を設定→ルートに接続してコピー元をクローズ→コピー元をREAD ONLYでOPEN→CREATE PLUGGABLE DATABASE 作成するPDB名 FROM コピー元のPDB名を実行→PDBをREAD WRITEでOPENする。
④切断されたPDBの接続：共通ユーザで接続先のCDBに接続→DBMS_PDBパッケージを使用して接続先のCDBと接続するPDBの互換性を確認→CREATE PLUGGABLE DATABASE 接続するPDB名 USING 'UNPLUG時に作成したxml' NOCOPY（元々あったファイルをそのまま使うため指定）を実行→PDBをオープン。<font color="Red">※切断時には切断元のCDBで切断するPDBをクローズしてから、ALTER PLUGGABLE DATABASE PDB名 UNPLUG INTO '作成するxml名'を実行。PDBが暗号化されている場合は、切断時にキーをエクスポート、接続時にインポートが必要。</font>
■PDBの削除
ALTER PLUGGABLE DATABASE PDB名 CLOSE→DROP PLUGGABLE DATABASE PDB名を実行。
# 16. CDBとPDBの管理
■コンテナへの接続方法
CONNECT/ AS SYSDBAでインスタンスに接続→CONNECT sys@CDBのサービス名 AS SYSDBAでCDBに接続→CONNECT sys@PDBのサービス名 AS SYSDBAでPDBに接続
<font color="Red">※切り替えはCONNECTで繋ぎ直すか、ALTER SESSION SET CONTAINER（SET CONTAINER権限が付与された共通ユーザのみ実行可能）を使用する。</font>
■サービスの作成<font color="Red">※自動で作成されるサービス以外に作成したい場合</font>
・Grid Infrastructure（RAC構成）以外の場合：EXEC DBMS_SERVICE.CREATE_SERVICE('サービス名','サービスのネットワーク名')→EXEC DBMS_SERVICE.START('サービス名')を実行
・Grid Infrastructureの場合：srvctl add service -db CDB名 -service サービス名 -pdb PDB名→srvctr start servise -db CDB名 -service サービス名
■インスタンスの起動からDBのOPEN、CLOSEまで
・CDB:CONNECT sys@CDBサービス名 AS SYSDBAでCDBに接続→STARTUP NOMOUNT（CDBのインスタンス起動）→ALTER DATABASE MOUNT（非CDBのマウント時の動作に加えて、PDBがマウントされる）→ALTER DATABASE OPENでOPENする。個々のPDBはMOUNT状態でありOPENされていない。（シードPDBのみREAD ONLYでOPEN）
SHUTDOWN IMMEDIATE等で停止。CDBを停止すると内部のPDB全てが停止する。
・PDB:CDBをOPEN→ALTER PLUGGABLE DATABASE OPENでOPNE。ALTER PLUGGABLE DATABASE CLOSEでCLOSE。
<font color="Red">※CLOSE時にIMMEDIATEを指定しない場合は、NORMALになる。shutdownコマンドと同様の意味合い。</font>
■データベースイベントトリガー
・CDBを立ち上げてもPDBは立ち上がらないので、AFTER STARTUPトリガーを作成し、その中でPDBをALL OPENさせると良い。
・PDB用のトリガーとして、AFTER CLONE、BEFORE UNPLUGトリガーが存在する。この二つのトリガーは実行後に自動削除される。
■PDBの設定の変更
データファイルのオンラインへの変更、デフォルト表領域の変更等も可能。但しPDBの設定の変更はPDBに接続して行う必要がある。
■PDBの初期化パラメータについて
PDBの初期化パラメータはディクショナリに格納される。個々のPDBレベルで変更可能な初期化パラメータの確認は、V$PARAMETERのISPDB_MODIFIABLEがTRUEになっているかを確認。
# 17. CDBとPDBの表領域の管理
基本的には非CDBと同様。注意点は下記。
・PDBの表領域には1つのPDBに関連付けられたオブジェクトを格納することのみが可能。
・ルートコンテナに永続表領域やデフォルト表領域を作成する場合はCDB、PDBに作成する場合はPDBに接続。
# 18. CDBとPDBでのセキュリティ管理
一番複雑で分かりづらいので、入念に勉強が必要。Oracle Universityの試験対策の講習でも念入りに勉強するように注意あり。
■ユーザ
①ローカルユーザ
・概要：PDBで作成。ルートコンテナ内では作成できない。そのユーザが存在するPDBにのみ接続可能。
・作成方法：作成する構文は非CDBと同じ。
<font color="Red">※ローカルユーザはユーザ名にC##を指定できない。CONTAINER=CURRENTはデフォルト値で設定されているため、省略可能。</font>
・作成できるユーザ：ローカルユーザ
②共通ユーザ
・概要：ルートコンテナで作成。PDB内では作成できない。但し全コンテナに同時に同じユーザが作成される。（作成処理を行うことができるのはルートコンテナのみだが、作成される場所はルートコンテナとPDB）
・作成方法：CREATE USER C##ユーザ名 IDENTIFIED BY パスワードで作成。
<font color="Red">※共通ユーザを作成する際にはユーザ名にC##が必須。（デフォルトで作成されているsysユーザ等にはついていないので注意。）CONTAINER=ALLはデフォルト値で設定されているため、省略可能。</font>
・作成できるユーザ：共通ユーザ、ローカルユーザ
・備考：SET CONTAINER_DATAで参照できるコンテナを指定できる。
■権限
①ローカル権限
・権限の付与範囲：該当の権限が作成されているPDB内のみ。
・権限の付与方法：付与する構文は非CDBと同じ。
・権限の取り消し：取り消す構文は非CDBと同じ。
②共通権限
・権限の付与範囲：ルートコンテナから全コンテナの共通ユーザに付与（共通で付与）、またはルートコンテナにのみ付与（ローカルで付与）することが可能。
・権限の付与方法：GRANT 付与する権限 TO C##ユーザ名 CONTAINER=ALLで付与。
<font color="Red">※ユーザの作成とは違い接続するコンテナで切り替わらず、デフォルト値はCURRENTになる。上記は共通で付与する場合の方法。</font>
・権限の取り消し：REVOKE 取り消す権限 TO C##ユーザ名 CONTAINER=ALLで取り消す。
※共通で付与した共通権限は消えるが、ローカルで付与した共通権限はCONTAINER=CURRENTで消す必要がある。
■ロール
①ローカルロール
・概要：PDBで作成。ルートコンテナ内では作成できない。そのロールが存在するPDBに適用されているローカルユーザ、及び権限を含めることができる。
・作成方法：作成する構文は非CDBと同じ。
・ロールを作成できるユーザ：ローカルユーザ、共通ユーザ
・付与範囲：ローカルユーザ、共通ユーザ、ローカルロール、共通ロール
・付与のバリエーション：ローカルに付与のみ可能
・付与方法：権限と同じ。
②共通ロール
・概要：ルートコンテナで作成。PDB内では作成できない。但し全コンテナに同時に同じロールが作成される。
・作成方法：CREATE ROLE C##ロール名で作成。
<font color="Red">※共通ロールを作成する際にはロール名にC##が必須。CONTAINER=ALLはデフォルト値で設定されているため、省略可能。</font>
・ロールを作成できるユーザ：共通ユーザ
・付与範囲：ローカルユーザ、共通ユーザ、ローカルロール、共通ロール
・付与のバリエーション：ローカルに付与、共通に付与どちらも可能
・付与方法：権限と同じ。
■共有オブジェクトと非共有オブジェクト
・共有ユーザとローカルユーザのどちらも非共有表（個別に作成する表）を作成できる。
・カスタマ作成の共通ユーザは共有表（データディクショナリ等）を作成できない。
・共有表はオラクル社が提供するユーザが作成できる。
■プロファイル
ロールと同じ考え方と覚えておけばいい。
■定義者権限に関する制約
・ローカルユーザがローカル権限を共通ユーザのスキーマに行使することはできない。
具体的にはローカルユーザがCREATE（またはEXEC） ANY PROCEDURE権限（他のスキーマにプロシージャを作成できる権限）を持っていても、他のスキーマにプロシージャの作成（または実行）ができない。<font color="Red">※バージョン12.1.0.2から実装された機能。</font>
# 19. CDBとPDBのバックアップとリカバリとフラッシュバック
■BACKUPとRECOVERコマンド
・BACKUP（またはRECOVER） DATABASEを実行すると全てのPDB、及びルートコンテナに処理が実行される。
PDBやルートコンテナに単一で処理で行いたい場合は、BACKUP PLUGGABLE DATABASEを実行。
・表領域の場合は、BACKUP TABLESPACE PDB修飾子:表領域名。
<font color="Red">※基本的なコマンドではPDB修飾子は使えなかったが、BACKUPやRECOVERでは使える。</font>
■インスタンスリカバリについて
・PDBインスタンスリカバリは不可能。インスタンスはCDBに紐づいているため。
・CDBインスタンスリカバリの手順はルートに接続→ルートをオープン。
■NO ARCHIVELOGモードについて
インスタンスを停止→CDB全体をリストア→CDBと全てのPDBをオープン。
■PDBのシステムデータファイルの障害について
システム以外のデータファイルは非CDBと同様。システムデータファイルはPDBの状態でリカバリの手順が異なる。
①PDBがOPENされている場合
・リカバリ手順：STARTUP MOUNT→RESTORE PLUGGABLE DATABASE 表名→RECOVER PLUGABBLE DATABASE 表名→ALTER DATABASE OPEN→ALTER PLUGABBLE DATABASE 表名 OPENを実行。
②PDBがCLOSEされている場合
・リカバリ手順：RESTORE PLUGGABLE DATABASE 表名→RECOVER PLUGABBLE DATABASE 表名→ALTER PLUGABBLE DATABASE 表名 OPENを実行。
■フラッシュバック
・フラッシュバックはCDBレベルで実行が必要。
・PDTPITRが実行された時点より前には戻すことができない。
# 20. マルチテナント環境のパフォーマンス管理
■CDBメモリのチューニング
バッファキャッシュ、共有プール、PGA（プログラムグローバル領域）はメモリーアドバイザーを用いてCDBレベルで調整。
■CDB/PDBのリソース管理
①PDB間ではCPU、I/O、パラレルサーバの各リソースが競合する。それぞれのPDBにリソースをどう割り当てるかをCDBリソースプランで決定する。
②CDBで各PDBに割り当てるリソースをsharesを用いて設定する。sharesで割り当てた総数に対する各PDBの割り当てられた数で割合を求める。例えばPDBが4つあり、3つのPDBにshares=1、1つのPDBにshares=2を設定した場合は、3つのPDBにはCPUの20%が割り当てられ、1つのPDBには40%が割り当たる。PDBを追加/削除した際にsharesを設定すれば、割り当ての再計算は不要。
③PDBに下記の二つの制限を適用できる。
・utilization_limit:CPUのリソース上限を決める。割り当てられたCPUの内、使用できる上限を割り当てる。
・parallel_server_limit:PDBのパラレルサーバ使用率。
④下記の手順でCDBリソースプランを作成。
・DBMS_RESOURCE_MANAGERのCREATE_CDB_PLANでCDBリソースプランを作成。
・DBMS_RESOURCE_MANAGER_DIRECTIVEで各PDBのshares等を設定。
⑤CDBリソースプランの適用はALTER SYSTEM SET resouce_manager_plan = '適用するプラン'で行う。
または、DBMS.SCHEDULAR.CREATE_WINDOWで指定した時間から適用されるようにする。
⑥PDBのリソースプランは非CDBのリソースプランと異なり、下記の制限がある。
・単一レベルのリソースプランしか作成できない
・最大8個のコンシューマグループ
・サブプランなし
また、非CDBをPLUGした際に上記の制限を守っていない場合は、上記の制限を守るプランに変更が自動で行われる。
■統合データベースリプレイ
マルチテナントに統合する前の各々の非CDBのワークロードデータを用いて、統合後のマルチテナント環境に対し、データベースリプレイを実行できる。
■その他
・SQL文はPDB単位でチューニングされる。
・AWR(自動ワークロード・リポジトリ)ツールはCDBのインスタンスレベルで実行される。
・インスタンス全体の情報はルートコンテナに保持される。
# 21. マルチテナント環境での各ユーティリティの使用について
■Data Pump
・非CDB⇔PDB間のエクスポート、インポートは可能
・同一、または異なるCDB内のPDBを他のPDBにエクスポート、インポートは可能
・エクスポート、及びインポートを使用して11.2.0.3の非CDBを12CのPDBにアップグレード可能
※異なるバージョンへのデータの移動により、疑似的なアップデートを実施。
■監査ポリシーについて
・CDB、PDBレベルでの監査が可能。
・CDB全体の監査証跡の確認は、CDB_UNIFIED_AUDIT_TRAILビューに接続して行う。
※UNIFIED_AUDIT_TRAILビューだと、PDBに接続している場合は接続しているPDBの監査証跡、ルートコンテナに接続している場合はルートコンテナの監査証跡しか参照できない。
# 22. 試験の感想や勉強方法等
■試験の感想
正解率79%で合格。バックアップ＆リカバリに関する問題が多く出題された。感覚レベルだが、バックアップ＆リカバリが6割、マルチテナントアーキテクチャが3.5割、その他（SQLローダーの概要等）が0.5割ほど。
試験範囲について、満遍なく理解してないと合格はできない。参考書（黒本）の勉強だけでは合格は難しい。
■勉強方法
下記のEラーニングと参考書を使用し勉強。
①ORACLE MASTER Gold Learning Subscription - Japan ONLY
→Goldの受験に必須の研修※と、試験対策のEラーニングが含まれている。
研修で60時間ほど、試験対策のEラーニングで6時間ほど勉強。試験対策のEラーニングと類似した問題が本番で何問か出題された。基本的な知識が必要な問題よりも、細かい部分をカバーした問題が多く、このEラーニングで勉強していなかったら受かっていないと思う。
<font color="Red">※19Cからは研修は必須ではなく、推奨になっている。</font>
②オラクルマスター教科書 Gold Oracle Database 12c
→GOLDの試験範囲の基礎知識を学べる。試験本番で出る細かいレベルの話がカバーしきれてなく、この参考書の勉強だけで合格は少し難しい※。
30時間ほどかけて、勉強。
<font color="Red">※試験のバージョンや種類（Silver、Gold）で参考書のクオリティも異なる。あくまで12CのGoldの参考書に関する評価。</font>
■勉強期間
4月～7末の間に基本的には休日のみ勉強。4月の間に参考書を軽く一周読み、GWにEラーニングを7割ほど終わらせ、6中頃にEラーニング完了。7中までに参考書を3周し、7中から7末でEラーニングの見直し（全量ではなくポイント）を実施。
■Oracleの試験に挑む上で
・DBAでもJavaでもBronze、Silverは参考書のみで十分。
・Goldは可能なら参考書だけでなく、Eラーニングを利用するとよい。
・参考書は章末の模擬試験以外を2周し、ある程度試験範囲の内容を覚えてから章末の模擬問題を解く。模擬問題で解けなかった問題が多い分野を3周目でしっかり理解する。<font color="Red">※あくまで自分のやり方。自分に合ったやり方を見つけるのが良い。</font>
・Oracleの試験では、特定のワードを明示しなくても暗黙的にこうなる、デフォルト値、特定の条件下等を理解していないと解けない問題が多いので、全体をある程度理解したらそこを潰しこむ。