OracleDBの複数環境構成

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 の場合は、インスタンスとリスナー間の通信に問題がある可能性がある

 

コメント

タイトルとURLをコピーしました