第13章 Oracleアーキテクチャ(補足)

1.Oracleアーキテクチャ

■OracleRDBMSの基本要素

■プロセスとは?

メモリに常駐し、特定の処理を行うプログラムのこと。

2.Oracleデータベース

■Oracleデータベースとは

Oracleを構成するファイル群の総称。

■Oracleデータベースのファイル構成

1.データ・ファイル
「表領域」に対応付けられるファイル。
全てのデータとデータの構造、データ・ディクショナリが格納されている。
2.REDOログ・ファイル
データベースに対して行われた全ての更新情報が記録されるファイル。
データ・ファイルが壊れたときなどの、回復処理の際に使用される。
ミラー化できる。
3.制御ファイル
データベースの現在の状態、物理構成を記録するファイル。
データ・ファイル、REDOログ・ファイルの位置、データベースの名前などが管理されている。
ミラー化できる。

■その他のファイル

1.パラメータ・ファイル
データベースの様々なパラメータ(メモリの割り当てや言語環境など)を設定する。データベース起動時に読み込まれる。
2.アーカイブ・ファイル
REDOログ・ファイルのバックアップ。パラメータのオプションにより、アーカイブ・ファイルを作成するかしないかを設定する。

3.Oracleインスタンス

■Oracleインスタンスとは

Oracleデータベースを操作するプロセス(プログラム)群とメモリ領域。OracleRDBMSの中心部分。

  1. 共有メモリ上に確保される「System Global Area(SGA)」
  2. 様々な処理を実行するプロセス群「バックグラウンド・プロセス」

■POINT

4.SELECT文の処理

■ユーザー・プロセスからSELECT文が発行されたときのOracle内部の処理

  1. ユーザ・プロセスが要求(SELECT文)を発行する。
  2. ユーザ・プロセスの要求(SELECT文)を、サーバ・プロセスが受け取る
  3. SQL文の構文チェックを行う。
  4. データ・ディクショナリを検索し、権限の確認を行う。
  5. データ・ディクショナリを検索し、最も効率のよい検索パスを調べ、「実行計画」を作成する。
  6. 実行計画を他のユーザが再利用できるように、SQL文と実行計画をSGA内の「共有プール」に格納する。
  7. 実行計画に基づいて処理を実行する。
  8. 該当データが、SGA内の「データベース・バッファ・キャッシュ」に置かれているかどうかをチェックする。
  9. 該当データが置かれていない場合は、ファイルから該当データを取り出し、データベース・バッファ・キャッシュに置く
  10. 該当データをユーザ・プロセスに返す

5.ロック

■ロックとは?

 データの同時更新を防ぐため、データの更新が確定するまで、そのデータをロックして他のユーザから変更できないようにする。
 Oracleでは「行」単位に自動的にロックを掛ける(SQL Serverのデフォルトは表単位)。明示的にロックをかけることもでき、その際は行単位だけでなく表単位のロックも行える。

6.Oracleトランザクション

■トランザクションとは?

 Oracleに接続、あるいは前回のCOMMITまたはROLLBACKが行われてから、次にCOMMITまたはROLLBACKするまでの一連の処理。(SQL入門の範囲)
 ただし、トランザクションはCOMMIT、ROLLBACK以外にも暗黙的に終了されることがある。(Oracle入門の範囲)
 トランザクションの途中にDDL文を発行すると、DDL文の直前までの処理がすべて確定される(暗黙のCOMMIT)。

7.読み取り一貫性・1

■読み取り一貫性とは?

 Oracleでは、データの更新が行われる際、その行に対してロックがかけられるが、ロックがかけられた行を他のユーザが検索をかけても、ロックが解除されるまで検索を待たされることはない。この機能を読み取り一貫性と呼ぶ(SQL Serverには無い)。
 この際、変更されたデータは確定されるまでの間、変更をかけたユーザには「更新後」データが、他のユーザには「変更前」のデータが表示される。変更が確定されると、どちらも「更新後」のデータが表示される。

8.読み取り一貫性・2

■読み取り一貫性の単位

1.行単位(行レベル)
Oracleのデフォルト。変更をかけている行にのみ自動的にロックがかかる。
2.文単位(文レベル)
複数の行に対して同時に変更をかけている場合、変更対象の複数行に対して自動的に同時にロックがかかる。
3.トランザクション単位
最初に検索した値を元に様々な更新を行う場合、更新途中で別ユーザによって値を更新されてしまうと、その後の更新結果が狂う場合が考えられる(例、テストの平均点を求め、その後、平均以下の学生について様々な処理を行うなど)。この場合、トランザクションが全て終わるまで参照表をロックすることにより、途中に値(平均点)が変わってしまうことを防ぐ(明示的に指定が必要)。

■トランザクション単位でのロックのかけ方

トランザクション開始時に、以下のコマンドを実行する。

SET TRANSACTION READ ONLY;

9.INSERT、UPDATE、DELETE文の処理

