Oracleマスター Silver 12ｃ Oracle Databaseのアーキテクチャの確認

※用語はなるべく、Oracle® Databaseリファレンス　12c リリース1 (12.1) より抜粋しております。
【太字】：試験最重要ポイント
【青色】：試験問題を解くために必要な理解
【赤字】：最低限押さえておきたい知識
出題例：正解のみ掲載しています

公式ページの試験内容チェックリストより
　●Oracle Databaseのアーキテクチャの確認
　　・Oracle Databaseのアーキテクチャ・コンポーネントを列挙する
　　・メモリー構造について説明する
　　・バックグラウンド・プロセスについて説明する
___
###【要点】
・各バックグラウンドプロセスの役割について
　SMON、LREGは頻出。CKPT、ARCn、DBWnはそのタイミングを問われる。
　MMONの役割は他の章で除外されたトピックなので出題されないと思う。
・メモリ構造
　共有プールの仕組みについて押さえておこう。
　－インスタンス・リカバリの仕組みとの関係も含めて
・Oracle Enterprise Manager Expressを使用するための前提条件および構成
　－11ｇからの変更により、何が出来て何ができないか。
・自動ストレージ管理（ASM）によって提供される機能について。
___
※試験内容チェックリストから除外されたトピック※
　－論理ストレージ構造と物理ストレージ構造の関係について説明する。
　　物理構造：制御ファイル・データファイル・REDOログファイル、サーバーに関連するその他のファイル
　　論理構造：表領域・データブロック・エクステント・セグメント
___

###Oracle Databaseのアーキテクチャ・コンポーネントを列挙する

■Oracleデータベースサーバーは以下の2つによって構成されている。
・「Oracleインスタンス」
　　「SGA」「バックグラウンドプロセス」により構成されている。

・「Oracleデータベース」
　　「制御ファイル」「データファイル」「REDOログファイル」から構成されている

・その他
　　　初期化パラメータファイル、パスワードファイル、アーカイブログファイルなど
___

####メモリ構造
#####■SGA（システムグローバル領域）
　すべてのサーバープロセスおよびバックグラウンドプロセスで**共有**されている。

■共有プール

| 構成要素|説明|
|:-----------------|:------------------|
|ライブラリキャッシュ|解析済みのSQLコードを保持する領域。**共有SQL領域**が割り当てられている|
|データディクショナリキャッシュ|SQL文の解析に必要となるデータディクショナリの情報が含まれる|

#####ユーザーがSQL文を発行すると、プライベートSQL領域と共有SQL領域の2つが使用されます。
___
■**プライベートSQL領域**
　バインド変数の値や問合せ実行状況の情報、作業領域のデータなどが格納されている。SQL文を実行するそれぞれのセッションに割り当てられる。1人のユーザーが異なる複数のSQL文を実行した場合、1人のユーザーに複数のプライベートSQL領域を割り当てることもできる。

　●プライベートSQL領域が割り当てられる場所は接続タイプによって異なる
　　専用サーバー：サーバープロセスのPGA内に保持される。
　　共有サーバー：一部はSGA内に保持される。

■<font color="Red">**共有SQL領域**</font>
　解析済のSQLコードやPL/SQLコード、実行計画が格納される領域。

●<font color="Blue">**処理の流れ**</font>
　ユーザーが発行したSQL文を受け取ると、まず共有プールのライブラリキャッシュに同一のSQL文を含む共有SQL領域が存在するか確認し、存在すればそれを利用します。存在しなかった場合は、新しい共有SQL領域を割り当てます。
つまり以下のようになります。
　▶複数のユーザーが同一の文を実行している場合は、共有SQL領域は共有されます。この場合もそれぞれのユーザーに対して、専用のプライベートSQL領域が割り当てられます。
　▶1人のユーザーが異なる複数のSQL文を実行した場合に、1人のユーザーに複数のプライベートSQL領域を割り当てることもできる。
___
　●**データベースバッファキャッシュ**
　　**データベースから取得されたデータ・ブロック（表、索引など）をキャッシュする領域。**
SQL実行計画に基づき、対象となるバッファを検索した結果、バッファキャッシュに存在すればそのまま利用（**キャッシュヒット**）し、存在しなければデータファイルからロード**キャッシュミス**）します。
キャッシュ内のバッファは、最低使用頻度（LRU)リストとタッチカウントを組み合わせた複雑なアルゴリズムを使用して管理されます。
<font color="Blue">LRU：最近使用されたブロックがメモリーに残されるようにし、ディスクアクセスを最小限に抑える</font>

