スキーマとは

スキーマとは、データの論理構造の集合であるとマニュアルには記載されている。 ( 1 ユーザーは 1 スキーマを所有し、自動的にユーザー名と同じスキーマ名が割り当てられる。)
スキーマを文章で言い換えるなら、Oracle が提供する部品集から ユーザーが組み立てた構造物(オブジェクト)の集合体 ということになるだろうか。

ユーザー=スキーマと覚えてもあまり支障はなさそうであるが(オラクルマスターの資格などを目指すなら別)、 セッションにおいて、以下の SQL でカレントスキーマ(スキーマ名を省略したときのデフォルトのスキーマ)を変更することができたりもするので安心はできない。

ALTER SESSION SET CURRENT_SCHEMA=schema_name ;

またエンジニア同士の会話のなかで「スキーマ」というときは 「スキーマ・オブジェクト」を略して話をしていることが多いと思う。

Oracle におけるスキーマの位置づけ

ユーザーを人間と表現すると、スキーマとは人間がオラクルデータベースというオーナーから賃貸したオフィスの一室のようなものである。
ただ、スキーマはユーザーに属するものなのでテナント募集中の空き室のようなものは存在せず満室になることもない。

賃貸した一室にオブジェを置こうが改装しようが他の住人には影響はない。
権限を与えた同じビルの入居者や信頼できる遠隔地の人を自分の部屋に招待することもでき、部屋のオブジェやデスク(スキーマ・オブジェクト)を使う制限もオブジェクト単位で設定が可能。(見ることすらも許さないという設定も可)
賃貸した人がいなくなるとレンタルしたスペースからすべてのものが無くなるが居住した人が作ったパブリックなもの(非スキーマ)は残される。

エレベータや掲示板などの住人の共有物が非スキーマのみたいなものである。(ロール、パブリックシノニムなど)

スキーマ・オブジェクト一覧

以下のものがスキーマとして分類されている。

名称該当する DDL
表 および 索引構成表CREATE TABLE
インデックス、インデックスタイプCREATE INDEX
ビューCREATE VIEW
トリガーCREATE TRIGGER
ストアドプロシージャ関連CREATE PROCEDURE,FUNCTION,PACKAGE など
マテリアライズド・ビュー関連CREATE METERIALIZED VIEW ,〜 LOG
オブジェクト型、表、ビューCREATE OBJECT など
演算子CREATE OPERATOR
順序・シーケンスCREATE SEQUENCE
シノニムCREATE SYNONYM
ディメンションCREATE DIMENSION
外部プロシージャCREATE LIBRARY
Java クラス関連CREATE JAVA
クラスタCREATE CLUSTER
プライベート・データベースリンクCREATE DATABASE LINK

ユーザーの所有するスキーマオブジェクトの一覧

SELECT OBJECT_TYPE, OBJECT_NAME
  FROM USER_OBJECTS
 WHERE OBJECT_TYPE = type_name
 ORDER BY OBJECT_TYPE, OBJECT_NAME ;

非スキーマ・オブジェクト一覧

ユーザーが作成できるが、スキーマに分類されていないもの
(論理構造でない、または、共有物?ということだろうか)

名称該当する DDL
ユーザーCREATE USER
プロファイルCREATE PROFILE
ロールCREATE ROLE
表領域CREATE TABLESPACE
コンテキストCREATE CONTEXT
ディレクトリCREATE DIRECTORY
パブリック・シノニムCREATE PUBLIC SYNONYM
パブリック・データベースリンクCREATE PUBLIC DATABASE LINK
 


スキーマ 関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)