本稿は,Oracleを扱うエンジニアの方や,Oracle接続で詰まった方向けの記事です。
今回は実際にOracleデータベースへ接続する方法の一つ,ローカルネーミングについてご紹介します。
SID,インスタンス,グローバル・データベース名等,Oracleには似たような様々な概念があり,混乱することもありますよね。
一度に紹介すると整理しきれなくなる可能性も有るため,取り掛かりとして意外とややこしくなりがちなOracleNetの部分からご紹介します。
ぜひとも参考にしていただけたら幸甚です。
前提知識
Oracleデータベース

アメリカに本社を置くOracle社が開発しているRDBMS1です。
数多のDB製品がある中で,長年世界1位のシェアを誇っています。
難点があるとすれば,他のDB製品に比べると価格が高価な点です。
とはいえ,Oracle社の手厚いサポートもあり,総合的には非常に扱いやすいDBと言えるでしょう。
大規模システムにおいて使用するうえでは,本製品が非常に有用かと思います。
SQL*Plus

Oracleデータベースを管理するために使用するツールの一種で,Oracleデータベースをインストールすれば付随してきます。
操作する際は,ボタン操作等のGUI操作ではなくコマンド入力によって行います。
イツキWindowsで言うところのコマンドプロンプトだよ!
SQL*PlusではSELECT等のSQLはもちろん,独自のプログラミング言語であるPL/SQLコマンドやCONNECT等のSQL*Plusコマンドを実行可能です。
DB接続方法
Oracleデータベースへ接続する方法は以下の5種類あります。
- 簡易接続ネーミング
-
接続先情報を直接コマンド入力して接続する方法
- ローカルネーミング
-
OracleNet定義ファイル(「tnsnames.ora」)に接続先情報を定義して接続する方法
- ディレクトリネーミング
-
別のディレクトリサーバに接続先情報を定義して接続する方法
- 外部ネーミング
-
Oracle以外の外部サービスに接続先情報を定義して接続する方法
- ローカル接続
-
環境変数「ORACLE_SID2」を設定して接続する方法(リスナー不要)



ローカル接続は,Oracleをインストールしたサーバ内部でのみ可能な接続方法だよ!
実務での利用
OracleクライアントからOracleデータベースへ接続する際,「tnsnames.ora」と「sqlnet.ora」の設定が必要です。
実務では環境構築時や接続エラー対応の場面で特に「tnsnames.ora」を扱うことも多く,設定誤りによる接続エラー(ORA-12154 など)の発生も少なくありません。
構文だけでなく,「設定項目ごとの役割」を理解しておくことが重要です。
ローカルネーミング
OracleNet定義ファイル
OracleNet定義ファイルは以下の3種類あります。
- listener.ora
- tnsnames.ora
- sqlnet.ora
格納場所はいずれも「${ORACLE_HOME}(Oracleインストールディレクトリ)/network/admin」直下です。
3種類あるファイルの内,ローカルネーミングで必要となるのは「tnsnames.ora」と「sqlnet.ora」です。
Oracleへ接続するためにはもちろんリスナー(「listener.ora」)設定も必要ですが,ローカルネーミングの意味では設定する必要ありません。(リスナーは別途紹介します。)
OracleNet定義ファイルは,以下いずれかの方法で作成することができます。



どれがおすすめなんだろう?



最初はDBCAもしくはNetCAでの作成が無難だと思うよ!
慣れない内はDBCAもしくはNetCAでの作成が無難かと思います。
画面上(GUI)にて必要事項を入力することで,Oracleが自動的に定義ファイルを作成してくれます。
要領や構文規則が分かってきたら,BATやシェルを利用して自動化することで,生産性向上はもちろん品質も確保しやすくなるでしょう。
tnsnames.ora
ローカルネーミングにおいて,接続するデータベース情報を定義するためのOracleNet定義ファイルです。
本定義ファイルへ定義したデータベースに,ローカルネーミングで接続することができるようになります。
基本的な構文は以下の通りです。
|
1 2 3 4 5 6 7 |
[接続識別子名]= (DESCRIPTION = (ADDRESS = (PROTOCOL = [プロトコル])(HOST = [ホスト名])(PORT = [リスニングポート番号])) (CONNECT_DATA = (SERVICE_NAME = [データベース名≒インスタンス名]) ) ) |
他にもいろいろと定義要素はありますが,最低限まずは上記を把握していれば問題ありません。
ちなみに,複数行に跨いで定義する場合,子要素は半角スペース1文字以上のインデントが必須です。



