🍣

ORACLE MASTER Silver DBA 取得に必要な知識のまとめ~アーキテクチャ編~

2024/05/13に公開

はじめに

本記事はORACLE MASTER Silver DBA取得に必要な知識の個人的まとめになります。

ORACLE MASTERとは

Oracle Databaseの管理スキルを証明するOracle社の資格です。

Bronze, Silver, Gold, Platinumの4ランクあります。

Oracle Databaseの内部構造

Oracle Databaseはインスタンスとデータベースファイルから構成されます。

インスタンス

処理を担当する部分、インスタンスが起動していないと処理が実行できません。

システムグローバル領域(SGA)というメモリ領域とバックグラウンドプロセスから構成されます。

システムグローバル領域(SGA)

SGAはインスタンス起動時に割り当てられるメモリ領域です。

プロセス間で共有されるデータが保管されます。

SGA内には用途に応じたいくつかのメモリ領域があります。

コンポーネント 説明
データベースバッファキャッシュ データファイルから読み込んだブロックをキャッシュ、また、変更されたブロックをデータファイルに書き出す前に一時的に保管
REDOログバッファ REDOログファイルに書き込む前のREDOデータ (変更履歴) を一時的に保管
共有プール 解析済みの SQL やデータディクショナリの情報などをキャッシュ
Javaプール Javaで記述されたストアドプログラムの実行に使用
ラージプール バックアップや並列処理などの作業領域として使用

バックグラウンドプロセス

バックグラウンドプロセスはインスタンス起動時にSGAのメモリ割当てと併せて起動されるプロセスの総称です。

特定の接続に関する処理を担うサーバープロセスとは異なり、特定の接続に限定されないOracle Database全体の処理を担います。

主なバックグラウンドプロセスは以下の通りです。

プロセス名 説明
DBWn(データベースライター) データベースバッファキャッシュ内の変更済みブロックをデータファイルに書き込む
LGWR(ログライター) REDOログバッファのREDOデータ(変更履歴情報)をREDOログファイルに書き出す
CKPT(チェックポイント) DBWnに対してデータベースバッファキャッシュ内の変更済みブロックをデータファイルに書き込む指示を出す。併せて、制御ファイルにチェックポイント情報を書き込む
SMON(システムモニター) インスタンスが異常終了した場合、次回インスタンス起動時にデータベースファイルの整合性を復旧する処理を実行する。また、未使用の一時セグメントを開放する
PMON(プロセスモニター) プロセスが異常終了した場合、そのプロセスが使用していたデータやリソースの後処理(クリーンアップ)を実行する。アイドル時間を超えたセッションを検知し、強制終了などの対処を指示する
MMON(管理モニター) AWRスナップショットなど性能分析で使用されるさまざまな統計情報を定期収集する
ARCn(アーカイバ) ログスイッチの発生後、REDOログファイルのREDOデータをアーカイブログファイルとしてコピーする
LREG(リスナー登録プロセス) インスタンスに関する情報をリスナーに登録する

シングルインスタンス構成

1つのインスタンスは1組のデータベースファイルに対応します。

1つのインスタンスを複数組のデータベースファイルに対応させることや1組のデータベースファイルに複数のインスタンスを対応させることはできません。

また、対応するインスタンスとデータベースは同じコンピュータ上になければなりません。インスタンスとデータベースファイルを異なるコンピュータに配置できません。

この構成をシングルインスタンス構成といい、Oracle Databaseの基本構成になります。

RAC 構成

複数のデータベースサーバーでOracle Databaseを実現し、高い可用性と性能を実現する構成としてRAC構成があります。

RAC構成のOracle Databaseでは異なるデータベースサーバー上で起動する複数のインスタンスが、共有ストレージ装置に設置された1組のデータベースファイルにアクセスします。

データベース記憶域

Oracle Database が読み書きするファイル

ファイル 説明
データファイル 表や索引などのデータが格納される
REDOログファイル データベースに対して行われたすべての変更履歴が記録される
制御ファイル データファイル名、REDOログファイル名を含むデータベースの構成情報及び管理情報が格納される
初期化パラメータファイル 初期化パラメータのリストおよび各パラメータの値が格納される
パスワードファイル SYSDBAなどの管理権限を持つユーザーのパスワードを管理する
アーカイブログファイル REDOログファイルのコピー。データベースに対する過去の変更履歴を保持する

