データベース名のいろいろ

ORACLE_SID、システム識別子、SID、インスタンス名、グローバルデータベース名、ネットサービス名、TNS サービス名、 接続識別子、Oracle のデータベースをあらわす言葉は非常に多い、混乱するほどに多い、それを整理しておく。

DBID、ネットサービス名などのデータベースを特定する名前

インスタンス関連

データベース識別子、DBID(Database IDentifer)

データベースの内部の一意データベース識別子。
通常、複数ホスト間でもデータベースを物理コピーしない限り同じ番号になることはない。(100% ないとはいえないだろうが、無視できるほど限りなく少ないと思われる。)
RMAN でも一意に識別するための ID として使用している。(他のベンダーから販売されているツールも利用しているらしい。) ということは… 物理コピーでインストールしたデータベースには、同じ DBID をもつことから、将来、運用上問題が発生する可能性があることを意味する。
DBID の変更する方法

DBID 取得 SQL

SELECT DBID,NAME,DB_UNIQUE_NAME,CURRENT_SCN,LOG_MODE
  FROM V$DATABASE ;

インスタンス識別子、システム識別子、SID(System IDentifer)

これらは SID ≒*1 環境変数 ORACLE_SID と呼ばれているもの
ホストサーバー内で有効で、ホストの共有メモリにアクセスするための識別子
(ホスト外になると SID ではアクセスできない ⇒ INSTANCE_NAME

インスタンスと SID

ORACLE_SID の 変更は ORACLE_SID を変更する方法 を参照

インスタンス名 (≠ SID )、INSTANCE_NAME

INSTANCE_NAME
ホスト外部から、単一のインスタンスを識別するための名前:これ単独でネットワーク中でユニークとは限らない
クラスタ化された場合など、同じ名前を使用している場合にインスタンスを特定するための名前となる
通常は個別に設定しないため SID と同じ 名前になっているが、 SID と INSTANCE_NAME は役割が全く異なるもの。

INSTANCE_NAME 初期化パラメータ の設定方法

ALTER SYSTEM SET INSTANCE_NAME=HOGE01 SCOPE=SPFILE ; -- 要 再起動

使用できる文字はアルファベット、数字のみ

データベース名、DB_NAME

これらは、DB_NAME 初期化パラメータを表す。

DB_NAME 初期化パラメータの値は、通常 SID と一致する。
(RAC構成の場合、複数のインスタンスに同じ DB_NAME、DB_DOMAIN を設定して共有する)
DB_NAME 初期化パラメータと オラクルデータベース に記録された DB_NAMEが一致しないと起動しない。

使用できる文字はアルファベット、アンダースコア(_)、シャープ(#)、ドルマーク($) のみ

DB_NAME の 変更は データベース名を変更する方法 を参照

グローバル・データベース名 GLOBAL_NAME

DATABASE LINK 作成に関係するパラメータ
GLOBAL_NAMES 初期化パラメータと併用することでデータベースリンク名の補完が行なわれる。
DB_NAME + DB_DOMAIN(database_name.database_domain) がデフォルト値

ALTER DATABASE RENAME GLOBAL_NAME TO name[.domain] ; 
  • GLOBAL_NAMES = {TRUE|FLASE}

(注意) 一度 GLOBAL_NAME に DOMAIN を設定すると DB_DOMAIN 無しに戻せない。
sys.props$ の値を直接変更してしまうことは可能であるもののサポートされているかは不明。 本番機であれば、サポートセンタに問い合わせる。

使用できる文字はアルファベット、数字、アンダースコア(_)、シャープ(#)、ドルマーク($) のみ 
但し、DB_DOMAIN 部にはドルマークは使用できない。

ネットワーク・サービス

LISTENER / TNSNAMES ローカルネーミング

SERVICE_NAME(S)

1つインスタンス、または、同じ機能を提供(=サービス)する複数インスタンスの集合体を特定する名称

ALTER SYSTEM SET SERVICE_NAMES = service_name ;
ALTER SYSTEM SET SERVICE_NAMES = ( service_name1, ... , service_name2 ) ;

データベースの起動時や ALTER SYSTEM REGISTER ; を発行することでデータベースから リスナー へとサービス名が通知される(リスナーの動的構成に使用される)。

ネットサービス名 NET SERVICE NAME、TNS サービス名、接続識別子

tnsnames.ora / listener.ora
SERVICE_NAME に繋ぐための Net Service(旧 Net8、SQL*Net ) 上での名前

tnsnames.ora の例

net_service_name =       ← ここに書かれている名前がネットサービス名
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = {host_name|IP address} )(PORT = 1521))
   (CONNECT_DATA =
     (SERVICE_NAME = service_name)   ← ここがサービス名
   )
 )


関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト

*1 実際の DBIDは数値,ORACE_SIDは名前で管理されているが、SIDとORACLE_SIDは同じ。DBIDとSIDは IP アドレスとホスト名のようなものと考えられる。