追加のバッファキャッシュを構成して、デフォルトのブロックサイズとは異なるサイズのブロックを保持することもできます。
大きなブロックサイズを使用する場合：大きな表の全件検索を一度で読み込むことができる。
小さなブロックサイズを使用する場合：同時INSERT処理が中心の表の場合にパフォーマンスに優れている。

『データベースバッファキャッシュのコンポーネント』

|初期化パラメータ|用途|
|:-----------------|:------------------|
|DB_nK_CACHE_SIZE|ブロックサイズを指定できる。2,4,8,16,32（KB)|
|DB_KEEP_CACHE_SIZE|長く保持しておきたいオブジェクト用（表、索引など）|
|DB_RECYCLE_CHACE_SIZE|データベースバッファキャッシュ内で処理が終わったら、他のオブジェクトのために使用されてもかまわないオブジェクト用|
|DB_CHACE_SIZE|標準ブロックサイズ用のデータベースバッファキャッシュ|

●STORAGE句のBUFFER_POOLで指定することで、データブロックが格納されるバッファプールを指定できる。
・DEFAULTプール：このプールは、ブロックが通常キャッシュされる場所です。
　手動で個別にプールを構成しない場合は、DEFAULTプールが唯一のバッファ・プールとなる
　`DB_CACHE_SIZE初期化パラメータ`によってサイズが決まります。

※KEEPプール：バッファ・キャッシュ内の頻繁にアクセスされるセグメントを保持します。
　　目的：メモリー内にオブジェクトを保存して、I/O操作を避けることにあります。

※RECYCLEプール：このプールは、頻繁に使用されないブロック用のプールです。
　　目的：キャッシュ内の領域が不要なオブジェクトによって消費されることを防止できます。

___
　●**REDOログバッファ**
　　<font color="Red">循環式に使用されます。</font>
　**DMLやDDLなどの操作によって行われた変更を再実行するための情報が含まれたREDOエントリ**が書き込まれる。
　大量のデータ挿入、変更または削除を伴うアプリケーションでは、REDOログ・バッファのサイズを大きくする必要がある。
___
　**●ラージプール（オプション）**
　　特定の大きなプロセスが使用できるオプション領域。プロセス間で大量のメモリ消費が想定される、次の操作で仕様することができます。
・共有サーバーのセッションメモリ
・I/Oサーバープロセス
・RMANを使用したバックアップとリストア操作

・ラージプールは上記の操作において、ラージプールが構成されていれば、ラージプールが使用されますが、構成されていないときは**共有プールが使用されます。**
・ラージプールは、必要に応じて確保され、操作が完了したら開放されます。
___
　〇Javaプール（オプション）
　　データベース内でJavaを実行する場合に使用するオプション領域（JVM内のすべてのセッション固有のJavaコードおよびデータ）

　〇Streamプール（オプション）
　　Oracle Streamsというメッセージをやり取りする機能を実行する際に使用される
___
 ●PGA（プログラムグローバル領域）
各サーバープロセスおよび各バックグラウンドプロセスが個別に持つ非共有メモリー
また、SQLのソート処理を行う作業領域としても使用されます。
セッションメモリー　　：ログイン情報、その他のセッション情報
プライベートＳＱＬ領域：バインド変数値、問合せ実行状況の情報、問合せ実行作業領域

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

###バックグラウンド・プロセスについて説明する
各バックグラウンド・プロセスには個別のタスクがありますが、他のプロセスと連携して動作します。

