構成
接続ホスト
単純にサーバーのIPアドレスまたはホスト名です。
例:192.168.1.100 / db-server.example.com
DBインスタンス
サーバー上でOracleが起動している「プロセスの塊」です。
メモリ(SGA)とバックグラウンドプロセスで構成されています。
1台のサーバーに複数のインスタンスを起動することも可能です。
SID(System Identifier)という名前で識別されます。
サービス名の裏側でどのインスタンスに接続するかは、Oracle側が自動的に解決してくれるため、クライアント(開発者)はインスタンスを意識する必要がありません。
サービス
クライアントがDBに接続する際の「論理的な窓口」です。
1つのインスタンスに複数のサービスを定義できます。
逆に、負荷分散の観点等から、1つのサービスから複数のインスタンスにアクセスする構成も可能です。
DBの種別(アプリ用、バッチ用、レポート用、etc.)、環境(開発、ステージング、本番)の観点で、接続を制御する(権限、接続数、タイムアウト値)。
現在の主流な接続方法です。
サービス名で接続する現在の書き方
jdbc:oracle:thin:@//接続ホスト:ポート/サービス名
jdbc:oracle:thin:@//192.168.1.100:1521/ORCL.example.com
構成図
┌------------------------------------------------┐
| サーバーマシン
|┌-------------------------------------┐
|| DBインスタンス
|┌-----------------------------┐
|| データベース
||┌---------┐┌----------┐
||| スキーマA スキーマB
||└---------┘└----------┘
||└-----------------------------┘
||└-------------------------------------┘
└------------------------------------------------┘
用語
スキーマ
ユーザーのこと。スキーマというと分かりづらいが、要はアカウントのようなもの。
複数のDB環境(スキーマ)を作成するというのは、単純にアカウントを複数作り、それぞれのアカウントごとに環境を分けているだけのこと。
リスナー
クライアントからの接続要求を受け付け、データベースインスタンスへの接続を仲介するネットワークプロセス。
特定ポート(1521)で通信する。
サーバーの接続に問題があるときは、まずリスナーの状態を確認する。
CDB(コンテナ・データベース)
親コンテナのような存在で、システム全体の管理情報を持つ。
1つのCDBの中に複数のPDBを格納できる。
アクセスするにはDBA(DB管理者)権限が必要な場合が多い。
PDB(プラガブル・データベース)
アプリケーションが使用するデータベース。データやテーブル、ユーザー情報などを持つ。
PDB単位でバックアップ、リストア、クローンが可能。
Appendix
複数環境構成
OracleDBで、1つのDBサーバーで、複数のDB環境を作っていたのだが、仕組みがよくわからなかったので調べてみた。
環境は Red Hat。
※1から構築する記事ではないので、その情報が必要な方は別途検索してください
DBサーバーの構造を確認する
現状のサーバー状況を確認する。
まずはOS上で oracleユーザー でログインする。
OracleDBのコマンドラインは root では使用できないため、oracleユーザーでログインする必要があるという罠に注意する。
su - oracle
まず、Oracleがインストールされているかを確認。
echo $ORACLE_HOME
出力例:
/opt/oracle/product/18c/dbhomeXE/
Oracle がインストールされていることを確認できた。
次に、サーバー内に存在するDBインスタンスの確認。
ps -ef | grep pmon
- ps -ef:Linuxの全プロセスを一覧表示。
- pmon:Oracleのインスタンスは ora_pmon_<SID> というプロセスを持つ。pmon は Process Monitor の略で、インスタンスを監視しているプロセスを意味する。
上記コマンドで『ora_pmon_XE』が表示された → インスタンス名(SID)=”XE” のインスタンスのみが存在していた。
つまり、インスタンスは1つだけで、スキーマ(ユーザー)がたくさん存在するだけのシンプルな構造であることが分かった。
スキーマ情報の確認
ここからは、スキーマ(ユーザー)の情報収集。
スキーマへのログイン方法は以下の通り。
sqlplus schema_user/schema_password@servicename
sqlplus を使用して、以下の形式でスキーマにログインできる。
SQL*Plus(エスキューエルプラス)は、Oracle Database に付属するコマンドラインインターフェース。
これを使用してサーバー内で OracleDB に対し SQL を実行することができる。
どんなユーザー(スキーマ)が存在するか確認してみる。
包括的な情報を見るには、DBA(DB管理者)権限でログインする。※DBAのログイン情報は、管理者に要確認。
以下のSQLで、スキーマ、すなわちユーザーの一覧を確認できる。(ここではusersと名の付くテーブルとして存在している。ややこしいからスキーマなんて言葉使わなければよいのに)
SELECT *
FROM dba_users
WHERE account_status = 'OPEN';
ここで表示されたスキーマの分だけ、スキーマ名(ユーザー名)/パスワードが設定できて、その数だけ環境を分けてデータベースを構築できる。
インシデント
DBA(DB管理者)として以下のコマンドでログイン。
sqlplus / as sysdba
DBA管理者としてログインしたのに、SQLを実行しようとすると以下のエラー。
ORA-01034: ORACLE not available
これはスキーマにログインしていない。
先ほどのログインは、OS認証による接続であり、スキーマに接続するものではない点に注意する。
以下みたいなコマンドで、DBAとしてスキーマにログインする。
salplus system/oraSys21@servicename
解消しない場合は、そもそもインスタンスが起動していないなど、もっと大きな問題を疑う。
リスナーの状態を確認
lsnrctl status
- 開始日:最近再起動されていないか確認
- リスニング・エンドポイントのサマリー:必要なポート(通常は1521)が開いているか確認。1521ポートが動作していれば、リスナーは正常に稼働しており、外部からアクセスできる状態
- サービスのサマリー:インスタンスの状態を確認
- インスタンス “XE” の状態が READY となっていれば正常。UNKNOWN や ERROR の場合は、インスタンスとリスナー間の通信に問題がある可能性がある

コメント