Oracle Databaseの基本構造と用語整理(インスタンス・表領域・スキーマ)

目次

Oracle Databaseとは(基本)

Oracle Databaseは、Oracle Corporationが提供するリレーショナルデータベース管理システム(RDBMS)です。

エンタープライズ用途での広い採用実績があります。

 

Oracleの基本構成

Oracleは大きく以下の2つで構成されます。

  • インスタンス(Instance)
  • データベース(Database)

 

インスタンス(Instance)とは

インスタンスとは、データベースを操作するためのメモリ領域(SGAなど)+バックグラウンドプロセス群です。

データベースを操作する役割を持ちます。

ユーザーのSQLを受け取り、実行計画を作成して実際の処理を行います。

 

データベース(Database)とは

データベースとは、ディスク上に保存される物理ファイル群です。

主な構成

  • データファイル
  • 制御ファイル
  • REDOログファイル

 

SQLとPL/SQL

SQLは、データベースを操作するための標準言語です。

PL/SQLは、Oracle独自の拡張言語で、SQLに手続き的な処理(ロジック)を加えたものです。

インスタンスとデータベースの関係

従来の構成

インスタンス
(SGA + バックグラウンドプロセス)

データベース

1インスタンス = 1データベース

 

現在の主流(CDB構成)

Oracle 12c以降では以下が主流です。

インスタンス
(SGA + バックグラウンドプロセス)

CDB
├─ PDB1
├─ PDB2
└─ PDB3
CDB (Container Database)コンテナ・データベース
データベース(物理ファイルの集合)
PDB (Pluggable Database)プラガブル・データベース
CDB内の論理データベース

1つのインスタンスが1つのCDBを動かします。

CDBの中に複数のPDBが入ります。PDBごとに独立したデータベースのように扱えます。

通常は、1サーバに1インスタンスです(リソース競合が発生しやすい+運用が複雑化するため)。

※RAC構成では1つのデータベースを複数のインスタンスで共有・操作します。

バージョンごとの位置づけ

バージョン CDB/PDBの扱い
11g以前 なし(従来型のみ)
12c 初登場(任意)
18c/19c 主流・推奨
21c以降 ほぼ必須(非CDBは非推奨)

OracleDatabase19cでは、CDB(コンテナDB)+PDB(プラガブルDB)が正式な標準構成です。

 

CDB/PDBのメリット

  • 管理の一元化
  • リソース効率向上
  • PDB単位でのバックアップ・移行が可能
    →影響範囲を限定できる、作業時間を短縮できる、環境コピーが簡単

インスタンス(データベースを操作するためのメモリ領域)

SGA(System Global Area)

SGAはインスタンス全体で共有されるメモリ領域です。

共有プール
(Shared Pool)
SQL文やPL/SQLや実行計画を保持します。
同じSQL文は再利用されます。バインド変数も共有プールで使用します。
内訳:
Library Cache(SQLの解析結果)
Data Dictionary Cache(データ辞書情報)
データベース・バッファ・キャッシュ
(Buffer Cache)
高速化のためデータをキャッシュします。
ディスクI/O削減の要です。
REDOログバッファ
(Redo Log Buffer)
更新の履歴を保持します。
コミット時にREDOログファイルに書き込みます。
Javaプール
(Java Pool)
(任意)
Javaストアドプロシージャ実行用メモリ。
DB内でJavaを使う場合。
ストリーム・プール
(Streams Pool)
(任意)
データレプリケーション関連。
インメモリ領域
(In-Memory Area)
(任意)
列指向フォーマットでデータ保持、分析クエリ高速化(DWH用途)。
ラージプール
(Large Pool)
(任意)
RMANバックアップ、並列処理、共有サーバ接続。

デフォルト必須は、Shared Pool、Buffer Cache、Redo Log Bufferのみです。
他は用途に応じて有効化される任意領域です。

 

PGA(Program Global Area)

PGAは各セッション専用のメモリ領域です。

他ユーザと共有しません。接続数に比例して増えます。

用途

  • ソート処理
  • ハッシュ処理
  • セッション固有情報

インスタンス(バックグラウンドプロセス)