これらのファイルのうち、データファイル、REDOログファイル、制御ファイルの3つをデータベースファイルといいます。

データファイルと表領域

表領域はデータファイルを論理的にグループ化した概念です。

オブジェクト(表や索引)の格納先に指定され、1つのOracle Databaseには複数の表領域があります。

オブジェクト

オブジェクトにはセグメントと呼ばれる記憶域が1対1で対応します。

また、セグメントは1つ以上のエクステントから構成され、エクステントは1つのデータファイル内の連続した複数のブロックから構成されます。

データファイル内のブロックのサイズは同じです。

ただし、ビューのようにデータを保持しないオブジェクトにはセグメントは対応しません。

制御ファイル

制御ファイルのファイル名はCONTROL_FILES初期化パラメータに設定します。

制御ファイルを多重化している場合はCONTROL_FILESに複数のファイル名が設定されています。

REDOログファイル

REDOログファイルは直近の変更が失われるような障害から回復するために使用されます。

  • インスタンスが異常終了した場合の障害復旧(インスタンスリカバリ)
  • データファイルが破損した場合の障害復旧(メディアリカバリ)

Oracle DatabaseではトランザクションがコミットされたタイミングでREDOデータをREDOログファイルに書き込みます。

REDOログファイルが破損するとデータベースの変更履歴が失われてしまうため、通常はREDOログファイルを多重化します。

多重化構成におけるREDOログファイルをメンバーと呼びます。

また、多重化されたメンバーの組をグループ(ロググループ)と呼びます。

カレントグループのメンバーに空き領域がなくなると、別のロググループがカレントグループになります。

このグループの切り替えをログスイッチと呼びます。

アーカイブログファイル

古いREDOファイルはアーカイブログファイルとして保持されます。

アーカイブログファイルはOracle Databaseの運用モードをARCHIVELOGモードにすることで生成されます。

メディアリカバリの流れ

  1. メディア障害発生前の正常な状態でデータベースのバックアップを取得しておく
  2. 障害が発生し、データベースが停止
  3. リストアを実行し、データベースをバックアップ取得時点の状態に戻す
  4. リカバリを実行し、バックアップ取得時点から障害発生直前までの一連のREDOデータを適用し、データベースを障害発生直前の状態にする
  5. データベースをOPENし、データベースの利用を再開

メディアリカバリを行うには、正常な状態で取得したデータベースのバックアップとバックアップ取得時点から障害発生直前までの一連のREDOデータが必要です。

そのため、 メディアリカバリにはARCHIVELOGモード運用が必須です。

ARCHIVELOGモードの構成

ARCHIVELOGモードの構成手順は以下の通りです。

  1. 高速リカバリ領域を構成
    • DB_RECOVERY_FILE_DESTとDB_RECOVERY_FILE_DEST_SIZEを指定
  2. ARCHIVELOGモードに変更
    • インスタンスをMOUNT状態まで起動し、 ALTER DATABASE ARCHIVELOG を実行

キャッシュ機能

データベースバッファキャッシュ上にはデータファイルから読み出したブロックをメモリ上に一時的に保管しています。

次に同じブロックを読みだした場合はデータベースバッファキャッシュからブロックを読み出します。

また、データベースバッファキャッシュはデータファイルへのブロックの書き込みを遅延実行するバッファの役割も持ちます。

Oracle Databaseでトランザクションを実行するとデータベースバッファキャッシュにあるブロックが変更され、DBWnにより後でデータファイルに書き込まれます。

共有プール

以下の情報をキャッシュするメモリ領域です。

  • 解析済みのSQLの情報
  • データディクショナリの情報

PGA(プログラムグローバル領域)

PGAは特定のプロセス専用のメモリ領域です。

SGAと異なり、複数のプロセス間で共有されることはありません。

おわり

アーキテクチャ編はここまで。

次はOracle Databaseの各種ツールについて説明していきます。

Discussion