🗂

ORACLE MASTER Silver DBA 取得に必要な知識のまとめ~Oracle Net Services編~

2024/05/24に公開

はじめに

本記事はORACLE MASTER Silver DBA取得に必要な知識の個人的まとめになります。

ORACLE MASTERとは

Oracle Databaseの管理スキルを証明するOracle社の資格です。

Bronze, Silver, Gold, Platinumの4ランクあります。

Oracle Net Services

Oracle Net Servicesはネットワークを介してOracle Databaseにリモート接続するために必要な機能です。

リモート接続の処理順は以下の通りです。

  1. 接続先Oracle Databaseに対応する接続識別子を指定してSQL *Plusを起動
  2. tnsnames.ora から接続識別子に対応する接続先Oracle Databaseの情報(接続記述子)を得る(名前解決)
  3. 接続記述子のホスト名およびポート番号で接続を待ち受けるリスナーに対して接続要求を送信
  4. 接続要求を受信したリスナーは接続要求に含まれるデータベースサービス名に対応するOracle Databaseに接続を中継
  5. SQL *PlusとOracle Databaseでリモート接続が確立される

Oracle Net Servicesの設定

リモート接続接続にはクライアントコンピューターとデータベースサーバーのそれぞれに以下の作業が必要です。

  • クライアントコンピューター
    • Oracle Clientのインストール
    • 設定ファイル tnsnames.ora への接続先データベース情報の登録
  • データベースサーバー
    • リスナーの構成及び起動
    • サービス登録の構成(Oracle Databaseデータベース情報をリスナーへ登録)

Oracle Net Services設定に使用するツール

Oracle Net Servicesの設定はツールを用いて実行できます。

使用するツールは設定可能範囲の順に以下の通りです。

ツール 説明
Oracle Enterprise Mnager Cloud Control Oracle DatabaseなどのOracle製品を含め、非常に多くの製品をWebブラウザベースのGUI管理画面から一元的に管理できる統合管理ツール
Oracle Net Manager(NETMGR) Oracleをネットワーク環境で使用するための設定を行う
Oracle Net Configuration Assistant(NetCA) Oracleをネットワーク環境で使用するための主要な設定(リスナーやネットサービス名の設定など)を行う

リスナーの設定とサービス登録

リスナーはネットワークを介してOracle Databaseに接続するために必要なプロセスです。

リスナーはインスタンスとは別の独立したプロセスです。

インスタンスを起動してもリスナーは起動せず、リスナーが起動していない場合、ネットワークを介してOracle Databaseに接続できません。

リスナーは同じデータベースサーバーで動作する複数のOracle Databaseへの接続を中継できます。

listener.oraによるリスナーの設定

リスナーの設定はデータベースサーバーの listener.ora ファイルに記載します。

listener.ora ファイルにはリスナーの名前、データベースサーバーのホスト名、リスナーの接続待ち受けポート番号などを記載します。

listener.ora ファイルはテキストエディタや前述のツール群で編集できます。

リスナーには以下のデフォルト値があります。デフォルト値を利用する場合は listener.ora ファイル自体が必要ありません。
デフォルト値を使用した起動したリスナーをデフォルトリスナーと呼びます。

  • リスナー名: LISTENER
  • ホスト名:データベースサーバーのホスト名
  • ポート番号:1521
  • プロトコル:TCP/IP

1つのデータベースサーバーに名前が異なる複数のリスナーを起動できます。

ただし、それぞれのリスナーで異なる接続待ち受けポート番号を使用する必要があります。

リスナー制御ユーティリティ(Insctl)

**リスナー制御ユーティリティ(Insctl)**はリスナーの起動・停止などのリスナーの管理作業を実行できるコマンドラインベースのツールです。

Insctlのコマンド指定と処理内容は以下の通りです。

コマンド指定 処理内容
lsnrctl start [リスナー名] リスナーを起動する
lsnrctl stop [リスナー名] リスナーを停止する
lsnrctl status [リスナー名] リスナーの稼働状態とリスナーが認識しているデータベースサービスを確認する
lsnrctl services [リスナー名] リスナーの稼働状態とリスナーが認識しているデータベースサービスの詳細情報を確認する

リスナーへのサービス登録

リスナーはOracle Databaseへの接続要求を中継するため、Oracle Databaseの構成情報及び起動状態をリスナーに登録しておく必要があります。

これをサービス登録と呼びます。

サービス登録には以下の2つの方法があります。

サービス登録の方法 説明
動的サービス登録 インスタンスのLREGプロセスが自Oracle Databaseの情報を登録する。インスタンスが起動するとリスナーにサービスが登録され、インスタンスが停止するとサービス登録が解除される。特に理由がない限り、動的サービス登録のみを利用する
静的サービス登録 リスナーの設定ファイル listener.ora にOracle Databaseの情報を記載する。インスタンスの起動状態によらず、サービス登録された状態になる。インスタンスを起動する作業をリモートから実行する場合など、インスタンスの停止中にOracle Databaseにリモート接続したい場合などに使用する

サービス登録ではOracle Databaseに関する以下の情報をリスナー登録します。

登録する情報 説明
データベースサービス名 データベースサービス名はデータベース作成時のグローバルデータベース名に対応する。グローバルデータベース名はデータベースの識別子
インスタンスSID 接続要求の中継先となるインスタンスのSID。SIDはインスタンスの識別子

動的サービス登録を行うにはOracle DatabaseのLOCAL_LISTENER初期化パラメータにリスナーのアドレス情報を登録します。

静的サービス登録はリスナーが接続を中継するOracle Databaseの情報をあらかじめ listener.oraSID_LIST_リスナー名 というパラメータに記述しておくサービス登録方法です。

