#Oracleデータベースへの接続
Oracleデータベースに接続するためには、クライアント側で接続先の情報を正しく指定する必要があります。
よく使われる「簡易接続ネーミング・メソッド」と「ローカル・ネーミング・メソッド」の2つの接続方法と、疎通確認に使える「tnsping」について、時間がたつと毎度忘れてしまうので、メモとして残します。
1. 簡易接続ネーミング・メソッド(EZCONNECT)
「簡易」という通り、クライアント側では構成ファイルを作っておく必要はありません。
以下の情報がわかっていれば、コマンド1行で接続可能です。
- ユーザ名/パスワード
- 接続先ホスト名
- リスナーのListenPort(デフォルト:1521)
- サービス名(初期化パラメータ SERVICE_NAMES)
- 接続の構文
- CONNECT ユーザ名[/パスワード]@接続先ホスト名[:リスナーポート]/[サービス名]
- 接続の例
- CONNECT user1/passwd@myhost:1521/orcl
- 前提として 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
- 前提として 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の出力は、ファイルにリダイレクトして印刷できます。