■ユーザー・プロセスからINSERT、UPDATE、DELETE文が発行されたときのOracle内部の処理

  1. ユーザ・プロセスが要求(DML文)を発行する。
  2. ユーザ・プロセスの要求(DML文)を、サーバ・プロセスが受け取る
  3. SQL文の構文チェックを行う。
  4. データ・ディクショナリを検索し、権限の確認を行う。
  5. データ・ディクショナリを検索し、「実行計画」を作成する。
  6. 実行計画に基づいて処理を実行する。
  7. 該当データが、SGA内の「データベース・バッファ・キャッシュ」に置かれているかどうかをチェックする。
  8. 該当データが置かれていない場合は、ファイルから該当データを取り出し、データベース・バッファ・キャッシュに置く。(ここまではSELECT文と同じ)
  9. 「ロールバック・セグメント(データ変更時の古いデータをためておく領域)」を、SGA内の「データベース・バッファ・キャッシュ」に確保する。
  10. 取り出したデータの該当行をロックする。
  11. 変更前、変更後データをREDOログ・バッファに書き込む
  12. 変更前データを、ロールバック・セグメントに書き込む
  13. データの該当行を変更する

※ロックやロールバック・セグメントにかかれた情報などは、トランザクション終了(COMMIT、ROLLBACK)時に開放される。

10.マルチスレッド・サーバ構成

■マルチスレッド・サーバ構成とは?

 これまでの内容は、1つのユーザ・プロセスの要求を、1つのサーバ・プロセスが処理していた。この構成を「専用サーバ構成」と呼ぶ。これに対し、1つのサーバ・プロセスで複数のユーザ・プロセスを同時に処理できるように構成したものを「マルチスレッド・サーバ構成」と呼ぶ。

■専用サーバ構成の特徴

1つのユーザ・プロセスの要求を、1つのサーバ・プロセスが受け、処理する。この構成ではユーザ・プロセスの数が増えるにつれてサーバ・プロセスの数も増えてしまい、資源を多く消費してしまう。ところが例えばAccessやVBなどのアプリケーションからOracleデータベースに接続し、データを大量に打ち込む場合、打ち込みの間は通信が行われないため、サーバ・プロセスは待ち状態になってしまう。

■マルチスレッド・サーバ構成の特徴

上記のように、ユーザ・プロセスからの要求頻度が低い場合、多くのユーザ・プロセスの要求を少ないサーバ・プロセスで処理させれば、資源の節約に繋がる。
マルチスレッド・サーバ構成で、共有して使用されるサーバ・プロセスを「共有サーバ(プロセス)」と呼ぶ。

■専用サーバとマルチスレッド・サーバの共存

マルチスレッド・サーバ構成の中で、専用サーバ(プロセス)と共有サーバ(プロセス)を共存させることができる。同じデータベースに接続するユーザプロセスでも、専用サーバに接続する、共有サーバに接続するというように、どちらで接続するのかを指定できる。
通常、OLTP処理(オンライン・トランザクション処理)には共有サーバ(プロセス)へ、バッチ処理(データの一括更新など)には専用サーバ(プロセス)へ接続する。

まとめ・補足

■Oracleインスタンス

OracleインスタンスはOracleの中心部分で、SGAとバックグラウンドプロセスから構成される。
データベースに1つに対して1つのインスタンスが対応し、識別子としてSIDがつけられている。1つのサーバに複数のデータベースがあるとき、ユーザはSIDを変更することにより、接続するデータベースを選択できる。

■Oracleインスタンスの構成

1.SGA
「データベース・バッファ・キャッシュ」「REDOログバッファ」「共有プール」から構成されている。
2.バックグラウンド・プロセス
「DBWR」「LGWR」「SMON」「PMON」「CKPT」から構成されている。

■OracleアーキテクチャのPOINT

  1. REDOログファイル、制御ファイルはミラー化できる。
  2. SGA(System Global Area)とバックグラウンド・プロセスがOracleインスタンスを構成し、このOracleインスタンスに対して識別子(SID)がつけられる。
  3. LGWR(ログライター)が書き出すタイミングには、COMMITが含まれる。

練習問題

問題1

次の現象について正しく解説している説明文を選べ。

端末AでユーザSCOTTでログインし、DEPT表のデータを全てDELETEし、確認のためにDEPT表をデータを検索した。結果は0件であった。
同時刻に端末BでユーザSCOTTでログインし、DEPT表のデータを検索した。結果は10件が返された。
  1. Oracleのロック処理のデフォルトである行ロックの動きである。
  2. Oracleのデータ整合性が崩れており、DBの再起動により対応できる。
  3. Oracleの読み取り一貫性の動きである。
  4. Oracleの環境変数ORACLE_SIDが正しく設定されていない可能性がある。

問題2

Oracleインスタンスの記述で間違っているものを選べ。

  1. Oracleインスタンスは固定されていて、接続する際にユーザは選択できない。
  2. Oracle RDBMSの中心部分をOracleインスタンスと呼ぶ。
  3. Oracleインスタンスは、システムグローバルエリアとバックグラウンドプロセスで構成されている。
  4. Oracleインスタンスには識別子(SID)がつけられている。

[ TOP ]