Oracle Databaseの運用や開発を行っていると、「ローカルでは接続できるのに、リモートからだと繋がらない…」といった壁にぶつかることがよくあります。
本記事では、Oracle Databaseにおける「ローカル接続」と「リモート接続」の違いをはじめ、それぞれの具体的な接続方法や必須となる設定(tnsnames.oraなど)、そしてよくあるエラーの対処法までを分かりやすく解説します。
1. ローカル接続とリモート接続の根本的な違い
Oracle Databaseへの接続方法は、接続元(クライアント)と接続先(データベース・サーバー)が同じマシンにあるか、別のマシンにあるかによって大きく2つに分けられます。
- ローカル接続(Local Connection) データベースがインストールされている「自分自身のパソコン(またはサーバー)」から、直接そのデータベースに接続することです。
- リモート接続(Remote Connection) 自分のパソコン(クライアント)から、ネットワーク越しに別の場所にあるデータベース・サーバーへ接続することです。
ネットワーク接続(リスナー)の必要性
ローカル接続の場合、ネットワークを経由せずに直接データベースに接続できる方法(OSOS [オーエス]Operating System。基本ソフトウェア認証など)が存在します。
※日本語記事では便宜的に「IPC接続」とまとめられることもありますが、sqlplus / as sysdba などは厳密にはBequeath(ベクウェス)プロトコルを使用しています。
一方、リモート接続の場合はネットワークを経由するため、通常のTCPTCP [ティーシーピー]Transmission Control Protocol。信頼性の高い通信プロトコル/IPIP [アイピー]Internet Protocol。インターネット通信の基本プロトコル接続であればサーバー側の「リスナー(Oracle Net Listener)」と呼ばれる受信窓口が起動している必要があります。
2. ローカル接続の手順
ローカル接続は、主にデータベースのインストール直後や、サーバー内で直接メンテナンス作業を行う際によく利用されます。
OS認証(Bequeath接続)を利用した接続(SQL*Plus)
データベースをインストールしたサーバーのOSユーザー(Oracle管理者ユーザー)としてログインしている場合、パスワードなしで特権管理者(SYSDBA)として接続できるのが「OS認証(Bequeath接続)」です。
# コマンドプロンプトやターミナルを開き、以下のコマンドを実行sqlplus / as sysdbaこの方法は、リスナーが起動していなくても接続できるため、データベースの起動や停止、リスナーの設定変更などを行う際の第一歩となります。
TCP/IPを利用したローカル接続
自端末にインストールされたOracleに対して、TCP/IP通信(ネットワーク経由)で接続する場合は、ホスト名に localhost や 127.0.0.1 を指定します。この場合、ローカルであってもリスナーが起動している必要があります。
# Easy Connect(簡易接続)ネーミング・メソッドを利用した例sqlplus username/password@localhost:1521/orcl※ orcl の部分は、環境に合わせたサービス名に置き換えてください。なお、接続記述子に SID= を指定する方法もありますが、一般的なEasy Connect構文(/service_name)とは区別されます。
3. リモート接続の手順と2つの主要な設定方法
別のパソコンからサーバー上のOracleに接続するためには、以下の前提条件を満たしている必要があります。
- サーバー側で接続対象のデータベース・インスタンスおよびサービスが利用可能であること
- サーバー側でリスナー(Listener)が起動していること
- クライアントからリスナーの待受ポートへネットワーク的に到達できること(デフォルトは1521) (OSやクラウド側のファイアウォール、セキュリティグループなどで通信が遮断されていないことを確認します)
リモート接続を行うための設定方法には、主に「Easy Connect(簡易接続)」と「ローカル・ネーミング(tnsnames.ora)」の2種類があります。
方法1:Easy Connect(簡易接続)を利用する
設定ファイル(tnsnames.ora)の作成が不要で、接続文字列に直接サーバーのIPアドレスやポート番号を指定する手軽な方法です。
接続文字列の書式:
[ユーザー名]/[パスワード]@[ホスト名またはIPアドレス]:[ポート番号]/[サービス名]
SQLSQL [エスキューエル / シークエル]Structured Query Language。関係データベース(RDB)の管理や操作を行うデータベース言語*Plusでの実行例:
sqlplus scott/tiger@192.168.1.100:1521/orclpdb1SQL Developer等のGUIGUI [ジーユーアイ / グーイ]Graphical User Interface。グラフィカルな操作画面ツールでの設定:
- 接続タイプ:基本(Basic)
- ホスト名:192.168.1.100
- ポート:1521
- サービス名:orclpdb1
方法2:tnsnames.ora(ローカル・ネーミング)を利用する
クライアント側に tnsnames.ora という設定ファイルを配置し、接続先情報に「エイリアス(別名)」をつけて管理する方法です。複数のデータベースを管理したり、接続情報が頻繁に変わる環境で便利です。
1. tnsnames.ora の記述例
通常、クライアント側のOracle Homeにある network/admin/ ディレクトリなどに配置します(環境変数 TNS_ADMIN で場所を指定することも可能です)。
PROD_DB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb1) ) )2. 接続時の指定
ファイルに定義したエイリアス名(上記の場合は PROD_DB)を使って接続します。
sqlplus scott/tiger@PROD_DB4. 接続できない場合のよくあるエラーと対処法
リモート接続を試みた際に発生しやすい代表的なエラーと、そのチェックポイントを紹介します。
ORA-12541: TNS: リスナーがありません
サーバー側でリスナーが起動していない、あるいは指定したポート番号が間違っている場合に発生します。
※新しいOracle Databaseのバージョン(23ai、26ai等)では、エラーメッセージが「ORA-12541: Cannot connect. No listener at host_port.」のような形式に変更されています。
- 対処法: サーバー側で
lsnrctl statusを実行し、リスナーが起動しているか確認します。停止している場合はlsnrctl startで起動してください。名前付きリスナーを使用している場合はlsnrctl status <リスナー名>、lsnrctl start <リスナー名>のように指定します。
ORA-12154: TNS: 指定された接続識別子を解決できませんでした
tnsnames.ora を使用して接続しようとした際、指定したエイリアス名がファイル内に見つからない、あるいはファイルの構文エラーがある場合に発生します。
- 対処法: 接続文字列のエイリアス名にスペルミスがないか、また
tnsnames.oraの配置場所や記述(カッコの対応など)が正しいかを確認します。
ORA-12514: TNS: リスナーは接続記述子で要求されたサービスを現在認識していません
リスナーは起動して応答しているものの、指定された「サービス名(SERVICE_NAME)」が見つからないエラーです。
※新しいOracle Databaseのバージョン(23ai、26ai等)では、エラーメッセージが「ORA-12514: Cannot connect to database. Service <サービス名> is not registered with the listener at host <host> port <port>.」といった形式に変更されています。
- 対処法: 接続先のサービス名が間違っていないか確認します。サーバー側で
lsnrctl statusを実行し、リスナーが認識しているサービス一覧と照らし合わせてください。
応答がない・タイムアウトする
エラーメッセージがすぐに返ってこず、長時間待たされた後に失敗する場合は、ネットワーク経路上でTCP接続が遮断されている可能性があります。
- 対処法: OSやクラウド側のファイアウォール(Windows Defender、firewalld、セキュリティグループなど)で、ポート(1521)がブロックされていないか確認します。まずはクライアントから
ping [サーバーのIP]で基本的なネットワーク疎通を確認します(※ICMPICMP [アイシーエムピー]Internet Control Message Protocol。IP通信のエラー報告や制御メッセージを転送するプロトコルが遮断されている環境もあるため、pingが通らない場合でもそれだけでOracleへのTCP接続が不可とは判断しません)。より確実な方法として、telnet [サーバーのIP] 1521やnc -zv [サーバーのIP] 1521などを実行して、ポートレベルでの疎通を確認すると実践的です。
5. まとめ
- ローカル接続: データベースと同じ端末から接続する。ネットワーク経由のほか、OS認証を利用した直接接続が可能。
- リモート接続: 別の端末からネットワーク経由で接続する。通常のTCP/IP接続では、サーバー側の「リスナー」起動と、待受ポートへのネットワーク到達性が必須。
- 接続方法: 手軽な「Easy Connect」と、エイリアスで一元管理できる「tnsnames.ora」を用途に合わせて使い分けるのがおすすめ。
「ローカルでは繋がるのにリモートで繋がらない」場合は、まずリスナーの状態とファイアウォールの設定を疑ってみてください。ネットワーク接続の基本を押さえることで、Oracle Databaseの運用がよりスムーズになります。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
図解が豊富で、概念的な理解に最適。実務に入る前の「全体像把握」に最適な一冊です。