目次
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番です。
流れ
- クライアントが接続要求
- リスナーが受け付け
- サーバプロセスを割り当て
接続方式
| 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)が廃止されました)
特徴
- 統計情報をもとに最適化
- 実行計画に大きく影響
関連の記事


