tnsnames.oraガイド

オラクルデータベースの基本

1. tnsnames.oraとは?

tnsnames.ora は、Oracleデータベースに接続するための「道案内表」です。設定ファイル内にホスト名、ポート番号、サービス名といった情報を記載することで、データベースへの接続を簡略化します。

【重要性】

もし tnsnames.ora がない場合、毎回以下のような接続文字列を指定しなければなりません:

sqlplus user/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))

これが tnsnames.ora を設定すると、以下のように簡略化されます:

sqlplus user/password@MYDB

【tnsnames.ora が使われる具体的なシナリオ】

  • シナリオ1:開発環境、本番環境、テスト環境など複数のデータベースを切り替える場合。
  • シナリオ2:障害時の自動切り替え(フェイルオーバー)を構築したい場合。
  • シナリオ3:ユーザーに複雑な接続情報を隠したい場合。

2. tnsnames.oraの基本構造と設定例

以下は、典型的な構造です:

エントリ名 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = データベースホスト名)(PORT = ポート番号))
(CONNECT_DATA =
(SERVICE_NAME = サービス名)
)
)

【詳細解説】

  1. エントリ名
    • 任意の名前でOK。接続時に使う。
    • 例:MYDB, DEV_DB, PROD_DB など。
  2. DESCRIPTION
    • 接続情報全体を包含するセクション。
  3. ADDRESS
    • 通信プロトコル (TCP)、ホスト名 (localhost など)、ポート番号 (1521) を記述。
  4. CONNECT_DATA
    • 接続するサービス名を指定。

【簡単な例】

以下は、ローカル環境でOracleデータベースに接続するための例です:

MYDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl.localdomain)
)
)

この設定を利用して接続するには、次のコマンドを実行します:

sqlplus scott/tiger@MYDB

【ビジュアルで理解する】

tnsnames.ora の構造図を挿入」

  • DESCRIPTION を中心に ADDRESSCONNECT_DATA がどう組み合わさるかを視覚化します。
  • 階層構造を図解することで、初心者が直感的に理解できます。

3. 応用設定

① ロードバランシングとフェイルオーバー設定

HIGH_AVAIL_DB =
(DESCRIPTION =
(LOAD_BALANCE = ON)
(FAILOVER = ON)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.102)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orclpdb.localdomain)
)
)
  • LOAD_BALANCE = ON:クライアントの接続を複数ノードに分散。
  • FAILOVER = ON:1つのノードがダウンしても、他のノードへ自動切り替え。

【接続コマンド】

sqlplus user/password@HIGH_AVAIL_DB

【活用場面】

本番環境での高可用性構築時に使用。


② 環境別に複数設定する場合

DEV_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dev.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = devdb)
)
)

PROD_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = prod.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = proddb)
)
)

【接続例】

sqlplus scott/tiger@DEV_DB  # 開発環境へ接続
sqlplus scott/tiger@PROD_DB # 本番環境へ接続

4. トラブルシューティング

① ORA-12154: TNS:could not resolve the connect identifier specified

原因

  • エントリ名が間違っている。
  • 環境変数 TNS_ADMIN が未設定。

解決策

  1. tnsnames.ora のエントリ名が正しいか確認。
  2. tnsping コマンドで接続確認:bashコードをコピーするtnsping MYDB

② ORA-12541: TNS:no listener

原因

  • リスナーが起動していない。
  • ホスト名やポート番号の誤り。

解決策

  1. リスナーの状態を確認:lsnrctl status
  2. 必要であればリスナーを起動:lsnrctl start

5. 実践課題(学びを深める)

【課題1】

以下の要件を満たす tnsnames.ora を作成してください:

  • ホスト:dbserver.local
  • ポート:1522
  • サービス名:testdb
  • エントリ名:TESTDB

模範解答

TESTDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver.local)(PORT = 1522))
(CONNECT_DATA =
(SERVICE_NAME = testdb)
)
)

【課題2】

tnsping コマンドで接続確認を行い、リスナーの応答を確認してください。


6. 図解と動画での解説

  • 記事に対応する図を多用(例:ファイル構造、接続フロー、TNS_ADMIN設定の例)。
  • 動画リンクを埋め込み、「初心者が最初にやるべき手順」を視覚的に補強。

7. まとめ

  • tnsnames.ora は接続管理を簡略化する不可欠なファイル
  • TNS_ADMIN 環境変数を活用すれば柔軟な運用が可能
  • トラブルシューティングを身につければ運用トラブルも安心

次の一歩:この記事を参考に、自分の環境に最適な設定を作成しましょう。スキルを高めることで、複雑なデータベース接続の管理が驚くほど楽になります!

[参考]
Database Net Servicesリファレンス

コメント

タイトルとURLをコピーしました