動的サービス登録と異なり、静的サービス登録ではインスタンスの起動状態によらずサービスが常にリスナーに登録されます。すなわち、インスタンスを停止してもサービスが登録されたままになります。

クライアントの設定とリモート接続の実行

リモート接続に必要な情報は以下の通りです。

項目 説明
データベースサーバーのホスト名またはIPアドレス Oracle Database及びリスナーが動作しているマシンのホスト名またはIPアドレス
リスナーのTCPポート番号 リスナーが接続を待ち受けているTCPポート番号
データベースサービス名 接続先Oracle Databaseに対応するデータベースサービス名

クライアントは接続先のOracle Databaseに対応する情報として接続識別子を指定します。

例えば、クライアントにSQL *Plusを使用してリモート接続する場合は以下のようにします。

sqlplus ユーザー名/パスワード@接続識別子

また、接続識別子から上記の3つの情報を含む接続記述子を得る方法をネーミングメソッドといいます。

ローカルネーミング

ローカルネーミングはクライアントコンピューター上の設定ファイル tnsnames.ora に接続先情報を記載しておき、ここから接続先情報を得るネーミングメソッドです。

簡易接続ネーミング

簡易接続ネーミングは接続識別子に接続先情報を直接指定するネーミングメソッドです。

簡易接続ネーミングを使うときの接続識別子の書式は以下の通りです。

データベースサーバーのホスト名:ポート番号/データベースサービス名

ディレクトリネーミング

LDAP準拠のディレクトリサーバーに接続識別子と接続先情報の対応関係を記載しておき、ここから接続先情報を得る。

外部ネーミング

外部のネーミングサービスに接続識別子と接続先情報の対応関係を記載しておき、ここから接続先情報を得る。

接続失敗時のトラブルシューティング

発生しやすい典型的なエラーと原因を以下に挙げます。

  • サービス名を解決できませんでした
    • tnsnames.ora に指定した接続識別子を定義していない
    • 正しい場所(デフォルトでは <ORACLE_HOME/network/admin/tnsnames.ora> )に tnsnames.ora を配置していない
  • リスナーがありません
    • tnsnames.ora で指定したデータベースサーバー名にデータベースサーバーの正しいホスト名またはIPアドレスを指定していない
    • tnsnames.ora で指定したポート番号にデータベースサーバー上で動作するリスナーが接続を待ち受けるポート番号を指定していない
    • データベースサーバーでリスナーを起動していない
    • 想定したポート番号でリスナーを起動していない
    • ファイアウォールソフトで通信がブロックされている
  • リスナーは現在、接続識別子でリクエストされているサービスを認識していません
    • tnsnames.ora に指定した、データベースサーバー名に接続先データベースのグローバルデータベース名を指定していない
    • 接続先データベースがリスナーにサービス登録できていない

共有サーバー接続

共有サーバー接続はあるセッションにおける処理を複数のプロセスで実行する接続モードです。

共有サーバー接続ではユーザープロセスはディスパッチャと呼ばれる接続を確立します。

あるユーザープロセスが送信したSQL文はディスパッチャを経由していずれかの共有サーバープロセスにより実行されます。

専用サーバー接続と共有サーバー接続の違いは以下の通りです。

比較対象 専用サーバー接続 共有サーバー接続
ある特定の接続における処理の実行を担当するOracleプロセス その接続専用のサーバープロセス1つ その接続専用ではない複数の共有サーバー
使用可能な接続方式 ローカル接続とリモート接続 リモート接続のみ
新規接続確立時に実行される処理 その接続専用のサーバープロセスが新規に起動され、その接続に割り当てられる リスナー経由でディスパッチャとの接続が確立される

ローカル接続では接続モードは常に専用サーバー接続になります。

共有サーバー接続時の動作は以下の通りです。

  • 接続確立時
    1. リスナーがユーザープロセスから接続要求を受け付けます
    2. 接続要求が共有サーバー接続である場合、最も負荷の低いディスパッチャに接続を中継します
    3. ユーザープロセスとディスパッチャで接続が確立されます
  • SQL実行時
    1. ユーザープロセスがディスパッチャにSQLを送信します
    2. ディスパッチャはSGA内の要求キューにSQLを格納します
    3. 共有サーバープロセスがSGA内の要求キューからSQLを取り出します
    4. 共有サーバープロセスがSQLを実行します
    5. 共有サーバープロセスがSQLの実行結果をSGA内の応答キューに格納します
    6. ディスパッチャがSGA内の応答キューから実行結果を取り出します
    7. ディスパッチャがユーザープロセスに実行結果を返送します

データベースリンク

データベースリンクはあるOracle Databaseから別のOracle Databaseにある表にアクセスする仕組みです。

データベースリンクの構成手順は以下の通りです。

  1. データベースリンクの接続元となるOracle Databaseがあるデータベースサーバーから、データベースリンクの接続先となるOracle Databaseにリモート接続できるようにOracle Net Servicesを構成します
  2. データベースリンクの接続元となるOracle Databaseで CREATE DATABASE LINK を実行し、データベースリンクを作成します

デフォルトでは作成したデータベースリンクは CREATE DATABASE LINK を実行したユーザーが所有し、そのユーザーだけが使用可能です。これをプライベートデータベースリンクと呼びます。

CREATE PUBLIC DATABASE LINK でデータベースリンクを作成するとすべてのユーザーが使用可能になります。これをパブリックデータベースリンクと呼びます。

おわり

Oracle Net Services編はここまで。

次はユーザーと権限について説明していきます。

Discussion