【Oracle】基本的なアーキテクチャのまとめ【備忘録】

アーキテクチャとは?

「アーキテクチャとはソフトウェアの内部構造」です。

システムを構築する時は、必ず何かしらの「目的」があります。

例えばカラオケをするシステム、写真を加工するシステムなど。

その目的を実現するための内部構造をアーキテクチャと言います。

 

 

 

 

一般的な企業では業務にデータ処理は欠かせない

一般的な企業はたくさんのデータを持っていて、データを処理することで業務を遂行しています。

逆に言うとデータが全くないと何をしていいのやら分からなくなると思います。

その「データ処理」は RDBMS が中心的な役割を果たしています。

 

 

Oracle のアーキテクチャに関する知識が必要な理由

Oracleは柔軟に「システム設計」や「物理設計」が行えます。

例えば以下の項目についてチューニングできます。

などです。

 

柔軟な設計ができるということは、時にはパフォーマンスを最大化することができる反面、チューニングの結果パフォーマンスが落ちることも考えられます。

そのために各項目をチューニングすることにより、得られる効果を知っておく必要があります。

だからこそ Oracle のアーキテクチャの知識が必要になります。

 

 

データベースとインスタンス

 

通常は「データベース」「インスタンス」は1対1で構成されます。

 

 

データベース

データベースは以下のファイルで構成されています。

 

データファイル

データを格納するファイルが「データファイル」です。

データファイルには以下のデータが格納されます。

データファイルを通常のファイルなので OS のコマンドで実体を確認することができます。

 

 

テーブルスペース(表領域)

Oracle ではテーブルスペースを作成し、その中にテーブルを格納します。

実際は複数のデータファイルで構成されています。

テーブルスペース(表領域)は 1 つ以上の「データファイル」をグルーピングした論理的な記憶領域です。

 

 

■表領域の種類

 

UNDO 表領域

UNDO は「アンドゥ」と読みます。(ウンドゥと言っている人は見たことがありません)

UNDO 表域は「UNDO セグメント」を格納するための専用の領域です。

UNDO 表領域にはデータベースの更新をロールバックするための情報が格納されています。

 

トランザクションが開始されると、そのトランザクションは、自動的に特定の UNDO セグメントに割り当てられます。

そのトランザクションで更新したデータの、更新前のデータは、トランザクションに割り当てられた UNDO セグメントに保管されます。

Oracle 8i では「ロールバックセグメント」と呼ばれていました。

 

 

永続表領域

永続表領域は

の 2 つに分かれます。

 

■Oracle の動作に必要な特殊な表領域

 

「SYSTEM 表領域」「SYSAUX 表領域」にユーザ作成のオブジェクト(テーブル、索引)を格納することもできますが、通常は格納しません。

 

■データ格納用の永続表領域

この表領域にアプリケーションで使用するテーブルや索引(インデックス)を格納します。

 

 

REDOログファイル

REDOログファイルにはデータベースの更新履歴が書き込まれます。

Oracleは複数のREDOログファイルをローテーションして更新履歴を書き込むので、1つのデータベースに対して最低でも2つのREDOログファイルが必要です。

 

制御ファイル

制御ファイルには、データファイルやREDOログファイルの格納場所(パス)や、各ファイルの最終更新時刻などの制御情報が保存されます。

 

 

 

インスタンス

インスタンスは以下の2つで構成されます。

 

SGA(System Global Area)

以下より構成されるプロセス間で共有するメモリ領域です。

 

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

インスタンスの起動に合わせて起動する一組のプロセス群です。

主にプロセスの監視やファイルへのデータ書き出しなど裏方的な処理をしています。

 

バックグラウンドプロセスのプロセス名には「ora_」が付いています。

 

 

DBCA(Database Configuration Assistant)とは

DBCA は「コマンドライン」ツールではなく、「GUI」のツールです。

 

DBCA で出来ること

 

DBCA でデータベースを作成した時の表領域

表領域名種類説明
SYSTEM永続Oracleに必須の表領域。データベースの管理情報が格納される特殊なテーブルであるデータディクショナリが格納されます。ユーザーが作成したテーブルや索引などのオブジェクトを格納しないようにします。
SYSAUX永続SYSTEM表領域の補助表領域であり、Oracle 10g以降の Oracle に必須の表領域です。SYSTEM 表領域と同様に、ユーザーが作成したテーブルや索引などのオブジェクトを格納しないようにします。
UNDOTBS1UNDOデータベースが使用する UNDO 表領域です。
TEMP一時データベースのデフォルト一時表領域です。
USERS永続一般ユーザーのオブジェクト格納用の表領域です。

 

SQL*PlusなどクライアントがOracleを使用する仕組み

SQL*Plus などのクライアントがOracleを使用する場合は、初めにインスタンスに接続します。

 

インスタンスは複数起動していることがありますが、インスタンスにはそれぞれ「SID」という識別子が設定されているので、SIDで接続するインスタンスを指定します。

 

1台のDBサーバーに2つのデータベース「TEST」「PROD」が存在する場合、「TEST」と「PROD」という2つのインスタンスが存在することになります。

 

 

 

インスタンスへのアクセス

SQL*Plusからインスタンスへ接続するコマンド

$ sqlplus /nolog ← SQL*Plusを起動します。

 

SQL> connect / as sysdba ← SYSDBA権限でデータベースに接続します。

 

 

インスタンスの起動

インスタンスが起動していない場合は以下のコマンドでインスタンスを起動します。

SQL> STARTUP

 

 

クライアントアプリケーションとサーバープロセスとリスナー

 

リスナー

リスナーはクライアントアプリケーションがネットワーク経由でインスタンスへの接続要求を受け付けるプロセスです。

そのため、クライアントアプリケーションがネットワーク経由でインスタンスに接続する場合は、インスタンスが起動しているサーバー上に「リスナー」が起動している必要があります。

接続を受け付けたリスナーは、接続後の処理をサーバープロセスに引き継ぎます。

 

クライアントアプリケーションとサーバープロセスは接続することを「セッションが確立する」と言います。

 

ローカル接続しかしない場合はリスナーを起動する必要はありません。

 

 

 

調査方法

 

V$の各種情報は STATSPACK とは異なり、情報を取得したその瞬間の DB の情報を取得します。

 

STATCKPACKについて

デフォルトはレベル 5 です。

STATSPACK はレベル 0 ~ 10 までレベルを調整することができます。

 

 

Oracle の待ち状態が増加したからと言って Oracle が原因とは限らない

CPU リソースが枯渇したり、ディスク I/O が遅延してすると STATSPACK では Oracle の待ち状態(待機状態)が増加します。

そのため、パフォーマンスが低下すると、真っ先に Oracle が疑われることがよくあります。

しかし正確な原因は STATSPACK と OS の各種情報(vmstat,top,psコマンド等)を突き合わせて行なう必要があります。

 

 

V$SESSION の情報

 

 

 

現在勉強している本

インフラという業務の宿命なのか?それとも単純に私がいろんな仕事をしたがる性格なのか分かりませんが、現在は Oracle の勉強をしています。(本音を言えばPythonでプログラムを作っている方が楽しいですが・・・)

職場の DB のスペシャリスト達からも太鼓判を押された Oracle の仕組みが理解できる技術本です。

 

プロとしてのOracleアーキテクチャ入門【第2版】(12c、11g、10g 対応) 図解と実例解説で学ぶ、データベースの仕組み (Oracle現場主義)

 

 

新・門外不出のOracle現場ワザ エキスパートが明かす運用・管理の極意 (DB Selection)

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人