OracleDBで、1つのDBサーバーで、複数のDB環境を作っていたのだが、仕組みがよくわからなかったので調べてみた。
環境は Red Hat。
※1から構築する記事ではないので、その情報が必要な方は別途検索してください
まず知っておくべき用語
スキーマ
ユーザーのこと。スキーマというと分かりづらいが、要はアカウントのようなもの。
複数のDB環境(スキーマ)を作成するというのは、単純にアカウントを複数作り、それぞれのアカウントごとに環境を分けているだけのこと。
リスナー
クライアントからの接続要求を受け付け、データベースインスタンスへの接続を仲介するネットワークプロセス。
特定ポート(1521)で通信する。
サーバーの接続に問題があるときは、まずリスナーの状態を確認する。
CDB(コンテナ・データベース)
親コンテナのような存在で、システム全体の管理情報を持つ。
1つのCDBの中に複数のPDBを格納できる。
アクセスするにはDBA(DB管理者)権限が必要な場合が多い。
PDB(プラガブル・データベース)
アプリケーションが使用するデータベース。データやテーブル、ユーザー情報などを持つ。
PDB単位でバックアップ、リストア、クローンが可能。
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 の場合は、インスタンスとリスナー間の通信に問題がある可能性がある
コメント