Oracleデータベースを使い始めると、「データベースにどうやって接続するか」という課題に直面します。その中で「OracleNet」という仕組みは、データベースと外部から通信するために重要な役割を果たします。この記事では、初心者向けにOracleNetとは何か、ローカル接続とリモート接続の違い、リモート接続が必要な理由、さらにリモート接続に必要なクライアントソフトウェアのインストール方法について解説します。
OracleNetとは?
OracleNet(SQLNetとも呼ばれることがあります)は、Oracleデータベースとクライアント(たとえばSQLPlusなど)をネットワークを介して接続するためのプロトコルです。簡単に言えば、「Oracleデータベースとクライアントが会話するための道具」 です。
OracleNetは、クライアントがサーバー上のデータベースとやりとりできるようにします。たとえば、リモートのサーバーにあるOracleデータベースにSQLクエリを投げて結果を取得する際に、これを実現するのがOracleNetです。
ローカル接続とリモート接続の違い
Oracleデータベースにはローカル接続とリモート接続の2つの接続方法があります。それぞれの違いについて詳しく説明します。
1. ローカル接続
ローカル接続は、データベースとクライアントが同じサーバー上にある場合の接続方法です。この場合、ネットワーク通信を介さずに直接Oracleのプロセスに接続するため、OracleNetやリスナーを使用せずに接続が可能です。接続は、データベースがインストールされているマシン上でのみ行われます。
ローカル接続の特徴:
- ネットワークプロトコルは不要。
tnsnames.ora
ファイルの設定は不要。- 同じマシン上で完結するため、ネットワークの設定やセキュリティの問題が少ない。
たとえば、以下のように接続できます。
sqlplus / as sysdba
sqlplus <ユーザー名>/<パスワード>
このような接続は、データベース管理やローカルでの開発作業に適しています。
2. リモート接続
リモート接続は、データベースとクライアントが異なるサーバーにある場合に、ネットワーク経由で接続する方法です。OracleNetを使用して、クライアントマシンからリモートのデータベースに接続します。この場合、リスナー(OracleNet Listener)が必要であり、クライアントとサーバー間のネットワーク通信を管理します。
リモート接続の特徴:
- クライアントとサーバーが別々のマシン上に存在する。
- OracleNetおよびリスナーが必要。
tnsnames.ora
ファイルで接続情報を設定する必要がある。
リモート接続は、異なる場所にあるクライアントマシンからデータベースを操作できるため、企業の多拠点運営やクラウド環境での利用に欠かせない仕組みです。
たとえば、リモート接続の例として次のような接続方法があります。
sqlplus <ユーザー名>/<パスワード>@<接続識別子> as sysdbasqlplus <ユーザー名>/<パスワード>@<接続識別子>
※接続識別子についてはリモート接続に必要な文字列です。詳細につては後述します。
リモート接続が必要な理由
リモート接続は、データベースがクライアントと異なる場所にある場合に必要です。特に次のような理由でリモート接続が使用されます。
- 分散環境でのアクセス
企業や組織では、複数の拠点やオフィスにいるユーザーが、中央のサーバー上のデータベースにアクセスする必要があります。この場合、リモート接続を利用して、ネットワーク越しにデータベースを操作できるようにします。 - クラウド環境での運用
クラウドサービス上にデータベースをホスティングしている場合、ローカルのマシンから直接接続することはできません。リモート接続を介して、クラウド上のデータベースにアクセスするのが一般的です。 - リモート管理と運用
DBA(データベース管理者)は、リモートからデータベースを管理・運用する必要があります。遠隔地からでもシステムの監視、メンテナンス、トラブルシューティングを行えるため、リモート接続は非常に重要です。 - セキュアなアクセス
OracleNetは、SSL/TLSなどのセキュリティプロトコルと組み合わせて、セキュアなリモート接続を提供することができます。これにより、外部の不正アクセスからデータベースを保護しつつ、安全に通信することができます。
リモート接続に必要な設定
リモート接続を行うためには、いくつかの設定が必要です。以下にその手順を説明します。
1. リスナー
リスナーはlistener.oraという設定ファイルで構成されており、lsnrctlコマンドを使って管理(起動・停止など)できます。
以下のようにlistener.ora
ファイルに設定が記述されており、ポート番号やホスト名などの情報が含まれます。
listener.oraファイルはデフォルトでは、データベースサーバーの $ORACLE_HOME/network/admin(%ORACLE_HOME\network\admin) に配置します。
デフォルトでは “LISTENER” という名前のリスナーが作成されています。(ポート番号:1521)
そのためデフォルトリスナーで問題なければ新たに作成する必要はありません。
以下のようなlistener.oraファイルを作成することでデフォルト以外のリスナーを作成することができます。
リスナーとは、Oracleデータベースでネットワーク越しにクライアントが接続要求を送る際に、その要求を受け取るプロセスです。クライアントがOracleデータベースに接続しようとすると、最初にリスナーがその要求を受け取り、適切なデータベースインスタンスに接続を橋渡しします。
リスナーは、以下のような役割を持っています:
接続要求の受け入れ:クライアントがデータベースに接続しようとする際、指定されたポート(デフォルトではポート1521)で待機し、要求を受け入れます。
データベースとの接続:クライアントの要求に基づき、適切なデータベースに接続を確立し、通信を開始させます。
<リスナー名> =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <ホスト名 or IPアドレス> )(PORT = <ポート番号> ))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
【例】
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = v19single)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
listener.oraファイル等をLinux等のUnix環境で作成する時は、viコマンドを使用して作成することができます。
リスナーはlsnrctl
コマンドでリスナーを管理します。
-- リスナーを起動lsnrctl start <リスナー名>
-- リスナーのステータス確認
lsnrctl status <リスナー名>
-- リスナーを停止
lsnrctl stop <リスナー名>
※デフォルトリスナーの場合はリスナー名は省略できます。
lsnrctl start (listener)
lsnrctl status (listener)
lsnrctl stop (listener)
【デフォルトリスナーのステータス】
[oracle@v19single ~]$ lsnrctl status listener
LSNRCTL for Linux: Version 19.0.0.0.0 – Production on 27-9月 -2024 19:06:54
Copyright (c) 1991, 2023, Oracle. All rights reserved.
(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))に接続中
リスナーのステータス
ーーーーーーーーーーーーーーーーー
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 – Production
開始日 27-9月 -2024 19:04:06
稼働時間 0 日 0 時間 3 分 7 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
ログ・ファイル /u01/app/oracle/diag/tnslsnr/v19single/listener/alert/log.xml
リスニング・エンドポイントのサマリー…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=v19single)(PORT=1521)))
サービスのサマリー…
サービス”v19“には、1件のインスタンスがあります。
インスタンス”v19″、状態READYには、このサービスに対する1件のハンドラがあります…
サービス”v19XDB”には、1件のインスタンスがあります。
インスタンス”v19″、状態READYには、このサービスに対する1件のハンドラがあります…
コマンドは正常に終了しました。
[oracle@v19single ~]$
「サービス」とは、データベースのリスナー(接続管理プロセス)が、クライアントからの接続を管理するために提供する論理的な名前のことを指します。サービスは、クライアントがデータベースに接続するために使用するエントリポイントであり、複数のサービスを同一データベースで提供することも可能です。
また、listener.oraを使用してリスナーを作成する場合、全角スペースを使用するとエラーとなる等注意事項が多くあります。
そのため、netcaというGUIでリスナーを作成する等の管理ができるツールを使用する方法もあります。
コマンドラインで「netca」と入力することで起動することができます。
2. tnsnames.oraの設定
tnsnames.ora
は、Oracleデータベースのクライアント側で使用される設定ファイルです。このファイルには、データベースに接続するための情報(ホスト名、ポート番号、サービス名など)が記述されており、クライアントがデータベースにアクセスできるようにします。
簡単に言うと、tnsnames.ora
はクライアントがデータベースに接続するための「住所録」のようなものです。
クライアント側で、データベースへの接続情報を定義するtnsnames.ora
ファイルが必要です。このファイルに、ホスト名、ポート番号、サービス名などを記述します。
tnsnames.oraファイルはデフォルトでは、クライアントをインストールした環境の $ORACLE_HOME/network/admin(%ORACLE_HOME\network\admin) に配置します。
<接続識別子> =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <HOST名 or IPアドレス> )(PORT = <ポート番号> ))
)
(CONNECT_DATA =
(SERVICE_NAME = <サービス名> )
)
)
3. SQL*Plusを使ったリモート接続
tnsnames.oraを使用
tnsnames.ora
ファイルが設定されている場合、次のような形式でSQL*Plusからデータベースに接続できます。
sqlplus username/password@<接続識別子>
※<接続識別子> は、 tnsnames.ora ファイルに記載した接続識別子を使用する。
オラクルデータベースにはクライアントが含まれているため、クライアントソフトウェアを別でインストールしなくてもOracleNet接続を試すことが可能です。
以下はオラクルデータベースに含まれているクライアントを使用して接続している例です。
【接続例】
[oracle@v19single ~]$ lsnrctl status listener
LSNRCTL for Linux: Version 19.0.0.0.0 – Production on 27-9月 -2024 19:06:54
Copyright (c) 1991, 2023, Oracle. All rights reserved.
(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))に接続中
リスナーのステータス
ーーーーーーーーーーーーーーーーー
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 – Production
開始日 27-9月 -2024 19:04:06
稼働時間 0 日 0 時間 3 分 7 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
ログ・ファイル /u01/app/oracle/diag/tnslsnr/v19single/listener/alert/log.xml
リスニング・エンドポイントのサマリー…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=v19single)(PORT=1521)))
サービスのサマリー…
サービス”v19“には、1件のインスタンスがあります。
インスタンス”v19″、状態READYには、このサービスに対する1件のハンドラがあります…
サービス”v19XDB”には、1件のインスタンスがあります。
インスタンス”v19″、状態READYには、このサービスに対する1件のハンドラがあります…
コマンドは正常に終了しました。
[oracle@v19single ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora
~~~
tnsnames.oraに必要な内容を記載
~~~
[oracle@v19single ~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
orcl =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = v19single )(PORT = 1521 ))
)
(CONNECT_DATA =
(SERVICE_NAME = v19 )
)
)
[oracle@v19single ~]$ sqlplus user1/user1@orcl ★tnsnames.oraに記載した接続識別子
SQL*Plus: Release 19.0.0.0.0 – Production on 月 9月 30 17:30:57 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
最終正常ログイン時間: 月 9月 30 2024 17:30:32 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.21.0.0.0
に接続されました。
SQL> select instance_name from v$instance;
INSTANCE_NAME
ーーーーーーーーーーーーー
v19
SQL>
tnsnames.oraにIPアドレスではなくホスト名を記載し、クライアントコンピュータを使用して接続する場合はhostsでの名前解決設定をしましょう。
これを行わないとクライアントコンピュータがホスト名が使用するIPアドレスを識別することができないからです。
hostsファイルは以下の場所にあります。
・Linux → /etc/hosts
・Windows → C:\Windows\System32\drivers\etc\hosts
簡易接続
tnsnames.oraファイルを使用せずに接続することもできます。
簡易接続では、tnsnames.ora
ファイルを編集したり、設定ファイルを管理する必要がなく、シンプルに接続情報を提供してデータベースに接続することができます。
ただしnsnames.ora
では複雑な接続オプションを設定できますが、簡易接続ではそうしたオプションが制限されるため、複雑な接続構成が必要な場合には適していません。
そのため接続試験等を行う目的で使用するのが良いでしょう。
簡易接続は以下の構文で接続することが可能です。
sqlplus <ユーザー名>/<パスワード>@<ホスト名 or IPアドレス>:<ポート>/<サービス名>
【接続例】
[oracle@v19single ~]$ lsnrctl status listener
LSNRCTL for Linux: Version 19.0.0.0.0 – Production on 27-9月 -2024 19:06:54
Copyright (c) 1991, 2023, Oracle. All rights reserved.
(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))に接続中
リスナーのステータス
ーーーーーーーーーーーーーーーーー
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 – Production
開始日 27-9月 -2024 19:04:06
稼働時間 0 日 0 時間 3 分 7 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
ログ・ファイル /u01/app/oracle/diag/tnslsnr/v19single/listener/alert/log.xml
リスニング・エンドポイントのサマリー…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=v19single)(PORT=1521)))
サービスのサマリー…
サービス”v19“には、1件のインスタンスがあります。
インスタンス”v19″、状態READYには、このサービスに対する1件のハンドラがあります…
サービス”v19XDB”には、1件のインスタンスがあります。
インスタンス”v19″、状態READYには、このサービスに対する1件のハンドラがあります…
コマンドは正常に終了しました。
[oracle@v19single ~]$ sqlplus user1/user1@single19c:1521/v19 ★簡易接続
SQL*Plus: Release 19.0.0.0.0 – Production on 月 9月 30 18:34:53 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.21.0.0.0
に接続されました。
SQL> select instance_name from v$instance;
INSTANCE_NAME
ーーーーーーーーーーーーー
v19
SQL>
[参考]
Database Net Servicesリファレンス
トラブルシューティング
リモート接続がうまくいかない場合、以下の点を確認してください。
- ネットワーク接続: クライアントがデータベースサーバーにアクセスできるか確認(ファイアウォールやVPN設定を確認)。
- リスナーの状態: リスナーが起動しているか確認(
lsnrctl status
コマンド)。 - tnsnames.oraの設定: 接続情報が正しいか確認(特にホスト名やポート番号が間違っていないか)。
- データベースインスタンスの状態: データベースが正常に起動しているか確認。
まとめ
OracleNetは、リモート接続を実現するための重要なプロトコルです。リモート接続は、異なる場所からデータベースにアクセスするために不可欠であり、正しい設定が必要です。また、Oracleクライアントソフトウェアをインストールすることで、簡単にリモート接続ができるようになります。この記事を参考にして、OracleNetを使ったリモート接続を実践してみてください。
コメント