環境はWindows XPにインストールしたOracle 11g XEです。
基本
接続をしたあとv$session_connect_infoを見てみる。
NETWORK_SERVICE_BANNER | CLIENT_DRIVER |
---|---|
Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows(後略) | jdbcthin |
という行があるので、JDBC THINクライアントとして接続しにいっているようだ。起動にJavaを要求するんだから当然といえば当然か。
TNS
ネットワーク別名のリスト候補はどこから取得しているのか。マニュアルによると下記のようになっている。
TNS connection type
(略)The list for selecting a network alias is initially filled from all tnsnames.* files on your system, unless you have set the Database: Advanced preference Tnsnames Directory to identify the location of the tnsnames.ora file to be used.
ネットワーク別名のリストはSQL Developerを動作させているコンピュータ上のすべてのtnsnames.* ファイルによって初期化されます。ただし、プリファレンス -> データベース -> 拡張のTnsnamesディレクトリの設定項目でtnsnames.oraファイルが指定されていない場合に限ります。
SQL Developer 3.1 マニュアル Create/Edit/Select Database Connection より抜粋 後半部分は俺の適当な訳
all tnsnames.* files on your systemって何がどうallなのかアレですが、フツーに考えればtnsnames.oraファイルを探しに行く場所は従来通りでしょう。
WindowsにOracle 11g XEをインストールした場合、レジストリにORACLE_HOMEがありその値はC:\oraclexe\app\oracle\product\11.2.0\serverであり$ORACLE_HOME\network\adminにあるtnsnames.oraを参照していると思われる。
参考:ORACLE_SID、ORACLE_HOME の確認方法 - オラクル・Oracleをマスターするための基本と仕組み
下記の抜粋はOracle Net Servicesでの話だけどコレを踏襲してるのかなぁとか。
ユーザーレベルの設定ファイル(UNIX/Linuxのみ) $HOME(ホームディレクトリ)
↑
環境変数またはレジストリTNS_ADMINで指定したディレクトリ
↑
システムレベルの設定ファイル(UNIX/Linuxのみ)Linux:/etc
↑
デフォルトの設定ファイル Windows:\network\admin UNIX/Linux: /network/admin
プロとしてのOracleアーキテクチャ入門 Oracle現場主義 CHAPTER 20 基本的な接続形態とNet Servicesの構成 - 設定ファイルを読み込む順序 より抜粋 上のほうが優先順位が高い
任意のTNSファイルを使用したい場合、ツール -> プリファレンス -> データベース -> 拡張 のTnsnamesディレクトリを設定する。
ローカル/Bequeath
Bequeathとは何なのか。SQL Developerのマニュアルによると、
using bequeath protocol: if the client and database exist on the same computer, then a client connection can be passed directly to a dedicated server process without going through the listener
bequeathプロトコルの使用:もしクライアントとデータベースが同一マシン上にあるとき、クライアントのコネクションはリスナーを経由することなく専用サーバのプロセスへ直接渡される。
SQL Developer 3.1 マニュアル Create/Edit/Select Database Connection より抜粋 後半部分は俺の適当な訳
windowsにOracleをインストールすると、デフォルトではインスタンスとリスナーはセットで起動するので、コレを試すにはOracleを起動したあとサービスからリスナーだけ停止するなどする必要がある。
v$session_connect_infoでは下記のように現れる。
NETWORK_SERVICE_BANNER | CLIENT_OCI_LIBRARY | CLIENT_DRIVER |
---|---|---|
Oracle Bequeath NT Protocol Adapter for 32-bit Windows(後略) | Home-based | jdbcoci |
どうやって接続してるのかやや謎な感のあるBequeathプロトコルだが、CHAPTER 02 クライアントアプリケーションとサーバープロセス - プロとしてのOracleアーキテクチャ入門 や OTN Discussion Forums : Why can I connect locally without connect string or listener? を読むところによると、リスナーがしているのと同等のことをローカルでやってくれている、ということらしい。