LoginSignup
20
23

More than 3 years have passed since last update.

Oracle接続を図解する<接続情報の書き方>

Posted at

Oracleデータベースへの接続

Oracleデータベースに接続するためには、クライアント側で接続先の情報を正しく指定する必要があります。
よく使われる「簡易接続ネーミング・メソッド」と「ローカル・ネーミング・メソッド」の2つの接続方法と、疎通確認に使える「tnsping」について、時間がたつと毎度忘れてしまうので、メモとして残します。

1. 簡易接続ネーミング・メソッド(EZCONNECT)

「簡易」という通り、クライアント側では構成ファイルを作っておく必要はありません。
以下の情報がわかっていれば、コマンド1行で接続可能です。

  • ユーザ名/パスワード
  • 接続先ホスト名
  • リスナーのListenPort(デフォルト:1521)
  • サービス名(初期化パラメータ SERVICE_NAMES)
接続の構文
CONNECT ユーザ名[/パスワード]@接続先ホスト名[:リスナーポート]/[サービス名]
接続の例
CONNECT user1/passwd@myhost:1521/orcl

ezconnect.png

  • 前提として sqlnet.oraファイルに下記の設定が入っている必要があります。(デフォルトで有効)
NAMES.DIRECTORY_PATH=(EZCONNECT)

2. ローカル・ネーミング・メソッド

「1.簡易接続」よりも、さらに短いコマンドオプションで接続できる方法です。
簡易接続の時に指定したコマンドオプションのうち、接続先サーバ、リスナーポート番号についてはクライアント環境の tnsnames.ora に書かれているので、省略することができます。
以下の情報がわかっていれば接続できます。

  • ユーザ名/パスワード
  • ネットサービス名(tnsnames.oraに書かれている)

tnsnames.oraには「ネットサービス名」を先頭に持つ複数行からなる定義情報エントリーが存在し、このうち"SERVICE_NAME"に書かれているのが、宛先のデータベース・サービス名(※)となります。

(※)サービス(データベース・サービス):
 ・クライアントがOracleインスタンス(データベース)に接続するときに指定する名前
 ・Oracleサーバ側では初期化パラメータ service_names で定義されている

tnsnames.oraファイルの配置場所
$ORACLE_HOME/network/admin ディレクトリ
接続の構文
CONNECT ユーザ名[/パスワード]@ネットサービス名
接続の例
CONNECT user1/passwd@orcl

LocalNaming.png

  • 前提として sqlnet.oraファイルに下記の設定が入っている必要があります。(デフォルトで有効)
NAMES.DIRECTORY_PATH=(TNSNAMES)

疎通確認に使える「tnsping」「trcroute」コマンド

tnsping

リスナーに正常に到達できるかどうかを確認できる ping のような接続テストコマンド。
ping ではネットワークレイヤーの疎通確認ができますが、tnspingコマンドを使えばリスナー、データベース(サービス)までの疎通確認が取れます。
もちろん、SQL*Plusから上のCONNECTコマンドでつながるのなら、それで十分事が足りますけど。

  • クライアントからサーバーに正常に接続できた場合は、Oracle Netサービスに到達するために必要な往復時間(ミリ秒単位)の概算が表示されます。
  • 接続に失敗した場合は、発生したエラーを記述するメッセージが表示されます

実行例(簡易接続の場合):

C:\Users\KANA>tnsping myhost:1521/ORCL

TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on 22-7月 -2019 13:08:04

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

パラメータ・ファイルを使用しました:
C:\sw\oracle\WINDOWS.X64_193000_db_home\network\admin\sqlnet.ora

エイリアスを解決するためにEZCONNECTアダプタを使用しました。
(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=ORCL))(ADDRESS=(PROTOCOL=tcp)(HOST=xxxx::xxxx:xxxx:xxxx:xxxxx)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=x.xx.xxx.xxx)(PORT=1521)))に接続の試行中
OK (20ミリ秒)

C:\Users\KANA>

実行例(ローカル・ネーミングの場合):

ネットサービス名は「TARGET」ですので、「tnsping TARGET」と打つだけです。

  << tnsnames.ora の定義内容 >>
TARGET =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = myhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
C:\Users\KANA>tnsping TARGET

TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on 22-7月 -2019 18:36:43

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

パラメータ・ファイルを使用しました:
C:\sw\oracle\WINDOWS.X64_193000_db_home\network\admin\sqlnet.ora

エイリアスを解決するためにTNSNAMESアダプタを使用しました。
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))に接続の試行中
OK (10ミリ秒)

C:\Users\KANA>


trcroute

つながらなくて困っているときに使えるツールといえば、UNIX系環境であればTRCROUTEコマンドもありますね。
(今は幸い困っていないしWindows環境なので使えませんが)

Oracle Help Center:
https://docs.oracle.com/cd/E96517_01/netag/testing-connections.html#GUID-9A550EEC-5736-46B4-B10E-55849B01A4D0

LinuxおよびUNIX環境では、管理者はTrace Routeユーティリティ(TRCROUTE)を使用して、クライアントからサーバーへのパスまたはルートを検出できます。TRCROUTEは、問題に遭遇すると、1つのエラーではなくエラー・スタックをクライアントに戻します。これらの追加エラー・メッセージによって、トラブルシューティングが簡単になります。

TRCROUTEは、特殊な種類の接続パケットとして送信される点でTNSPINGとは異なります。接続先に向かって移動するとき、TRCROUTE接続パケットは、経由するすべてのノードのTNSアドレスを収集します。エラーが発生した場合、TRCROUTEは、エラーの発生場所を示すエラー情報を収集します。TRCROUTEは、収集した情報をクライアント画面に表示します。TRCROUTEの出力は、ファイルにリダイレクトして印刷できます。

20
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
23