第1章 Oracleの実行環境と基本概念(補足)

1. Oracleのディレクトリ構造

■Oracleをインストールすると、ディレクトリ構造が作成される。

他のアプリケーション(Microsoft Officeなど)と同様に、パソコンにインストールして初めて利用できる。
例えばインストール先にCドライブ(c:\)を選んだ場合、WindowsNTではC:\にORANTというフォルダができ、その中にbin,databaseなどのフォルダが作成される。
このC:\ORANTをOracleホームディレクトリと呼ぶ。

■Oracleホームディレクトリの下には、主に下記のようなディレクトリが作成される。

1.実行モジュール用ディレクトリ
全ての実行モジュール(OracleDBに必要なexeファイルなど)が格納される。
2.初期データベース用ディレクトリ
初期データベースを構成するファイル(データファイル、制御ファイルなど)が格納される。
データベース作成時、格納場所を別の場所へ設定できる。
3.管理用ディレクトリ
データベース管理用の様々なファイルが格納される。
4.管理用ディレクトリの下のadmin
データベース管理に使用されるSQLスクリプトが格納される。
5.その他の製品
それぞれの製品ごとの管理ディレクトリ。

2. 環境変数の設定

Oracleに接続して作業を行う場合、クライアントパソコンに環境変数の設定が必要である。(通常はクライアントソフトインストール時に設定される)

  1. ORACLE_HOME ・・・ Oracleホームディレクトリ
  2. ORACLE_SID ・・・ OracleシステムID
  3. PATH
  4. NLS_LANG

この中で特に重要なのが2と4である。

ORACLE_SID
Oracleデータベースの識別名。1つのサーバマシンで複数のOracleデータベースを運用している場合、各Oracleを判別するために使用する。
NLS_LANG
メッセージ、数値・日付書式、通貨書式などを設定する場合に使用する。
例)、NLS_LANG=Japanese_Japan.JA16JIS

3. Oracleの起動と停止

■Oraleデータベースを使用するには、その前にOracleが起動されている必要がある。

WindowsNTやWindows2000にインストールした場合、Oracleはサーバ起動時にサービスとして自動起動される。

■データベースの起動と停止は、3段階の手順で行う

【サーバマネージャの場合】

〜


サーバマネージャやINTERNALユーザは廃止される予定であり、 SQL*Plusを使用するのが望ましい。

【SQL*Plusの場合】

  1. SQL*Plusを起動する
    DOSプロンプト> sqlplus /nolog
    SQL>
  2. セキュリティ・チェックを行う
    SQL> connect / as sysdba
  3. 起動・停止のコマンドを発効する
    SQL> startup ・・・ 起動
    SQL> shutdown ・・・停止

4. オブジェクト

■表や索引など、データベースの中で扱われるものを「オブジェクト」 と呼ぶ。
例えば、1つの表が、1つのオブジェクトである。

■オブジェクトの種類

  1. 表(テーブル)
  2. 索引(インデックス)
  3. ビュー(Accessで言うクエリーのようなもの)
  4. シノニム(オブジェクトの別名、Windowsで言うショートカットのようなもの)
  5. 順序(連番を発生させるもの)
  6. ストアドプログラム(プログラム)

5. スキーマ

■オブジェクトは、全てデータベース内に格納されている。

■データベースシステムは、複数の人が同時にデータベースに アクセスすることを前提に作られている。
〜
そこで、データベースを使用するには、まず データベースに登録されている「ユーザ」でデータベースに接続し、 それぞれのオブジェクトにアクセスする。
(Oracleがインストールされているサーバのユーザではない!!)

■表などのオブジェクトは、すべていずれかのユーザの持ち物に なっている。〜

どのオブジェクトが誰の持ち物なのかという情報を表す概念を 「スキーマ」と呼ぶ。〜

■オブジェクトは、すべて「スキーマ名.オブジェクト名」という形で 管理されている。オブジェクト名が同じでも、持ち主(スキーマ)が違えば別の物である。 逆に同じユーザ(スキーマ)が同じ名前のオブジェクトを作成することはできない。

例)

ユーザsakuraが、自分のEMP表を見る場合
SELECT * FROM emp;
ユーザsakuraが、ユーザizumiが持つEMP表を見る場合
SELECT * FROM izumi.emp;
(izumiが持つEMP表のSELECT権限が必要)

6. 表領域

■Oracleでは、オブジェクト単位に物理ファイルを対応させる のではなく、まず、オブジェクトを格納する「領域」を考え、 これにファイルを対応させている。この領域のことを「表領域」と呼ぶ。

■1つの表領域には複数のオブジェクトを格納することができる。 表領域や対応するファイルの管理はデータベース管理者が行うため、 一般のユーザは物理ファイルを意識する必要がない。

