第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 ]