Oracleマスター Silver 12ｃ Oracle Databaseインスタンスについて

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

###公式チェックリストより出題範囲
■Oracle Databaseインスタンス
・初期化パラメータ・ファイルについて理解する
・Oracleデータベース・インスタンスを起動および停止する
・アラート・ログを表示する。動的パフォーマンス・ビューにアクセスする

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
###【要点】
■初期化パラメータファイルについて
　SPFILE、PFILEについて
　設定できる**初期化パラメータ項目（静的パラメーターの名前）**、ファイル形式、**パラメーターの変更コマンド**、および**設定時の挙動の違い（BOTH|MEMORY|SPFILE）**。

■Oracleデータベース・インスタンスを起動および停止について
　**SHUTDOWN、NOMOUNT、MOUNT、OPEN。起動段階の手順。**
　データベースの状態によって管理者が出来ることの理解。
　データベースを停止する際の停止モード、また停止モードによる特徴の違いの理解（ロールバック、ロールフォワード）
例えば、データベースの起動中に途中の状態で止まってしまった時に、何のファイルが損失している可能性があるか。わかるように理解しましょう。
データベースの停止ではABORTとIMMEDIATEが頻出です。必ず押さえておきましょう

■アラート・ログを表示する。動的パフォーマンスビュー
　ADRの理解、初期化パラメータ、アラートログファイルの格納場所、ファイルの内容
　動的パフォーマンスビューを確認するコマンド。
　アラートログに保存される内容について出題されました。

■DDLロギング
　すべてのDDLログではなく、**一部のDDLログの保存を行っている**。
　**ENABLE_DDL_LOGGING**パラメータをTRUEに設定すること。
　ファイル形式は**テキストとXML**
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

###■初期化パラメータファイルについて
　Oracleは起動時にファイルを読みこんでDBに必要な初期設定をします。
　このファイルのことを初期化パラメータファイルといいます。

**■初期化パラメータファイルのタイプ**
・SPFILE
バイナリ形式、Oracleデータベースを通じて変更する。<font color="Blue">現行インスタンスでの設定値の変更をファイルに保存できる</font>。
<FONT COLOR=red>RMANのバックアップの対象に含めることができる。</FONT>
※ロードされたSPFILEはインスタンス起動後に再作成することはできない。
※STARTUPコマンドによる明示的なロードはできない。
`$ORACLE_HOME/dbs/spfile<SID>.ora`

・PFILE
テキスト形式、テキストエディタで変更可能。
現行インスタンスでの設定値の変更の保存は不可（<FONT COLOR=red>再起動時にはリセットされている</FONT>）。
`$ORACLE_HOME/dbs/init<SID>.ora`

■<font color="Blue">初期化パラメーターファイルの作成</font>
・現行のSPFILEを元にPFILEを作成することできる
・反対にPFILEを元にSPFILEを作成することもできる
・起動中のメモリからPFILE、SPFILEを作成することもできる

**■試験に出題される初期化パラメータ**
初期化パラメーター名から何の役割を果たしているかを必ず覚えましょう。静的パラメータであるLOG_BUFFERは現インスタンスのパラメーター変更で出題されます。

| 初期化パラメータ|概要|静的/動的|
|:-----------------|:------------------|:------------------:|
|CONTROL_FILES|制御ファイルの位置と名前|**静的**|
|DB_KEEP_CACHE_SIZE|KEEPバッファプールのサイズ|動的|
|DB_RECYCLE_CACHE_SIZE|RECYCLEバッファプールのサイズ|動的|
|DB_RECOVERY_FILE_DEST|フラッシュリカバリ領域として使用するディレクトリ|動的|
|DB_RECOVERY_FILE_DEST_SIZE|フラッシュリカバリ領域のサイズ|動的|
|ENABLE_DDL_LOGGING|DDLアラートログへの書き込みの有効/無効|動的|
|LOG_ARCHIVE_DEST_n|REDOデータのアーカイブ先|動的|
|<font color="Red">LOG_BUFFER</font>|ログバッファのサイズ|<font color="Red">**静的**</font>|
|SERVICE_NAMES|クライアントがインスタンスに接続するための名前|動的|
|UNDO_RETENTION|UNDO保存の下限値|動的|

