<Insert Picture Here>
日本オラクル株式会社
今さら聞けない !? Oracle 入門 ~後編~
Oracle Direct Seminar
<Insert Picture Here>
Agenda
1. Oracle の基本動作 2. Oracle のファイル群
3. Oracle のプロセス群と専用メモリ領域 4. データベース内部動作
1. Oracle の基本動作 2. Oracle のファイル群
3. Oracle のプロセス群と専用メモリ領域
今さら聞けない !? オラクル入門 ~後編~
4. データベース内部動作 検索時の動作
更新時の動作
バックアップについて
クライアント データベース サーバ
アプリケーション サーバ SQL 文
サーバ・
プロセス
サーバ・
プロセス サーバ・
プロセス
Oracle 専用の メモリ領域 Oracle 専用の
メモリ領域
データベースアクセス
ユーザ・
プロセス
ユーザ・
プロセス
ユーザ・
プロセス
インスタンス
サーバ・
プロセス
Oracle専用の メモリ領域 Oracle専用の
メモリ領域
常駐プロセス 常駐プロセス
メモリ上のデータを検索する
メモリ上の更新データを ディスクに書き込む
データベースアクセス
ユーザ・
プロセス
SGA SGA
バックグラウンド・プロセス バックグラウンド・プロセス
データベース
サーバ ディスク上のデータ
を 読み込む
データファイル
REDO
ログファイル アーカイブREDOログファイル
制御ファイル パラメータファイル
REDO
ログファイルREDO
ログファイルアーカイブ
REDOログファイル
アーカイブ
REDOログファイル
制御ファイル 制御ファイル パラメータファイル
パラメータファイル
表データを格納するファイル 以外にもいくつかのファイル が存在
Oracle のファイル群
データファイル データファイル
REDOログ・
バッファ 共有プール
データベース・
バッファ・キャッシュ
システム・グローバル領域 (SGA)
y 処理を高速にするための共有メモリー領域
・表データ
・索引データ
・UNDO情報
などを一時的に格納
・SQL文の情報
・DBの管理情報
などを保持
・更新履歴情報
を一時的に格納
z
SMON インスタンス回復を実施
z
PMON
ユーザプロセスの回復を実施z
DBWR (DBライター) データの書き込み
z
CKPT チェックポイントの処理実施
z
LGWR (
ログライター)
ログの書き込みz
ARCH アーカイブファイルを生成
SGA
データ・ファイル
REDO
ログファイル
制御ファイル
アーカイブファイル アーカイブファイル PMONPMON SMONSMON
DBWRDBWR
CKPTCKPT
LGWR LGWR
ARCHARCH
バックグラウンド・プロセス
<Insert Picture Here>
Agenda
1. Oracle の基本動作 2. Oracle のファイル群
3. Oracle のプロセス群と専用メモリ領域 4. データベース内部動作
1. Oracle の基本動作 2. Oracle のファイル群
3. Oracle のプロセス群と専用メモリ領域
今さら聞けない !? オラクル入門 ~後編~
4. データベース内部動作 検索時の動作
更新時の動作
バックアップについて
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
データ検索時の動作 ( SQL 文解析)
サーバ・
プロセス
REDOログ・ファイル データ・ファイル REDOログ・ファイル
①検索要求
② SQL文を解析して実行計画をメモリ上に保持
4
検索
ユーザ・
プロセス
Select * from ~;
SQL 文の解析とは
SELECT d.dname,e.empno,e.ename,e.job from emp e,dept d
where e.deptno=d.deptno;
1. SQL文をチェック 2. 実行計画を作成
3. 共有SQL領域に格納
発行されたSQL文
・ 同じ
SQL
が今までにあったか・ 指定されている表や列が本当にあるのか(妥当性)
・ アクセス権限は正しいか
・・・などを
チェック
!SQL文のチェック 1
実行計画の作成
2
共有SQL領域に格納
3
作成された実行計画
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=14 Bytes=392)
1 0 HASH JOIN (Cost=5 Card=14 Bytes=392)
2 1 TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=4 Bytes=44) 3 1 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=238)
↓ データをどのように持ってくるのか
実行計画の格納
共有プール 共有プール
ライブラリ・キャッシュ ライブラリ・キャッシュ
SELECT name
FROM emp
SELECT name
FROM dept SELECT
name
FROM emp
REDOログ・
REDOログ・
バッファ
バッファ データ・データ・
ディクショナリ・
ディクショナリ・
キャッシュ キャッシュ
データベース・
データベース・
バッファ・キャッシュ
バッファ・キャッシュ
各ユーザが同一の SQL を実行した場合、同じ共有 SQL 領域を利用
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
データ検索時の動作 ( SQL 文解析)
サーバ・
プロセス
REDOログ・ファイル データ・ファイル REDOログ・ファイル
①検索要求
② SQL文を解析して実行計画をメモリ上に保持
4
検索
ユーザ・
プロセス
Select * from ~;
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
データ検索時の動作 (メモリ検索)
サーバ・
プロセス
③ キャッシュ上でデータ検索 SGA
4
検索
ユーザ・
プロセス
REDOログ・ファイル データ・ファイル REDOログ・ファイル
REDOログ・ファイル データ・ファイル REDOログ・ファイル
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
サーバ・
プロセス
④ データをキャッシュに展開
4
検索
4 4
データ検索時の動作 (ディスク読込み)
ユーザ・
プロセス
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
サーバ・
4
プロセス
⑤ 検索結果を返す
4
検索
データ検索時の動作 (結果を返す)
REDOログ・ファイル データ・ファイル REDOログ・ファイル
ユーザ・
プロセス
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
データ更新時の動作 ( SQL 文解析)
サーバ・
プロセス
② SQL 文を解析して実行計画をメモリ上に保持
4 8
更新
①更新要求
ユーザ・
プロセス
Update ~;
REDOログ・ファイル データ・ファイル REDOログ・ファイル
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
データ更新時の動作 (メモリ検索)
サーバ・
プロセス
③ キャッシュ上でデータ検索 SGA
4 8
ユーザ・
プロセス
REDOログ・ファイル データ・ファイル REDOログ・ファイル
更新
REDOログ・ファイル データ・ファイル REDOログ・ファイル
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
サーバ・
プロセス
④ データをキャッシュに展開
4 4
4 8
データ更新時の動作 (ディスク読込み)
ユーザ・
プロセス
更新
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
サーバ・
4
プロセス
⑤ 更新履歴を記録
4 8
4 8
データ更新時の動作 (更新ログ生成)
ユーザ・
プロセス
REDOログ・ファイル データ・ファイル REDOログ・ファイル
4
更新
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
4 8
サーバ・
プロセス
⑥ 更新前イメージをUNDO領域に格納し、
行データを更新
4 8
データ更新時の動作 ( UNDO 生成)
4
ユーザ・
UNDO
プロセス4
更新
4 8
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
REDOログ・ファイル データ・ファイル
4 4
REDOログ・ファイル
4 8
8 4 4
サーバ・
プロセス
⑦ コミット要求
⑨ コミット完了通知
DISK上のデータ・ファイル には更新データが反映 されていない
データ更新時の動作 (ログ書き込み)
4 8
LGWR
⑧ REDOログ・ファイル
LGWRへの書き込み
ユーザ・
UNDO
プロセス4 8
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
REDOログ・ファイル
4 4
REDOログ・ファイル
8 4 4
サーバ・
プロセス
DBWRDBWR
データ・ファイルへの書き込み
8
データ更新時の動作 (データ書込み)
コミットとは 非同期!
ユーザ・
UNDO
プロセスREDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
REDOログ・ファイル データ・ファイル
4 4
REDOログ・ファイル
4 8
8 4 4
4 8
LGWR LGWR
サーバ・
プロセス
⑦ コミット要求
⑨ コミット完了通知
DISK上のデータ・ファイル には更新データが反映 されていない
更新中のインスタンス障害
~データ更新時の動作 ~
UNDO
メモリ内の更新データが無くなる
インスタンス障害
ユーザ・
プロセス
4 8
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
REDOログ・ファイル
4
REDOログ・ファイル
サーバ・
プロセス
8
SMON SMON
インスタンス再起動時に 自動的にリカバリを実行
更新中のインスタンス障害
~データ更新時の動作 ~
ユーザ・
プロセス
REDOログ・
バッファ データベース・
バッファ・キャッシュ 共有プール
SGA
REDOログ・ファイル REDOログ・ファイル
LGWR LGWR
データ更新時の動作 (ログ書き込み)
サーバ・
プロセス
REDOログ・ファイル LGWR
LGWR
1つのREDOログ・ファイルがいっぱいになると 次のREDOログ・ファイルに切り替わる
→ ログ・スイッチ
ユーザ・
プロセス
データベース運用モード
52
53
51
循環してREDOログを使用し、
上書き前にアーカイブする
52
53
循環してREDOログを使用 ARCHIVELOGモード NO ARCHIVELOGモード
54 54
アーカイブREDOログ・ファイル
循環書込みを行うため、更新 履歴情報が上書きされる
51 51
52 53
54
ログ順序番号
52
53
更新履歴を残しておく為に、
REDOログ・ファイルのコピーをとっておく アーカイブREDOログ・ファイル
REDOログ・ファイル ARCHARCH
DataFile1
DataFile2
[時間]
データ・ファイルの バックアップ
DataFile1
y 更新履歴情報がないので、バックアップ時点のデ ータまでをリカバリ
y データベースとしての一貫性を保つために全 DB ファイルをリストア
全データベースのバックアップを リストアする
②
DataFile2
① 障害発生
NOARCHIVELOGモード運用時の
リカバリの制限
DataFile1
障害直前の状態まで復旧可能
アーカイブREDOログ・ファイル
[時間]
データ・ファイルの バックアップ
・・・・・・
① 障害発生
② リストア
④ REDO
ログ・ファイル適用
③ アーカイブ 適用
DataFile1
ARCH2
ARCH1 ARCH9
REDOログ
障害直前の状態まで復旧可能
1週間前 現在
データ・ファイルの バックアップ Data File アーカイブREDOログ・ファイル
[時間]
データ・ファイルの バックアップ
Data File
ARCH2
ARCH1 ARCH3
A B C
Bのバックアップを取得したタイミングで過去の
データ・ファイル及びARCH1からARCH3まで削除可能
データ・ファイル
データ・ファイルの バックアップ Data File
ARCH5
ARCH4 ARCH6 ARCH7