| この記事の要点 |
|
Oracle Database 全体アーキテクチャ
Oracle Database は他の RDBMS と異なり、「インスタンス」と「データベース」を明確に分離します。MySQL では「データベース」が論理スキーマを指しますが、Oracle では「データベース」=ディスク上のファイル群です。
| 概念 | 正体 | 消えると |
|---|---|---|
| インスタンス | メモリ (SGA) + プロセス群 | 再起動で消える (一時的) |
| データベース | ディスク上のファイル群 | 永続データ (消したら復旧必要) |
1 つのインスタンスは 1 つのデータベースに接続して動きます (Oracle RAC では複数インスタンスが 1 DB を共有)。
インスタンスの内部構造
SGA (System Global Area)
| コンポーネント | 役割 |
|---|---|
| Database Buffer Cache | データブロックのキャッシュ (最大コンポーネント) |
| Shared Pool | SQL 解析結果 / 実行計画キャッシュ / データディクショナリキャッシュ |
| Redo Log Buffer | REDO ログを Online Redo Log Files に書き込む前のバッファ |
| Large Pool | バックアップ / RMAN / 並列クエリ用 |
| Java Pool | Java VM 用メモリ |
| Streams Pool | Streams / GoldenGate 用 |
主なバックグラウンドプロセス
| プロセス | 役割 |
|---|---|
| DBWn (Database Writer) | Buffer Cache の変更を Data File へ書き込み |
| LGWR (Log Writer) | Redo Log Buffer を Online Redo Log Files へ書き込み |
| CKPT (Checkpoint) | チェックポイント発生時に Data File と Control File を更新 |
| SMON (System Monitor) | インスタンス起動時の Crash Recovery、一時 Tablespace 領域回収 |
| PMON (Process Monitor) | 異常終了したユーザープロセスのクリーンアップ |
| ARCn (Archiver) | 満杯になった Online Redo Log を Archive Log に退避 |
| MMON / MMNL | AWR スナップショット、自動メンテナンス |
データベースの物理構成
| ファイル種別 | 役割 | 失うと |
|---|---|---|
| Data Files (.dbf) | 実データ・インデックスを格納 | 該当データ消失 |
| Control Files (.ctl) | DB 構造・ファイルパス・SCN 管理 | DB 起動不可 (バックアップ必須) |
| Online Redo Log Files (.log) | 変更履歴 (現在進行中) | 復旧不可 |
| Archive Log Files | 満杯になった Redo の退避 | PITR 不可 |
| Parameter File (init.ora / spfile.ora) | 初期化パラメータ | デフォルト値で起動 |
| Password File (orapwSID) | SYSDBA 等の特権ユーザー認証 | OS 認証で再作成 |
| Alert Log / Trace Files | エラーログ・トレース | 履歴消失のみ |
Tablespace (表領域)
Oracle は論理的なストレージ管理単位として Tablespace を用います。物理 Data File をグループ化したものが Tablespace で、テーブルは Tablespace に作成されます。
| Tablespace | 用途 |
|---|---|
| SYSTEM | データディクショナリ (システムのメタデータ) |
| SYSAUX | SYSTEM の補助 (AWR・Statspack 等) |
| UNDO (UNDOTBS1) | ロールバックセグメント (Read Consistency) |
| TEMP | ソート・ハッシュ結合・一時表用 |
| USERS | ユーザーテーブルのデフォルト |
| 業務用 (例: APP_DATA) | 個別アプリ向けに作成 |
-- 表領域作成
CREATE TABLESPACE app_data
DATAFILE '/u01/oradata/orcl/app_data01.dbf' SIZE 1G
AUTOEXTEND ON NEXT 100M MAXSIZE 10G
EXTENT MANAGEMENT LOCAL;
-- 表領域にテーブル作成
CREATE TABLE users (
id NUMBER,
name VARCHAR2(100)
) TABLESPACE app_data;
-- 表領域一覧
SELECT tablespace_name, status, contents FROM dba_tablespaces;
-- 使用量
SELECT tablespace_name,
ROUND(SUM(bytes)/1024/1024) AS mb_used
FROM dba_segments
GROUP BY tablespace_name;
CDB / PDB (Multitenant: Oracle 12c+)
Oracle 12c から導入されたマルチテナント構成。1 つの Container DB (CDB) の中に複数の Pluggable DB (PDB) を配置し、リソースを集約します。19c 以降は CDB 必須 (Non-CDB 廃止)。
| 概念 | 内容 |
|---|---|
| CDB$ROOT | 全 PDB 共通のメタデータ・SYS ユーザー |
| PDB$SEED | 新規 PDB 作成用テンプレート |
| PDB1, PDB2, ... | 業務アプリ用 PDB (テナント) |
-- 現在の接続先確認
SHOW CON_NAME;
SELECT name, con_id, open_mode FROM v$pdbs;
-- PDB 切替
ALTER SESSION SET CONTAINER = PDB1;
-- PDB 作成
CREATE PLUGGABLE DATABASE pdb_app1
ADMIN USER pdb_admin IDENTIFIED BY pass
FILE_NAME_CONVERT = ('/seed/', '/pdb_app1/');
ALTER PLUGGABLE DATABASE pdb_app1 OPEN;
-- 接続: tnsnames.ora で SERVICE_NAME = pdb_app1
Net Services / Listener
クライアントはOracle Listener (TCP/1521 デフォルト) 経由でインスタンスに接続します。
# tnsnames.ora (クライアント側)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
# listener.ora (サーバ側)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db.example.com)(PORT = 1521))
)
)
# 操作
lsnrctl start
lsnrctl status
lsnrctl services
動的パフォーマンスビュー (v$)
-- インスタンス情報
SELECT instance_name, host_name, version, startup_time, status
FROM v$instance;
-- データベース情報
SELECT name, dbid, created, log_mode, open_mode FROM v$database;
-- データファイル
SELECT file#, name, bytes/1024/1024 AS mb, status FROM v$datafile;
-- セッション
SELECT sid, serial#, username, program, status FROM v$session
WHERE username IS NOT NULL;
-- 待機イベント (どこで詰まっているか)
SELECT event, total_waits, time_waited
FROM v$system_event
ORDER BY time_waited DESC FETCH FIRST 10 ROWS ONLY;
-- SGA サイズ
SELECT * FROM v$sgainfo;
初期化パラメータ (init.ora / spfile)
-- 現在の値
SHOW PARAMETER sga_target;
SELECT name, value FROM v$parameter WHERE name = 'db_cache_size';
-- 動的変更 (spfile + memory)
ALTER SYSTEM SET sga_target = 2G SCOPE=BOTH;
-- spfile のみ変更 (再起動後反映)
ALTER SYSTEM SET processes = 500 SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
-- 主要パラメータ
-- sga_target : SGA 自動管理サイズ
-- pga_aggregate_target : PGA 自動管理サイズ
-- processes : 最大プロセス数
-- sessions : 最大セッション数
-- open_cursors : 1 セッションあたり最大カーソル数
-- db_block_size : ブロックサイズ (8K がデフォルト、DB 作成後変更不可)
FAQ
Q: ORACLE_SID と DB_NAME と SERVICE_NAME の違いは?
A: ORACLE_SID = OS から見たインスタンス識別子、DB_NAME = データベース固有名、SERVICE_NAME = Listener 経由で接続するサービス名 (1 DB に複数可)。
Q: NOARCHIVELOG モードと ARCHIVELOG モードの違いは?
A: ARCHIVELOG なら満杯になった Online Redo Log が Archive Log に保存され、PITR (Point-in-Time Recovery) 可能。本番は必須。NOARCHIVELOG はバックアップ時点までしか戻せません。
Q: PDB と Schema の違いは?
A: Schema = 1 ユーザーの所有オブジェクト群 (DB 内の名前空間)、PDB = 独立したデータベース (独自の SYS、独自のスキーマ群を持つ)。マルチテナント分離が PDB の存在意義。
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38