**■メモリーコンポーネントに関する初期化パラメーター**
**LOG_BUFFER**：REDOログバッファのサイズ<FONT COLOR=red>（静的パラメータ）</FONT>
　　・静的パラメーターの値は**Oracle起動中に変更できない**。次回起動時に変更内容が反映される。
　　・変更時のSCOPE句にMEMORY／BOTHを指定することはできません。→エラーになる

SGA_TARGET　すべてのSGAコンポーネントの合計サイズ
MEMORY_TARGET　Oracleが使用できるメモリーの全体サイズ
PGA_AGGREGATE_TARGET　Oracleが使用できるPGAの全体サイズ

**■初期化パラメーターに関する情報が含まれている動的パフォーマンスビュー**
・V$PARAMETER 　現行セッションに対して有効になっている初期化パラメーターに関する情報が表示される

・V$SPPARAMETER SPFILEの内容が表示される。そのパラメータがSPFILEに指定されている場合には<FONT COLOR=red>ISSPECIFIED列に「TRUE」</FONT>が表示される。

指定されていない場合、またはインスタンスの起動にSPFILEが使用されなかった場合は「FALSE」が表示される。

【構文】
**SQL> SELECT name, value FROM V$PARAMETER**
**SHOW PARAMETER 初期化パラメータ名**

####初期化パラメータファイルの種類
**静的パラメータ**　値の変更に、<FONT COLOR=red>データベースの再起動が必要</FONT>

**動的パラメータ**　値の変更に、データベースの再起動は不要。ALTER SESSIONまたはALTER_SYSTEM文によって変更できる。
インスタンスの状態を即座に変更可能、変更した値をファイルに保存し次回インスタンス起動時にも反映できる。

【初期化パラメータを変更する構文】
**ALTER SYSTEM SET パラメタ名=値 [SCOPE = {MEMORY | SPFILE | BOTH}];**
※PFILE運用時はALTER SYSTEM文ではSCOPE句は指定できない。（常にSCOPE=MEMORYとなる）
※静的なパラメータの場合、SCOPEオプションはSPFILEしか指定できない。

重要

| 　　　　　　　　　　　　　　　　|MEMORY　　　　　　|SPFILE　　　　　　　　　　　|BOTH　　　　　　　　|
|:-----------------------------|:-----------------|:-------------------------|:------------------|
| 変更対象　　　　　　　　　　　　|メモリー　　　　　|SPFILE　　　　　　　　　　　 |メモリーおよびSPFILE |
| 指定できるパラメータの種類　　　|動的パラメータのみ|静的パラメータ、動的パラメータ|動的パラメータのみ　　|
| 稼働中のデータベースに変更が有効|〇　　　　　　　　|✖　　　　　　　　　　　　　　|〇　　　　　　　　　 |
| 再起動後のDBに変更が有効　　　　|✖　　　　　　　　|〇　　　　　　　　　　　　　　|〇　　　　　　　　　　|

解説動画より、たまにPFILEに関する問題も出題されるため押さえておくようにとのこと。

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
###■Oracleデータベース・インスタンスを起動および停止について
SQL*Plus,SQLDeveloper,EnterpriseManager CloudControlを使用してデータベースの起動、停止を行うことができます。

データベースの起動段階と状態

**SHUTDOWN　→　NOMOUNT**　内部処理の順番を覚える
データベースは停止している状態 → NOMOUNT
1.初期化パラメータファイルの読み込み
 【ファイルの優先度】