ユーザsakuraが、自分のEMP表を見る場合
SELECT * FROM emp;
ユーザsakuraが、ユーザizumiが持つEMP表を見る場合
SELECT * FROM izumi.emp;
ユーザsakuraが、自分のITEM表を見る場合
SELECT * FROM item;
ユーザは、表がどの表領域にあるのかを意識することなく データを利用できる!!

7. 表領域の使用方法

■初期データベース(データベース作成直後の状態)には、以下のような表領域が存在する。

  1. SYSTEM表領域 ・・・ データベース全体の情報が格納される
  2. RBS表領域 ・・・ ロールバック・セグメント用
  3. USERS表領域 ・・・ ユーザのデフォルト表領域用
  4. TOOLS表領域 ・・・ Oracleの各種アプリケーション用
  5. TEMP表領域 ・・・ ユーザのテンポラリ表領域用

■表領域の名前には、「SYSTEM」表領域以外、特に意味はない。
〜

上記表領域のうち、SYSTEM表領域以外は無くてもデータベースは動く。SYSTEM表領域以外の各表領域は、Oracle社が推奨する領域分割の見本である。

■SYSTEM表領域には、Oracleデータベース全体の情報、データディクショナリが置かれている。これらの情報は、Oracleデータベースが起動している間、自動的に更新されている。
したがって、データベースの安全のため、SYSTEM表領域にはユーザのデータを格納するべきではない!!
表領域は、データベース管理者が必要なだけ任意の名前で作成できる。

■通常、データベースを使用する場合には、表領域をいくつか用意し、それぞれの使用目的別に使い分ける。
表領域を分けることは、以下のような利点がある。

  1. Oracleでは、各ユーザへの領域の使用制限(クォータ)が表単位で行える。したがって、表領域を分けておけば、各表領域ごとに各ユーザの領域制限を設定できる。
  2. Oracleでは、データのバックアップ・リカバリ(回復)が表単位で行える。したがって、表領域を分けておけば、ある表領域が壊れても、他に影響を与えないですむ。
  3. 異なるデバイス(ハードディスク)に表領域を配置することにより、I/O衝突を減少させ、パフォーマンスを向上することができる。

8. データ・ディクショナリ

■データベースの中にどのようなオブジェクトがあるのか?など、データベース内の様々な情報は、すべて「データ・ディクショナリ」に格納されている。
データ・ディクショナリはSYSTEM表領域に格納されている。

■データ・ディクショナリは、Oracleによって管理され、各ユーザも検索できる。
ただし、ユーザに与えられた権限によって、見れるものと見れないものがある。

■ユーザが検索できるデータ・ディクショナリは、以下の4種類に分類される。

1. USER_XXX
そのユーザ(現在接続しているユーザ自身)に関する情報
2. ALL_XXX
そのユーザ(現在接続しているユーザ自身)が アクセス可能なすべての情報
3. DBA_XXX
データベース全体に関する情報
データベース管理用ユーザ(DBA権限を持つユーザ)のみアクセス可能
4. その他

■代表的なデータ・ディクショナリ

データ・ディクショナリ名説明
USER_USERS自分自身(ユーザ)の設定を確認
USER_TS_QUOTAS各表領域ごとに設定されているクォータを確認
SESSION_PRIVS現在のセッションで有効なシステム権限を確認
USER_TAB_PRIVS_MADE自分が所有するオブジェクトに対して誰(他のユーザ)がアクセスできるかを確認
USER_TAB_PRIVS_RECD自分は他のユーザが所有するどのオブジェクトにアクセスできるかを確認
USER_COL_PRIVS_MADE列単位で指定されたオブジェクト権限を確認
USER_COL_PRIVS_RECD列単位で指定されたオブジェクト権限を確認
SESSION_ROLES現在のセッションで有効なロールを確認
USER_CONSTRAINTS制約の名前と種類を確認
USER_CONS_COLUMNSどの制約がどの表のどの列に付加されているかを確認
USER_VIEWS自分が持つオブジェクトを確認
USER_TABLES自分が持つテーブルを確認
USER_VIEWS自分が持つビューを確認
USER_PROCEDURE自分が持つプロシージャを確認
USER_INDEXESどの索引がどの表に付加されたものかを確認
USER_IND_COLUMNSどの索引がどの表のどの列に付加されてたものかを確認
USER_SYNONYMSプライベート・シノニムを確認
ALL_SYNONYMSパブリック・シノニムを確認
USER_SEQUENCES自分が持つ順序を確認

確認問題

  1. 次の文章から正しいものをすべて選べ。
    1. ユーザAとユーザBが、それぞれEMP表を作成する。
    2. ユーザAがEMP表を作成し、さらに別なEMP表を作成する。
    3. ユーザAのEMP表に、ユーザBが常にアクセス可能である。
    4. オブジェクトはすべて、いずれかのユーザに所有されている。
    5. オブジェクトの所有者が異なれば、同じ名前のオブジェクトも別物と扱われる。

[ TOP ]