今回は実際に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をインストールしたサーバ内部でのみ可能な接続方法だよ!
ローカルネーミング
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文字分くらいが丁度良いかも。
実際の具体例を以下に示します。
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データベース接続
Oracleデータベースへ接続するために,SQL*Plusを利用します。
プロンプト(Windowsならコマンドプロンプト,UNIX系ならターミナル)で以下のコマンドを実行します。
なお,コマンド実行に当たり,前もって環境変数の「${PATH}」へ「${ORACLE_HOME}/bin」を設定しておきましょう。
1 |
sqlplus [ユーザ名]/[パスワード]@[接続識別子] |
「tnsnames.ora」を以下のように定義していた場合,具体的には以下の通りです。
1 2 3 4 5 6 7 |
ORCL= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ORCLSRV01)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL) ) ) |
1 |
sqlplus itsuki/itsuki123@ORCL |
「@」の後ろに指定している「ORCL」は,「tnsnames.ora」で定義した「接続識別子」(「(例)tnsnames.ora」の1行目)です。
「データベース名」(「(例)tnsnames.ora」の5行目)ではない点に注意しましょう。



仮に「接続識別子」が「ABCD」の場合,「@」の後ろは「ABCD」とする必要があるよ!
「@」の後ろには「接続識別子」を指定する。また,環境変数の「${PATH}」に「${ORACLE_HOME}/bin」を設定しておくこと。
まとめ
今回はローカルネーミングでの接続について説明しました。
OracleNet定義ファイルを適切に設定することで,SQL*Plusを利用してOracleデータベースへ接続することが可能となります。
設定において特にややこしいのが,「tnsnames.ora」の「接続識別子」(好きな名前を指定可)と「データベース名」(作成したデータベース名を指定)です。
それぞれを理解しておくことで,万が一エラーが起きた際の原因調査も捗り易くなるかと思います。
概念を理解することで,自身が行っている作業もより理解できるよう励んでいきましょう!