　　①spfile< SID >.ora
　　②spfile.ora
　　③init<SID>.ora（PFILE)
2.SGAの割当て
3.バックグラウンドプロセスの起動
4.アラートログファイル、トレースファイルのオープン
___
**NOMOUNT　→　MOUNT**
1.制御ファイルのオープン（パラメータにリストされた制御ファイルを検索し、ファイルオープンする）
**2.制御ファイルに記載されている、データファイルとREDOログファイルの名前とステータス情報の取得**

**NOMOUNT状態では「データベースの再作成」「制御ファイルの再作成」を行うことができる。**
MOUNT状態では「データファイル名の変更」**「ARCIHEVELOGモードの切り替え」**「全データベースのリカバリ」を行うことができる。
___
**MOUNT　→　OPEN**
1.データファイルのオープン
2.REDOログファイルのオープン
インスタンス障害が発生した場合は**SMONによってインスタンスリカバリ**が実行される

OPEN状態になると**一般ユーザーもデータベースにアクセスできるようになる。**

■現在の起動状態の確認
V$INSTANCE動的パフォーマンスビューのSTATUS列にて確認することができる。内容までは押さえなくていい。

####データベースの停止
停止モード
インスタンスがリカバリが必要かどうか、トランザクションはどうなるのか。よく出題される。

|　　　　　　　　　　　　　　　　　　　　　　　　　　 |**ABORT**|IMMEDIATE|TRANSACTIONAL|NORMAL　　　　　|
|:-----------------------------------------------|:--------:|:--------:|:------------:|:------------:|
| 新規接続の許可　　　　　　　　　　　　　　　　　　　|✖|✖|✖|✖|
| 現行のセッションが終了するまで待機する　　　　　　　|✖|✖|✖|〇|
| 現行のトランザクションが終了するまで待機する　　　　|✖|✖|〇|〇|
| チェックポイントを強制実行し、ファイルをクローズする|✖|〇|〇|〇|
| 次回起動時のインスタンスリカバリ                  |必要|不要|不要|不要|

■**SHUTDOWN　IMMEDIATE**
・Oracleサーバーは、**実行中のトランザクションを強制的にロールバックし、接続を切断してデータベースの停止処理を開始**

■**SHUTDOWN　ABORT**
・**実行中のトランザクションはロールバックされず、途中で強制終了される。**
・コマンドを実行すると、すぐに接続を切断し、停止処理を開始する
・次回起動時にインスタンスリカバリ（ロールフォワード）を行う必要がある。

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

###■アラート・ログを表示する。動的パフォーマンスビュー

アラート・ログファイルは、起動や停止以外にも多くのイベントが記録される、データベースの運用ログです。

**自動診断リポジトリ（ADR)**
データベース全体のトレースファイルやアラートログファイルを一元的に格納するための、Oracleデータベースの外部に作成されるディレクトリ構造です。
自動診断リポジトリには、データベースに問題が起きた場合にその問題を診断するために必要な以下のファイルが格納される。
・トレースファイル
・アラートログファイル
・状態モニターレポートなど

ルートディレクトリ：ADRベース
ADRホーム：インスタンスに関するすべての診断データのルートディレクトリ
初期化パラメータ　：DIAGNOSTIC_DEST初期化パラメータ
　－環境変数ORACLE_BASEが設定されている場合は、指定されているディレクトリが設定される
　－設定されていない場合は「ORACLE_HOME/log」が設定される

#####アラートログファイルの格納場所
テキスト形式：$ORACLE_BASE/diag/rdbms/< db_name >/< SID >/trace/ ファイル名：alert_<SID>.log

ＸＭＬ形式　：$ORACLE_BASE/diag/rdbms/< db_name >/< SID >/alert/ ファイル名：log.xml

V$DIAG_INFOビューを使用して「Diag Trace」ディレクトリを確認し、対象ディレクトリのalert_<SID>.logを確認することでもアラートログの内容を確認できる。

