投稿カテゴリ整理中。ご迷惑をおかけします。

【Oracle】ローカルネーミングを理解しよう

本稿は,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種類あります。

Oracleデータベース接続方法
簡易接続ネーミング

接続先情報を直接コマンド入力して接続する方法

ローカルネーミング

OracleNet定義ファイル(「tnsnames.ora」)に接続先情報を定義して接続する方法

ディレクトリネーミング

別のディレクトリサーバに接続先情報を定義して接続する方法

外部ネーミング

Oracle以外の外部サービスに接続先情報を定義して接続する方法

ローカル接続

環境変数「ORACLE_SID2」を設定して接続する方法(リスナー不要)

イツキ

ローカル接続は,Oracleをインストールしたサーバ内部でのみ可能な接続方法だよ!

実務での利用

OracleクライアントからOracleデータベースへ接続する際,「tnsnames.ora」と「sqlnet.ora」の設定が必要です。

実務では環境構築時や接続エラー対応の場面で特に「tnsnames.ora」を扱うことも多く,設定誤りによる接続エラー(ORA-12154 など)の発生も少なくありません。

構文だけでなく,「設定項目ごとの役割」を理解しておくことが重要です。

ローカルネーミング

OracleNet定義ファイル

OracleNet定義ファイルは以下の3種類あります。

OracleNet定義ファイル
  • listener.ora
  • tnsnames.ora
  • sqlnet.ora

格納場所はいずれも「${ORACLE_HOME}(Oracleインストールディレクトリ)/network/admin」直下です。

3種類あるファイルの内,ローカルネーミングで必要となるのは「tnsnames.ora」と「sqlnet.ora」です。

Oracleへ接続するためにはもちろんリスナー(「listener.ora」)設定も必要ですが,ローカルネーミングの意味では設定する必要ありません。(リスナーは別途紹介します。)

OracleNet定義ファイルは,以下いずれかの方法で作成することができます。

OracleNet定義ファイル作成方法
  • データベース作成時にDBCA3で作成する
  • NetCA4を利用して作成する
  • 手動で作成する(BATやシェルを利用した自動作成含む)
ハヤト

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

イツキ

最初はDBCAもしくはNetCAでの作成が無難だと思うよ!

慣れない内はDBCAもしくはNetCAでの作成が無難かと思います。

画面上(GUI)にて必要事項を入力することで,Oracleが自動的に定義ファイルを作成してくれます。

要領や構文規則が分かってきたら,BATやシェルを利用して自動化することで,生産性向上はもちろん品質も確保しやすくなるでしょう。

tnsnames.ora

ローカルネーミングにおいて,接続するデータベース情報を定義するためのOracleNet定義ファイルです。

本定義ファイルへ定義したデータベースに,ローカルネーミングで接続することができるようになります。

基本的な構文は以下の通りです。

他にもいろいろと定義要素はありますが,最低限まずは上記を把握していれば問題ありません。

ちなみに,複数行に跨いで定義する場合,子要素は半角スペース1文字以上のインデントが必須です。

イツキ

Oracleの構文規則で決まっているよ!半角スペース2文字分くらいが丁度良いかも。

実務で意識するポイント

「tnsnames.ora」の設定では,以下の項目を特に意識して確認します。

・HOST     :接続先サーバ名またはIPアドレス
・PORT     :リスナーの待受ポート(デフォルトは1521)
・SERVICE_NAME:接続対象のデータベース識別子

実務では,上記のいずれかが誤っているだけでも接続できなくなります。
設定値はDB担当者や環境定義書と照らし合わせて確認することが重要です。

実際の具体例を以下に示します。

なお,例では同じ名前(ORCL)にしている「接続識別子名」(1行目)と「データベース名」(5行目)には注意点があります。

「接続識別子名」は好きな名前を指定可能(「ABCD」とかでも可)ですが,「データベース名」は存在するデータベース名を指定しましょう。

「接続識別子名」には好きな名前を指定可能だが,「データベース名」は実際に作成したデータベース名を指定する必要がある。

sqlnet.ora

Oracleへ接続する方法を定義するOracleNet定義ファイルです。

本定義ファイルへ定義した方法でOracleへ接続できるようになります。

ローカル接続を除いて,定義した方法でしかOracleへ接続できない。

基本的な構文は以下の通りです。

他にもいろいろと定義要素はありますが,最低限まずは上記を把握していれば問題ありません。

ローカルネーミングにおいては,以下の通りに定義します。

Oracleデータベース接続

tnsping

「tnsnames.ora」へ定義したOracleデータベースとの,簡易的な疎通確認ができます。

イツキ

Windowsで例えると,「ping」のような機能だよ!

問題なく設定してある場合,実行することで以下のような結果が返ってきます。

SQL*Plus

Oracleデータベースへ接続するために,SQL*Plusを利用します。

プロンプト(Windowsならコマンドプロンプト,UNIX系ならターミナル)で以下のコマンドを実行します。

なお,コマンド実行に当たり,前もって環境変数の「${PATH}」へ「${ORACLE_HOME}/bin」を設定しておきましょう。

「tnsnames.ora」を以下のように定義していた場合の実行コマンドを提示します。

設定が問題なくできていれば,接続された旨のメッセージが返ってきます。

「@」の後ろに指定している「ORCL」は,「tnsnames.ora」で定義した「接続識別子」((例)tnsnames.oraの1行目)です。

「データベース名」((例)tnsnames.oraの5行目)ではない点に注意しましょう。

イツキ

仮に「接続識別子」が「ABCD」の場合,「@」の後ろは「ABCD」とする必要があるよ!

よくある接続エラー原因

実務でよく遭遇する接続エラーの原因として,以下があります。

・ホスト名誤り(DNS未登録,hostsファイルへの設定漏れによる名前解決不可等)
・ポート番号誤り
・SERVICE_NAMEとデータベース名の不一致
・「tnsnames.ora」の配置場所誤り

特に複数環境(本番・検証・開発等)がある場合,設定の取り違いが起きやすいため注意が必要です。

まとめ

今回はローカルネーミングでの接続について説明しました。

「tnsnames.ora」はOracle接続における基本的な設定ファイルであり,実務では接続エラーの原因となることが多い重要なファイルです。

単なる構文の理解にとどまらず,各設定項目の役割や確認ポイントを把握しておくことで,エラー発生時の対応を円滑に行うことができます。

役割や設定項目の意味を理解することで,Oracleにおける重要性を少しずつでも把握していきましょう!


  1. 行と列から成る表構造型データベース ↩︎
  2. インスタンス名を設定するOracleの環境変数 ↩︎
  3. Oracleデータベースを作成できるOracleの機能 ↩︎
  4. Oracleデータベースへ接続するためのネットワーク設定ができるOracleの機能 ↩︎
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

Author

               
イツキのアバター
イツキ
               

ITインフラ分野における実務経験をもとに,技術情報の発信・著述活動を行っています。

24年度よりITフリーランスとして事業を開始し,インフラエンジニアとして設計・構築・運用改善(自動化)に従事する一方で, 専門的な知見を活かした技術解説記事の執筆を継続。

ITインフラや業務効率化等の分野において,実務に役立つ情報やITリテラシー向上に資するコンテンツを発信中!                

目次