2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【考察】Oracle Clientを何度もインストールするとどこのtnsnames.oraを使っているかわからなくなるという話

Posted at

はじめに

Oracleクライアント(ODP.NET)のバージョン違いを複数クライアントPCにインストールした際、どのOracle Homeにあるtnsnames.oraを使ってサービス名を解決しているのかが分からなく場合がある。
この記事では、どのtnsnames.oraが利用されているかを、各種設定情報を頼りに読み解く方法を解説しようと思う。
ただし、記事の内容は経験則で書かれているため、公式資料に基づいた内容ではない。その点は留意しておいてほしい。

Oracleクライアントをインストールした時のOracle Homeとレジストリの状態

初めてPC上にOracleクライアントをインストールした場合、デフォルトではCドライブ直下に以下のようなOralce Homeのフォルダが作製される。

image.png

同時にレジストリにもOracleの設定情報が書き込まれていることが確認できる。
image.png

Oracleクライアントを複数回インストールするとどうなるか

既にOracleクライアントがインストールされている環境に新しくOracleクライアントをインストールすると、フォルダ構成は以下のような状態になる。
image.png
レジストリにも新しく、Oracle Homeが追加されていることがわかる。
image.png

DLLはどこを指定しているか?

複数のOracle Homeが存在する状態でも、レジストリにはひとつのODP.NETしか登録されていない。
この配下にある.NET Framework 4+の構成(4.122.19.1)にDllPathというキーが存在している。
image.png

この値は"依存する非管理Oracle Clientバイナリのロード元を指定"を指定しているが、ここでいずれかのOracle Homeのbinフォルダが指定されているはずである。
binフォルダにはOracle.Keyというファイルが存在しているが、その中身は以下ような内容である。

Oracle.Key
SOFTWARE\ORACLE\KEY_OraClient19Home2

つまり、レジストリに定義されているどのOracle Homeを見に行くべきかが書かれていて、その配下のtnsnames.oraファイルを用いてサービス名を解決しているようである。
実際に以前試したところでは、この値をもう一つのOracle Homeの値に変更すると、そちらのtnsnames.oraが優先されることが確認できた。

環境変数で強制的に指定する方法

ここまで、どのtnsnames.oraを見ているのかを確認する方法を書いてきたが、実は強制的に見に行くtnsnames.oraを指定する方法がある。
その環境変数はTNS_ADMINである。TNS_ADMIN環境変数の値に、利用したいtnsnames.oraファイルの存在するフォルダパスを定義することで、レジストリの値に関わらずそのファイルを利用するように指定することできる。

image.png

参考サイト

https://www.shift-the-oracle.com/oracle-net/tnsnames.html
http://www.dba-oracle.com/t_windows_tnsnames.ora_file_location.htm
https://winofsql.jp/VA003334/infoboard_page.php?mid=oracle&id=040205003135

2
6
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
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?