はじめに
DBMSごとに概念や用語は微妙に違います。にもかかわらず、自分の知っているDBMSの概念をベースに会話をする人が多く、会話が微妙に噛み合わないことがあります。そこで、この機会に SQL SERVER と Oracle について構成概念をまとめてみました。
SQL Server
構成
サーバ名
├ master
├ tempdb
├ ユーザーデータベース
│ ├ スキーマ.table
│ │ :
│ └ スキーマ.table
└ ユーザーデータベース
├ スキーマ.table
│ :
└ スキーマ.table
- サーバ名:インスタンス(PC名) or 名前付きインスタンス(PC名\インスタンスID)。
SQL Server Management の接続情報との関係
- サーバ名:インスタンス(PC名) or 名前付きインスタンス(PC名\インスタンスID)。
- ログイン:サーバに対するログイン名。
ポイント
- インスタンスごとに独立。(異なる ver も同居可能)
- スキーマ≠ユーザなので、1つのユーザーデータベースに複数のスキーマを作成することが可能。(一般的には、dbo or ユーザー名 で統一する。)
=
テーブルに対するアクセスの完全名:ユーザデータベース.スキーマ.テーブル
補足
- サーバー名(インスタンス)とユーザーデータベースをゴチャゴチャにして会話していることがあります。なので、データベースの作成を依頼された場合は、以下の2パターンが考えられます。
- 既存のインスタンス内に新しいユーザーデータベースを作成する。
- 新しいインスタンス+ユーザーデータベースを作成する。
Oracle
構成
データベース:インスタンス(≒SID, =NET_SERVICE_NAME)
├ SYS
├ スキーマ(≒ユーザ)
│ ├ table
│ │ :
│ └ table
└ スキーマ(≒ユーザ)
├ table
│ :
└ table
- Oracle は、データベースを示すものがいっぱいありまが、単純構成の場合は、以下の全てがデータベース(インスタンス)を示していると思ってほぼ問題ないです。
名前 | 説明 | 補足 |
---|---|---|
DB_NAME | データベース名。 | |
DB_UNIQUE_NAME | プライマリDBとスタンバイDBは、DB_NAMEに対してこれを変更。 | 通常 DB_NAMEと同じ。 |
SID | システム識別子。インスタンスを識別するID. | 通常 DB_NAME と同じ。 |
ORACLE_SID | ローカル接続先 インスタンスを指定する環境変数。 | 通常 SID と同じ。 |
INSTANCE_NAME | インスタンス名。 | 通常 DB_NAMEと同じ。 |
SERVICE_NAME | リモート接続(リスナ経由の接続先)を指定する名前。 | 通常 DB_UNIQUE_NAME と同じ。 |
NET_SERVICE_NAME | SERVICE_NAME+接続先情報。 | 通常 DB_NAME と同じ。 |
SI Object Browser の接続情報との関係
- データベース:NET_SERVICE_NAME(tnsname.ora に定義されているSERVICE_NAME を含む接続情報)。
- ユーザID:スキーマ。
ポイント
- インスタンスごとに独立。(異なる ver も同居可能)
- スキーマ=ユーザとなり、SQL Server のユーザーテーブルという概念がない。
=
テーブルに対するアクセスの完全名:スキーマ.テーブル
補足
- データベース(インスタンス)とスキーマをゴチャゴチャにして会話しているがあります。なので、データベースの作成を依頼された場合は、以下の2パターンが考えられます。
- 既存のインスタンス内に新しいスキーマを作成する。
- 新しいインスタンス+スキーマを作成する。
- ローカルPCの tnsname.ora の内容を他人と異なる設定にすると、同一の接続設定で、自分だけ異なるデータベースへ接続することになるので、会話が噛み合わなくなります。
おわりに
なんとなく理解していて、そのまま会話しても、たいていの場合は問題ないのですが、極力、正確に理解したうえで、相手が何のことを言っているかを理解できるようになりたいですね。