プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Oracle
  • Oracleアーキテクチャ、データベース、「インスタンス」の概要(SGA、バックグラウンド…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

Oracleアーキテクチャ、データベース、「インスタンス」の概要(SGA、バックグラウンドプロセス、起動の流れ、初期化パラメータファイル)、クライアント側

05.21

  • miyabisan2
  • コメントを書く

この記事は5分で読めます

Oracleアーキテクチャの全体像

Oracleの構成要素は、大きく書きの三つに分かれます。

  • Oracleソフトウェア
  • データベース
  • インスタンス

Oracleソフトウェア

Oracleを構築する際は、初めにインストールを行います。

この中に含まれる「DBCA」というソフトを利用して、「インスタンス」と「データベース」を作成することになります。

データベース

Oracle内でのデータを格納庫です。(「データファイル」、「制御ファイル」等を持つ。)

インスタンスとは、シングル構成であれば1:1で対応しています。

Oraleの三大要素の一つである「データベース」ですが、構成としては下記のようになっています。

データベースの構成要素

データベースは、大きく下記三つの構成要素で構成されています。全て物理ファイルです。

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

これらは、シングル構成の場合は、一つのインスタンスに対して必ず1:1で作られます。

データファイル

データベースの主要なファイルが格納されます。(テーブルや、インデックス情報等)

「データファイル」については、詳しくは、下記の記事でも解説しています。

【Oracleアーキテクチャ】「データファイル」の構造について

REDOログファイル

データベースの更新履歴を逐次格納します。Oracleは、複数のREDOログファイルをローテーションして上書きして使っています。

制御ファイル

容量は非常に小さいファイルです。「データファイル」や「REDOログファイル」等の各ファイルの最終更新日時等の情報を書き込んだりします。

物理ファイルの場所

下記のコマンドを実行すると、物理ファイルの場所を確認することができます。

1
select file#,name from V$datafile;

「(Oracleのインストールディレクトリ)\oradata\<SID>\」に配置されます。

上記の画像では、ほぼDBFファイルしかありませんが、普通に運用しているOracleなら下記のように3種類の拡張子のファイルができるでしょう。

ファイル名 説明
データファイル 拡張子「.DBF」
REDOログファイル 拡張子「.LOG」
制御ファイル 拡張子「.CTL」

サービス名

  • データベースは、クライアントからは、一つの「サービス」として見え、クライアントは「サービス名」を指定して、データベースに接続をする。
  • 1つのデータベースには、クライアントからの処理を識別するために、複数のサービス名を対応付けることができる。

サービス名の設定方法

初期化パラメータ「SERVICE_NAMES」や、「tnasname.ora」のSERVICE_NAMEを使う。

グローバルデータベース名

「サービス名」のデフォルトの値(下記の画像のように、データベース作成時に設定しています。)

リスナー(リスナープロセス)

  • データベースサーバー側で動作しているプロセスで、クライアントからの接続要求を待っているプロセス。
  • 接続要求を受けると、その要求を目的のデータベースに転送します。

インスタンスとは?

インスタンスが起動していなければ、Oracleは起動できません。

インスタンスには、下記二つの構成要素があります。

  • SGA
  • バックグラウンドプロセス

SGA

インスタンスの起動時に確保されるプロセス間で共有するデータを保管するためのメモリ領域です。

SGAのデータは、サーバープロセスや、バックグラウンドプロセスで共有されます。

「初期化パラメータ」という設定値によって、そのサイズを確保します。

SGAの構成要素

SGAは、下記の要素で構成されます。

SGAの各構成要素の説明

用語 説明
共有プール 「ライブラリキャッシュ」や「データ・ディクショナリキャッシュ」等から構成されるメモリ領域です。
ラージプール プロセス間の通信に使用するメモリ領域です。
Javaプール JVMの実行に必要な情報を格納するメモリ領域です。
Streamプール Streamの実行に必要なメモリ領域です。
データベースバッファキャッシュ ブロックを保管するメモリ領域です。
REDOログバッファ REDOログファイルに書き込まれていない、REDOデータを保管するメモリ領域です。

共有プール

データブロック以外の共有データ(主にSQL関連の問い合わせ結果データ等)を保管する領域です。

詳しくは下記の記事でも解説しています。

【Oracleアーキテクチャ】「共有プール」の構造や仕組みについて

ラージプール

比較的大きいサイズのデータをプロセス間でやり取りする際に使用されるメモリ領域です。

Javaプール

Java言語で書かれたストアドプロシージャをキャッシュするための領域です。

Streamプール

「Oracle Streams」というメッセージング機能を実現するためにキャッシュする領域です。

データベースバッファキャッシュ

固定サイズのデータブロックをキャッシュするために使用されます。

これのおかげで、一度発行したSQLは非常に高速に動作するようになります。

REDOログバッファ

SQLでのデータを更新する際に、REDOログも更新しますが、後でまとめて書き込むためにそれを一時的にバッファしておく領域です。

詳しくは、下記の記事でも解説しています。

【Oracleアーキテクチャ】「REDOログファイル」、「REDOログバッファ」について

バックグラウンドプロセス

インスタンスの起動にあわせて、起動しています。

ユーザーから直接指令があって動くのではなく、プロセスを監視したり、データの書き出しといった裏方的な仕事をします。

SID

インスタンスを識別するIDです。

SQL Plus等で、Oracleに接続する際はまずはこれを使います。

環境変数「ORACLE_SID」にSIDを設定して、接続するインスタンスを指定したりもします。

インスタンスの起動の仕組み

Oracleが起動するまでは下記のステップを辿ります。

  1. 未起動状態
  2. NOMOUNT状態
  3. MOUNT状態
  4. OPEN状態

未起動状態

単純に、まだインスタンスが起動していない状態です。

SYSDBA権限を持ったSYSユーザーで接続して、「STARTUP」コマンドを実行すると、NOMOUNT状態に移行します。

NOMOUNT状態

インスタンスを起動した際は、まずはこの状態になります。

未起動状態で、STARTUPコマンドを実行すると、Oracleは「初期化パラメータファイル」を読み込み、初期化パラメータによってインスタンスを起動します。

その後、バックグラウンドプロセスが起動し、SGAが確保されます。

この状態(NOMOUNT状態)に遷移するためのコマンド

1
STARTUP NOMOUNT

この状態(NOMOUNT状態)の用途

DBCAを利用せずに、手動でデータベースを作成する場合のみです。

MOUNT状態

「制御ファイル」(.ctlのファイル)をオープンが完了すると、この状態になります。

なお、制御ファイルが複数ある場合に一つでもオープンに失敗すると、この状態に遷移することができません。

この状態(MOUNT状態)に遷移するためのコマンド

1
STARTUP MOUNT

この状態(MOUNT状態)の用途

下記の用途の場合にこの状態に遷移させます。

  • データファイルや、REDOログファイルのパス変更
  • 「アーカイブログモード」と「非アーカイブログモード」の切り替え

OPEN状態

インスタンスは、「データファイル」と「REDOログファイル」をオープンが完了すると、この状態に遷移します。

「データファイル」と「REDOログファイル」のパスは、「制御ファイル」に格納されています。

この状態まで来ると、データベースに格納されたデータにアクセスすることが出来るようになります。

この状態(OPEN状態)に遷移するためのコマンド

1
STARTUP

このコマンドを実行すると、NOMOUNT→MOUNT状態を経て、OPEN状態まで自動で遷移します。

状態遷移の確認方法(アラートログにて)

これらの状態遷移は、「アラートログ」を見れば、確認することができます。

アラートログには、各状態の遷移情報が格納されています。

初期化パラメータファイル

サーバーパラメータファイル(SPFILE):初期化パラメータファイル

「設定値を保持しているOracleの動作特性を決定するパラメータを保持しているバイナリファイル」です。

読み込みタイミング

「インスタンスの起動時」に読み込まれます。

SPFILEが存在しない場合や、読み込めない場合はインスタンスを起動することはできません。

初期化パラメータの設定方法の違い

初期化パラメータを設定する際は、下記の二つのレベルがあります。

  • 「インスタンスレベル」で設定する。
  • 「セッションレベル」で設定する。
インスタンスレベルで設定

1
2
ALTER SYSTEM SET (パラメータ名)=(設定値)
SCOPE = {MEMORY | SPFILE | BOTH};

設定値について

設定値 設定変更の範囲
MEMORY 設定変更は即座、再起動後は、設定変更が無効になってしまいます。
SPFILE 「初期化パラメータ」の設定値のみが変更されて、再起動後に設定変更が有効になります。起動中は設定変更ができないです。
BOTH デフォルトがこれです。設定変更が即座で、「初期化パラメータ」での再起動後の設定変更も可能です。
セッションレベルで設定

設定変更は、実行したセッション内でのみ有効となります。

1
ALTER SESSION SET (パラメータ名) = (設定値);

用途

特定のSQL処理のみ初期化パラメータを一時的に変更したい場合に有効です。

PFILEについて

Oracle8i以前では使われていた「テキスト形式の初期化パラメータ」です。

9以降では、デフォルトでSPFILEが作成されるので、作成されなくなりました。

クライアント側

ネット・サービス名

tnsnames.ora(クライアントPC側のリモート接続設定ファイル)で、「接続記述子(Oracle接続情報をまとめた情報)」を一意にまとめた名前のことです。

接続記述子は、長くなることが多いので、「ネット・サービス名」を付けることで、短縮しています。

スポンサーリンク
  • 2018 05.21
  • miyabisan2
  • コメントを書く
  • Oracle
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 04.27

    【Oracle】接続方法の基礎知識

  2. 2018 05.05

    【SQL】パフォーマンスを考えるに当たり必要な「結合」の知識(Oracle)

  3. 2018 05.20

    【PL/SQL】導入の基本、プログラムの基本構文について

  4. 2018 05.28

    【Oracleアーキテクチャ】「制御ファイル」について

  5. 2018 05.21

    【PL/SQL】繰り返し制御

  6. 2018 04.28

    【Oracle】サーバー側のリモート接続設定(listener.oraの作成)、クライアントPC側のリモート接続設定(tnsnames.oraの作成)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【PL/SQL】繰り返し制御

【Oracleアーキテクチャ】「データファイル」の構造…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー