Oracle - What TNS Names file am I using?

前端 未结 11 620
长发绾君心
长发绾君心 2020-12-07 13:50

Sometimes I get Oracle connection problems because I can\'t figure out which tnsnames.ora file my database client is using.

What\'s the best way to figure this out?

相关标签:
11条回答
  • 2020-12-07 14:32

    There is another place where the TNS location is stored: If you're using Windows, open regedit and navigate to My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1 where KEY_OraClient10_home1 is your Oracle home. If there is a string entry called TNS_ADMIN, then the value of that entry will point to the TNS file that Oracle is using on your computer.

    0 讨论(0)
  • 2020-12-07 14:36

    Codeslave asks "Shouldn't it always be "$ORACLE_ HOME/network/admin/tnsnames.ora"? The answer is no, it isn't. Consider these two invocations of tnsping on the same machine:

    C:\Documents and Settings\me>D:\Oracle\10.2.0_DB\BIN\tnsping orcl
    
    TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 09-OCT-2
    008 14:30:12
    
    Copyright (c) 1997,  2007, Oracle.  All rights reserved.
    
    Used parameter files:
    D:\Oracle\10.2.0_DB\network\admin\sqlnet.ora
    
    
    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx
    )(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))
    
    OK (40 msec)
    
    C:\Documents and Settings\me>tnsping orcl
    
    TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 09-OCT-2
    008 14:30:21
    
    Copyright (c) 1997, 2005, Oracle.  All rights reserved.
    
    Used parameter files:
    D:\oracle\10.2.0_Client\network\admin\sqlnet.ora
    
    
    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
    (HOST = XXXX)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))
    OK (20 msec)
    
    C:\Documents and Settings\me>
    

    Note the two different parameter file locations, that are dependent on which tnsping executable you're running (and perhaps where it's being run from). For tnsnames-based oracle networking, using the TNS_ADMIN variable is the only way to ensure you're getting a consistent tnsnames.ora file. (NOTE: Windows-centric answer)

    0 讨论(0)
  • 2020-12-07 14:37

    Not direct answer to your question, but I've been quite frustrated myself trying find and update all of the tnsnames files, as I had several oracle installs: Client, BI tools, OWB, etc, each of which had its own oracle home. I ended up creating a utility called TNSNamesSync that will update all of the tnsnames in all of the oracle homes. It's under the MIT license, free to use here https://github.com/artybug/TNSNamesSync/releases

    The docs are here: https://github.com/artchik/TNSNamesSync/blob/master/README.md

    This is for Windows only, though.

    0 讨论(0)
  • 2020-12-07 14:41

    For Windows: Filemon from SysInternals will show you what files are being accessed.

    Remember to set your filters so you are not overwhelmed by the chatty file system traffic.

    Filter Dialog

    Added: Filemon does not work with newer Windows versions, so you might have to use Process Monitor.

    0 讨论(0)
  • 2020-12-07 14:44

    Shouldn't it always be "$ORACLE_ HOME/network/admin/tnsnames.ora"? Then you can just do "echo $oracle_ home" or the *nix equivalent.

    @Pete Holberton You are entirely correct. Which reminds me, there's another monkey wrench in the works called TWO_ TASK

    According http://www.orafaq.com/wiki/TNS_ADMIN
    TNS_ADMIN is an environment variable that points to the directory where the SQL*Net configuration files (like sqlnet.ora and tnsnames.ora) are located.

    0 讨论(0)
提交回复
热议问题