#####アラートログファイルの内容
**・ブロック破損エラー(ORA-1578)**
**・チェックポイントの開始時刻と終了時刻**
**・最後のベースライン作成後に行われた初期化パラメータの変更**
・起動時に使用されたデフォルト以外の初期化ファイル
・発生したすべての内部エラー(ORA-600)
・デッドロックエラー(ORA-60)
・CREATE/ALTER/DROP(TABLESPACE)　DATABASE文の実行
　　→表領域やREDOログファイルなどの物理的な構造に対する場合のみ
・データベースの起動・停止(STARTUP、SHUTDOWNコマンド)
・ARCHIEVELOGモードの切り替え
・データベースのリカバリ
・共有サーバーおよびディスパッチャプロセスの機能に関するメッセージおよびエラー
・マテリアライズドビューの自動リフレッシュ時に発生したエラー
・不完全なチェックポイント
・インスタンスリカバリ/クラッシュ情報
・ログスイッチやアーカイブログファイルの作成時刻

※メトリックしきい値を越えた統計はアラートログファイルではなく、サーバー生成アラートなので混同しないように注意

####トレースファイル
各サーバープロセスおよびバックグラウンドプロセスでは、内部エラーが検出されると、エラーに関する情報がその**トレースファイル**にダンプされる。
トレースファイルには、データベースコードのバグ、メタデータの破損や顧客データの破損によって発生するクリティカルエラーなどの問題とその問題の回避、検出、診断および解決を行うための高度な**障害診断インフラストラクチャが含まれています**

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

###動的パフォーマンスビューとデータディクショナリ

####主な動的パフォーマンスビュー
インスタンス起動直後や、データベースオープンする前に確認できる情報が多く用意されている。
●セッション
●ファイルの状態
●ジョブおよびタスクの進捗状況
●ロック
●バックアップステータス
●メモリの使用率および割当
●システムおよびセッションのパラメータ
●SQLの実行
●統計およびメトリック

　V$INSTANCE　：現行インスタンスの状態を表示する
・インスタンスや制御ファイルから情報が取得される
・インスタンスが再起動されるとリセットされる

　V$PROCESS　 ：現行アクティブなプロセスの情報を表示する（**NOMOUNT以上の起動段階で確認できる**）

　V$DATAFILE　：データファイルの詳細情報を表示する（**MOUNT以上の起動段階で確認できる**）

**V$FIXED_TABLEビュー**を問い合わせると、データベース内のすべての動的パフォーマンスビュー名表示できる。
動的パフォーマンスビューの**所有者はSYSユーザー**です。
___
####データディクショナリビュー
データ・ディクショナリ表には、直接アクセスできないため、データディクショナリビューからアクセスする。
データベース内のすべてのオブジェクトの名前および属性が格納されている。それらの変更を反映してデータディクショナリが更新される
　**・SYSTEM表領域**に自動的に作成される
　**・SYSユーザー**が所有している
●USER_
　すべてのユーザーがアクセス可能。ユーザー自身が所有する情報が表示される
●ALL_
　すべてのユーザーがアクセス可能。ユーザーが表示権限を所有している情報が表示される
●DBA_
　データディクショナリを表示するDBA権限を持つユーザーのみアクセス可能。データベース内のすべての情報が表示される。
___

####DDLロギング
　ENABLE_DDL_LOGGINGパラメータをTRUEに設定することで取得される機能。　
　実行されたDDLログの**一部**がDDLログに書き込まれる。

`ALTER SYSTEM　enable_ddl_logging = TRUE`
DDLログは自動診断リポジトリに格納されるので、**テキスト形式とXML形式のファイルが存在する**
XML形式のDDLログには、DDL文と実行タイムスタンプが記録される。

説明：DDLログはアラート・ログと同じ形式および基本動作を持つファイルですが、データベースにより発行されたDDL文のみを含みます。
<FONT COLOR=red>ENABLE_DDL_LOGGING初期化パラメータがtrueに設定されている場合のみロギング対象のDDLが自動診断リポジトリのDDLログに記録される。</FONT>
このパラメータがfalseに設定されている場合、DDL文はいずれのログにも含まれません。
同じ情報が含まれている2つのDDLログが存在します。
1つは**XMLファイル**で、もう1つは**テキスト・ファイル**です。DDLログは、ADRホームのlog/ddlサブディレクトリに格納されています。
$ORACLE_BASE/diag/rdbms/(データベース名)/(インスタンス名)/log/

