很多oracle产品都有自己的TNS文件,如果你的系统里装了多个Oracle的产品的话,那么客户端连instance的时候,到底是使用那个tnsnames.ora呢?这个时候就需要看TNS_ADMIN这个参数了。


 


Question: What is the tns_admin parameter and how do I use tns_admin to define a common location for my TNS files?


Answer:  The tns_admin parameter determines the location of the tns administration files (e.g. tnsnames.ora and listener.ora, etc.) 


The tns_admin parameter is super useful on servers with many databases on different release levels (hence different $ORACLE_HOME directories) because all databases tns_admin values can be set to a single location, allowing a single set of SQL*Net files for all databases on the server. 

Without the tns_admin variable, each instance would have it's own set of TNS files in the $ORACLE_HOME/network/admin directory.


查看方法:命令行


C:\Documents and Settings\ptian>set TNS_ADMIN


TNS_ADMIN=D:\oracle\product\10.1.0\Db_1\NETWORK\ADMIN


这就表示客户端会从D:\oracle\product\10.1.0\Db_1\NETWORK\ADMIN下读取TNS的设置


 



修改方法:


有两个地方可以修改,一个是注册表,一个是系统环境变量。


注册表的位置:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\TNS_ADMIN


系统环境变量的优先级高于注册表,如果设置了环境变量,那么就会忽略注册表的值。