Oracleの構文規則で決まっているよ!半角スペース2文字分くらいが丁度良いかも。
「tnsnames.ora」の設定では,以下の項目を特に意識して確認します。
・HOST :接続先サーバ名またはIPアドレス
・PORT :リスナーの待受ポート(デフォルトは1521)
・SERVICE_NAME:接続対象のデータベース識別子
実務では,上記のいずれかが誤っているだけでも接続できなくなります。
設定値はDB担当者や環境定義書と照らし合わせて確認することが重要です。
実際の具体例を以下に示します。
|
1 2 3 4 5 6 7 |
ORCL= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ORCLSRV01)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL) ) ) |
なお,例では同じ名前(ORCL)にしている「接続識別子名」(1行目)と「データベース名」(5行目)には注意点があります。
「接続識別子名」は好きな名前を指定可能(「ABCD」とかでも可)ですが,「データベース名」は存在するデータベース名を指定しましょう。
「接続識別子名」には好きな名前を指定可能だが,「データベース名」は実際に作成したデータベース名を指定する必要がある。
sqlnet.ora
Oracleへ接続する方法を定義するOracleNet定義ファイルです。
本定義ファイルへ定義した方法でOracleへ接続できるようになります。
ローカル接続を除いて,定義した方法でしかOracleへ接続できない。
基本的な構文は以下の通りです。
|
1 |
NAMES.DIRECTORY_PATH= ([データベース接続方法]) |
他にもいろいろと定義要素はありますが,最低限まずは上記を把握していれば問題ありません。
ローカルネーミングにおいては,以下の通りに定義します。
|
1 |
NAMES.DIRECTORY_PATH= (TNSNAMES) |
Oracleデータベース接続
tnsping
「tnsnames.ora」へ定義したOracleデータベースとの,簡易的な疎通確認ができます。



Windowsで例えると,「ping」のような機能だよ!
|
1 |
tnsping (接続識別子名) |
問題なく設定してある場合,実行することで以下のような結果が返ってきます。
|
1 2 3 4 5 |
>tnsping ORCL (中略) エイリアスを解決するためにTNSNAMESアダプタを使用しました。 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ORCLSRV01)(PORT = 1521))) (CONNECT_DATA = (SID = ORCL)))に接続の試行中 OK (50ミリ秒) |
SQL*Plus
Oracleデータベースへ接続するために,SQL*Plusを利用します。
プロンプト(Windowsならコマンドプロンプト,UNIX系ならターミナル)で以下のコマンドを実行します。
|
1 |
sqlplus [ユーザ名]/[パスワード]@[接続識別子] |
なお,コマンド実行に当たり,前もって環境変数の「${PATH}」へ「${ORACLE_HOME}/bin」を設定しておきましょう。
「tnsnames.ora」を以下のように定義していた場合の実行コマンドを提示します。
設定が問題なくできていれば,接続された旨のメッセージが返ってきます。
|
1 2 3 4 5 6 7 |
ORCL= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ORCLSRV01)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL) ) ) |
|
1 2 3 4 5 |
>sqlplus itsuki/itsuki123@ORCL (中略) Oracle Database 19c Release 19.3.0.0.0 -64bit Production に接続されました。 SQL> |
「@」の後ろに指定している「ORCL」は,「tnsnames.ora」で定義した「接続識別子」((例)tnsnames.oraの1行目)です。
「データベース名」((例)tnsnames.oraの5行目)ではない点に注意しましょう。



仮に「接続識別子」が「ABCD」の場合,「@」の後ろは「ABCD」とする必要があるよ!
よくある接続エラー原因
実務でよく遭遇する接続エラーの原因として,以下があります。
・ホスト名誤り(DNS未登録,hostsファイルへの設定漏れによる名前解決不可等)
・ポート番号誤り
・SERVICE_NAMEとデータベース名の不一致
・「tnsnames.ora」の配置場所誤り
特に複数環境(本番・検証・開発等)がある場合,設定の取り違いが起きやすいため注意が必要です。
まとめ
今回はローカルネーミングでの接続について説明しました。
「tnsnames.ora」はOracle接続における基本的な設定ファイルであり,実務では接続エラーの原因となることが多い重要なファイルです。
単なる構文の理解にとどまらず,各設定項目の役割や確認ポイントを把握しておくことで,エラー発生時の対応を円滑に行うことができます。
役割や設定項目の意味を理解することで,Oracleにおける重要性を少しずつでも把握していきましょう!