構文
－値の表示：show parameter enable_ddl_logging;
－値の変更：alter system set enable_ddl_logging=true;


###出題例

**出題例**：PFILEを使用してデータベースがオープン中です。以下のコマンドを実行するとどうなりますか？
　→ALTER SYSTEM SET Log_BUFFER=1024 SCOPE=BOTH
　→エラーになります。静的パラメーターは起動中に変更できません。PFILEでSCOPE句BOTHは使用できません。

**出題例**：データベースインスタンス起動時にPFILEを指定することはできますか？
　→STARTUP PFILE = /u01/oracle/dbs/init.oraコマンドを使用することにより起動時にPFILEを使用することが可能です。

**出題例**：初期化パラメータのデフォルトを決定する優先順位を選択しなさい。
→①spfileSID.ora
→②spfile.ora
→③initSID.ora

**出題例**：NOMOUNT状態で行う作業はどれですか？
　→データベースの作成
　→**制御ファイルの再作成**

**出題例**：MOUNT状態で行う作業はどれですか？
　→データファイル名の変更
　→**ARCHIVELOGモードの切替え**
　→全データベースのリカバリ

**出題例**：現在、NOMOUNT状態です。ALTER DATABASE OPENコマンドを実行しました。どうなりますか？
　→エラーになる。NOMOUNT状態からMOUNT状態を飛ばしてOPENすることはできません。

**出題例**：SHUTDOWN ABORTでデータベースを停止しました。実行中のトランザクションは次回起動時にロールバックされますか？
　→実行中のトランザクションはロールバックされません。
　→次回起動時に行われるのは保存されているオンラインREDOログファイルを使用したロールフォワード（インスタンスリカバリ）です。
　
**出題例**：アラートログファイルについて正しい説明を選択しなさい
　→**テキスト形式とXML形式で生成される**
　
**出題例**：アラートログファイルに記録される内容を選択しなさい
　→起動時に使用されたデフォルトの初期化パラメータ
　→ブロック破損エラー
　→デッドロックエラー
　→アーカイブログモードの切替え

**出題例**：アラートログの場所を調査する方法を選びなさい。
diagnostic_dest初期化パラメータの値の、ディレクトリ内のlog.xmlを確認する。
show alertコマンドを使用する。
V$DIAG_INFOビューを使用する。

**出題例**：インスタンス起動前でも確認できるパラメータは存在しますか？
　→NOMOUNT、MOUNT状態なら参照することができるものがあります

***出題例*：現在インスタンスは起動中です。次のコマンドを実行しました。`ALTER SYSTEM SET LOG_BUFFER = 1024 SCOPE = SPFILE`　結果はどうなりますか？
　→現在起動中のインスタンスのLOG_BUFFERの値は変更されない。SPFILEのパラメータは変更され次回起動時にインスタンスに反映される。
　<font color="SlateGray">静的パラメーターをインスタンス起動時に変更しようとする問題は出題されると思います。ここまで理解しておけば間違えることはないと思います。</font>

**出題例**：各データベースの状態で可能なことを選択しなさい。
※NOMOUNT状態からMOUNT状態を経由せずにOPEN状態にすることはできない。
OPEN状態でV$ビュー、DBA_データディショナリビューの検索ができる。
NOMOUNT状態は、初期化パラメータの値を確認できる。（SHOW PARAMETERコマンド）
NOMOUNT→OPEN状態にはALTER DATABASE OPENコマンドを使用する。

**出題例**：データベースの起動と停止を行うことが出来る管理ツールを選択しなさい。
→SQL*Plus,SQLDeveloper,EnterpriseManager CloudControlを使用してデータベースの起動、停止を行うことができます。
<font color="SlateGray">EM Expressでは起動できません。</font>