**ユーザープロセス**：クライアント側のプロセス
　クライントからSQL文を発行するプロセス。SQL文を発行するツールを使用し、実行すると起動する。
**サーバープロセス**：サーバー側のプロセス
　<font color="Red">SQL文を処理するメインのプロセス</font>。ユーザーからの接続要求を受け取ると起動します。
　・アプリケーションから発行されたSQL文の解析および実行
　・データファイルからデータベースバッファキャッシュへのデータブロックの読取り
　・アプリケーションへの結果の送信
**バックグラウンドプロセス**：サーバー側のプロセス
　プロセス群の集合。Oracleインスタンスを起動すると自動的に起動します。
___
#####バックグランドプロセス

■**SMON**　システム・モニター・プロセス
　●インスタンスが異常終了した後の、次回インスタンス起動時に<font color="Red">インスタンスリカバリ</font>を実行する
　●使用されなくなった一時セグメントのクリーンアップを行う。

■DBWn　データベース・ライター・プロセス
　データベース・バッファ・キャッシュの変更されたデータをデータ・ファイルに書き込む。　
　<font color="Red">タイミング</font>：**チェックポイントの発生時**、または再利用可能なバッファを検出できなかった時。
　DBWnは最大20のプロセスを起動できます。

■**LGWR　ログ・ライター・プロセス**
　　　オンラインREDOログにREDOエントリを書き込む。
　　　LGWRはREDOログ・ファイルのグループにREDOログ・エントリを書き込む。
　　　　<font color="Red">**・ユーザープロセスによってトランザクションがコミットされた時**</font>
　　　　・ログスイッチが発生した時
　　　　・LGWRによる最後の書き込みから3秒経過した時
　　　　・REDOログバッファの3分の1がいっぱいになったとき
　　　　・DBWnが変更されたバッファをデータファイルに書き込む前
　　　　・DBWが使用済みバッファを書き込むには、<font color="Blue">バッファの変更に関連するすべてのREDOレコードがディスクに書き込まれている必要がある。</font>存在する場合はLGWRの処理が完了するまでDBWは待機する。

　■**CKPT**　チェックポイント・プロセス
　　　チェックポイントで「DBWn」にシグナルを送り、データベースのすべての「データ・ファイル」と「制御ファイル」を更新して、最新のチェックポイントを示す
　　　SCN（システム変更番号）を<font color="Red">制御ファイルとデータファイルヘッダー</font>に書き込む。　SELECT current_scn FROM v$database;コマンドで確認できる。
　　　　※チェックポイントが発生するタイミング※
　　　　　チェックポイントを起こしたとき
　　　　　REDO ログファイルの切り替えが起こるとき

　■PMON　プロセス・モニター
　　　他のバックグラウンド・プロセスを監視し、サーバー・プロセスまたはディスパッチャ・プロセスが異常終了した場合にプロセスのリカバリを実行する
　　　実行を停止したサーバープロセスがあれば再起動します。
　　　定期的にデータベースバッファキャッシュのクリーンアップやユーザープロセスによって使用されていたリソースの解放などを行う。
　　　

　■ARCn　アーカイバ・プロセス
　　　REDOログ・ファイルが一杯になるか、オンラインREDOログの切替えが発生した場合に、REDOログ・ファイルをアーカイブ記憶領域にコピーする。ARCnは複数起動できます。

　**■RECO　リカバラ**
　　　<font color="Red">分散データベース</font>でのネットワークまたはシステムの障害によって保留にされている分散トランザクションを解決する

　**■LREG　リスナー登録プロセス**
　　　【重要】インスタンスおよびディスパッチャプロセスに関する情報をリスナーに登録する

　■MMON　マネージメントモニター・プロセス
　　　次のような様々な管理関連のバックグラウンド・タスクが実行されます。
　　　　・指定のメトリックがしきい値に違反した場合のアラートの発行
　　　　・追加処理の生成によるスナップショットの作成
　　　　・最近変更されたSQLオブジェクトの統計の値の取得
　　　　・AWRのスナップショットの取得
　　　　・ADDM分析の実行

【重要】　
■専用サーバー：プライベートSQL領域はサーバープロセス内のPGA内に保持される。
■共有サーバー：プライベートSQL領域の一部はSGA内に保持される。

