Oracleデータベースの構築や運用において、Oracleデータベースがどのような構成になっているのか理解していないとつまづいてしまう可能性が出てきます。
最初にOraledデータベースの中核であるインスタンスや、識別をするためのSIDなどについて詳しく解説します。
インスタンス
インスタンスの役目
Oracleデータベースは、インスタンスというのが処理をしているのです。
インスタンスは、Oracleデータベースを稼働させるためのメモリ構造とプロセスの集合体であると言われています。
先ずは、Oracleデータベースにはインスタンスという処理の実態が存在しているということを理解しておいてください。

インスタンスとデータベースの関係
Oracleデータベースをインストールすると自動的に1つのインスタンスが作成されます。
Oracleは、基本的に1つのインスタンスには1つだけのデータベースを構築できます。
データベースとは実際にデータが保存される場所のことで実態はファイルです。
インスタンスがメモリ上でデータを読み書きするための処理を行い、データベースから読み込みまたはデータベースに保存されるという流れです。
なお、SQLServerは1つのインスタンスに複数のデータベースを構築できますが、Oracleは1つだけです。

しかし、Oracle12cR2からはマルチテナントという機能(概念)が導入されて、1つのインスタンスにPDBという形式のデータベースを3つまで作成可能になっています。(4つ以上PDBを作成したい場合はオプションの購入が必要です。)
マルチテナントについて、ここでは詳しく説明しませんが、下の図のようにコンテナデータベース(CDB)という器のデータベースの下に、プラガブルデータベース(PDB)という構成でデータベースを作成できます。現在のOracleデータベースはこの構成が推奨となっています。
これにより、複数システムでOracleデータベースを利用したり、本番環境用、検証環境用、開発環境用といった形で複数の環境を構築可能になっています。

Oracleデータベースの負荷分散させたり、故障に備えて冗長化構成したりする場合、Oracleのサーバを複数の台数で構築しますが、この場合はインスタンスが複数稼働します。

識別名:SID,グローバルデータベース名,サービス名
インスタンスの識別子:SID
Oracleデータベースはインスタンスが処理を行っていると説明しましたが、インスタンスはSIDという名前が割り振られています。
このSIDは主にクライアントがインスタンスに接続するときや、インスタンスの設定変更をする際に使用します。
前述したとおり、インスタンスは主にメモリで処理をするためのもので、普段は常時起動している状態ですが、設定変更等により停止や起動(再起動)が必要になる場面がしばしばあり、その場合もこのSIDを指定して操作を行います。

SIDはインスタンスが複数存在する場合、SIDもその数分存在することになります。
下の例のように、Oracleデータベースのサーバを2台構成で構築している場合は、インスタンスが各サーバで稼働しており、SIDも各インスタンスごとに存在します。

SIDは個々のインスタンスに付与されている名前だということを頭に入れておいてください。
グローバルデータベース名(DB_NAME)
これまで、Oracleデータベースはインスタンス部分とデータベース部分があることを説明しましたが、保存されたデータそのものはデータベース部分に保存されています。
このデータベースを識別するのがグローバルデータベース名(DB_NAME)です。

グローバルデータベース名(DB_NAME)は、データベースを識別するための名前なので、ネットワーク内で一意となるように命名します。
通常、グローバルデータベース名(DB_NAME)は「SID.ドメイン名」で命名します。
サービス名
クライアントからOracleデータベースへ接続する場合は、SIDを指定して接続すると説明しましたが、SIDに別名を付けることができ、これをサービス名と言います。
冗長構成にしてインスタンスが複数存在する場合、各インスタンス同じサービス名にすることで、クライアントからは2つのインスタンスへ接続することが可能になります。

それと、マルチテナント構成で構築したOracleデータベースは、PDBというデータベースにデータが保存されていきます。
データの読み書きをするためにデータベースへ接続する場合にはこのPDBへ接続することになりますが、このときにPDBへの接続を指定する場合もこのサービス名を使って接続することになります。

CDB(コンテナデータベース)内の各PDBにはそれぞれ独自のサービス名が設定されており、接続時にそのサービス名を使用することで、特定のPDBに接続することができます。
マルチテナントが主流になってからは、SID指定での接続はあまり一般的ではなくなっており、サービス名指定での接続がよく使われます。
ただし、CDB内の根のコンテナデータベース(CDB$ROOT)や、非マルチテナントの古いバージョンのOracleデータベースに対してはSID指定での接続が依然として使われることがあります。
コメント