DBWn
(データベースライター)
Buffer Cacheのデータをデータファイルへ書き込みます。
更新済みで未書き込みのバッファ(dirty buffer)を書き出す。
LGWR(ログライター) Redo Log BufferをREDOログファイルへ書き込みます。
コミット時に必ず実行します。(=トランザクション確定:重要)。
CKPT
(チェックポイント)
チェックポイント発生時にデータファイルヘッダと制御ファイルを更新します。
書き込み位置を管理する役割。
PMON
(プロセスモニター)
障害時にリソースを解放等します。
異常終了したプロセスの後処理。
SMON
(システムモニター)
障害時にリカバリを実施します。
インスタンスリカバリ、一時領域のクリーンアップ。
ARCn(アーカイバプロセス) REDOログをアーカイブログへ保存(アーカイブログモード時)。

データベース

データベースは、各種ファイルから成り立っています。

データファイル データを格納します。
REDOログファイル 変更履歴を記録します。
用途:
・障害発生時の復旧(リカバリ)
・トランザクションの永続性確保
Oracleの信頼性の中核です。
制御ファイル
(Control File)
管理情報を保持します。
・データファイル構成
・REDOログ構成
・チェックポイント情報
破損するとDB起動不可(非常に重要)。

ユーザとスキーマ

ユーザを作成すると同じ名前のスキーマが自動で作成されます。

スキーマとは、あるユーザが持つテーブル等のオブジェクトの集合です。

データベースに接続すると、ログインしたユーザと同じ名前のスキーマに接続されます。

 

権限の考え方

自分のスキーマ内のオブジェクトは操作可能です。

システム権限や他スキーマへのアクセスは別途権限の付与が必要です。

例:

ユーザAがユーザBのスキーマにアクセスする場合はユーザBから権限を付与してもらい、かつsql文でもテーブル名の前にユーザBのスキーマ名を指定します。

select * from dbuser1.employee;

(dbuser1スキーマのemployeeテーブルにアクセスする)

 

削除

ユーザーを削除するとスキーマも削除されます。

リスナー(Listener)

リスナーとは、Oracleデータベースへの接続を取り次ぐ受付係です。

データベース(インスタンス)が起動していても、リスナーが停止していると外部から接続できません。

デフォルトのポート番号は、1521番です。

 

流れ

  1. クライアントが接続要求
  2. リスナーが受け付け
  3. サーバプロセスを割り当て

 

接続方式

SID接続 SID(システム識別子)は、インスタンスにアクセスする識別子です。
クライアント → インスタンス(接続先が固定、旧来方式)
サービス名接続 現行推奨。
クライアント → サービス名 → インスタンス(自動選択)。
柔軟に振り分け可能。

CDB構成ではPDBごとにサービス名があります。

CDB
├─ PDB1(service=A)
├─ PDB2(service=B)

 

接続例

SID指定

(DESCRIPTION=
  (CONNECT_DATA=
    (SID=ORCL)
  )
)

SERVICE_NAME指定

(DESCRIPTION=
  (CONNECT_DATA=
    (SERVICE_NAME=orclpdb)
  )
)

 

WindowsのOracle19cのリスナー

リスナーは、インスタンスのプロセスとは別に独立しています。

OracleOraDB19Home1TNSListener

 

SID接続の例

ユーザプロセス(SQLPlus等)の接続を受けてインスタンスのプロセスに接続します。

Windowsのサービスでは、OracleServiceの後のORCLがSIDです。
OracleService<SID>

 

OracleServiceORCLは、ORCLのインスタンスを起動・停止するWindowsサービスです。

 

SIDを確認するSQL

select instance_name from v$instance;

結果

instance_name
orcl

表領域とデータファイル

概念図

表領域は、論理(概念)で、データファイルは物理(ディスク)です。

表領域 論理です。複数のテーブルを作成できます。
セグメント エクステントの塊です。テーブルやインデックスにあたります。
エクステント 連続したブロックです。
ブロック 最小単位です。2K、4K、8K(デフォルト)、16K、32Kのどれかを指定します。
サイズが大きいと一度で多くのデータを読み込めますが逆に不要なデータまで読み込んでしまう可能性もあります。
データファイル 物理です。

オプティマイザ

オプティマイザとは、SQLの実行計画を決定する機能です。

現在は、CBO(Cost-Based Optimizer)のみ使用しています。
(Oracle 10g以降はRBO(Rule-Based Optimizer)が廃止されました)

特徴

  • 統計情報をもとに最適化
  • 実行計画に大きく影響

関連の記事

Oracle 行移行と行連鎖の違い
Oracle SQL Plusを使用するサンプル

△上に戻る