___
###自動ストレージ管理
複数のディスクを1つのディスクのように扱い、ストライプ化やミラー化を行うことでパフォーマンスと可用性を向上させることができます。
ディスクを追加/削除すると自動的に再バランスが行われるため、ディスク間でI/Oバランスの取れた環境が構築されます。

####ASM記憶域
ASMでは、データファイルの格納にディスクグループが使用されます。ディスクグループ内に保存されたファイルの内容は均等にストライプかされるため、偏りを避けることができディスク間のパフォーマンスが均一になります。
【ASMのメリット】
　・使用可能なすべてのリソース全体にI/O負荷を分散させてパフォーマンスが最適化されるため、**手動でI/Oを調整する必要がなくなる**
　・データベース管理者は、データベースを停止して記憶域割当てを調整せずに、データベースサイズを拡大できるため、**データベース環境を動的に管理できる**
　・ASMでデータの冗長コピーを保持することで、フォールトトレランスを実現できる

####自動ストレージ管理のコンポーネント
ASMインスタンス：<font color="Red">通常使用するデータベースのインスタンスとは別のOracleインスタンス</font>。ASMインスタンスはノード上に1つ以上必要です。

ASMディスク：グループに提供されるストレージ番号。ディスクグループの互換性のレベルに応じてASM割当てサイズを1,2,4,8,16,32,64MBに設定できます

ASMディスクグループ：ASMディスクをグループ化したものです。データベースインスタンスから配置を要求されたファイルは、ディスクグループに属するディスクへ均等に配置されます。
ディスクグループの設定により、冗長化された配置も可能です。ディスクの追加時や削除時にも、<font color="Red">データ領域は自動的に再バランスされます。</font>
最低1つのディスクグループが存在してれば運用は可能です。（データベースファイル用と高速リカバリ領域用の2つのディスクグループを使用することが推奨されています。）

ASMファイル：データベースだけなく、**アーカイブログファイルやRMANのバックアップファイル**などさまざまなファイルをASMで管理できます。
ただし、次のファイルはASMファイルとして管理できません。
**<font color="Red">Oracleソフトウェアなどの実行ファイル</font>**
**<font color="Red">アラートログやトレースファイル、PFILEなどのテキストファイル</font>**

ASMエクステント：ASMファイルの内容を保持するための領域です。非常に大きいASMファイルのために、可変エクステントサイズが使用されます。

___
###出題例
**出題例**：SGAの要素の中で必須のメモリー領域を選択しなさい。
→共有プールデータベースバッファキャッシュ、REDOログバッファ
<font color="SlateGray">ラージプール、Javaプール、Streamsプールはオプションのメモリー領域です</font>

**出題例**：常に頻繁にアクセスされる表があります。何プールに指定しますか？
→KEEPプール
<font color="SlateGray">一度しか参照されない大きな表の場合はRECYCLEプールに指定する</font>

**出題例**：バックグラウンドプロセスについて正しい説明を選択してください
→DBWn、ARCnプロセスは複数起動することが出来る。
→DBWnがデータファイルに書き込むタイミングはチェックポイントが起きたとき
→LGWRがREDOログファイルにREDOログバッファにあるREDOログを書き込むタイミングは、DBWnが変更されたバッファをデータファイルに書き込む前
→チェックポイントが発生するとCKPTはSCNを制御ファイルとデータファイルヘッダーに書き込む。
→SMONの役割は、インスタンスリカバリの実行と、使用されなくなった一時セグメントのクリーンアップ
→PMONの役割はユーザープロセス障害からのリカバリ。（ユーザーが保持していたロックを解除し、リソースの解放を行う）
→<font color="Red">RECOは、分散データベース構成で使用されるバックグラウンドプロセスです。</font>

**出題例**：プライベートSQL領域は専用サーバーの場合、何に割り当てられますか？
→PGA
<font color="SlateGray">共有サーバー接続の場合はライブラリキャッシュ</font>

**出題例**：ASMファイルとして管理できないファイルを選択しなさい
→Oracleソフトウェアの実行ファイル
→アラートログファイル
→トレースファイル
→PFILE

**出題例**：SQL文の解析時に使用されるメモリーコンポーネントは何ですか？
→共有プール