sql >> Database >  >> RDS >> Oracle

Locatie van het relevante tnsnames.ora-bestand bepalen

Volgens Oracle worden deze locaties doorzocht op tnsnames.ora , resp. sqlnet.ora en ldap.ora :

  1. Oracle Net-bestanden in huidige werkmap (PWD/CWD)
  2. TNS_ADMIN Sessie gedefinieerd of door een door de gebruiker gedefinieerd script
  3. TNS_ADMIN gedefinieerd als een globale omgevingsvariabele
  4. TNS_ADMIN gedefinieerd in het register
  5. Oracle Net-bestanden in %ORACLE_HOME/network|net80\admin (Standaardlocatie van Oracle)

Ik weet echter niet zeker of elke toepassing/driver deze lijst volgt. Ik heb deze lijst van Oracle Document 111942.1 die verwijst naar Oracle 9i, dus het kan verouderd zijn.

In de Database Net Services Administrator's Guide is de volgorde

  1. TNS_ADMIN gedefinieerd door omgevingsvariabele
  2. TNS_ADMIN gedefinieerd in het register (indien TNS_ADMIN omgevingsvariabele is niet aanwezig)
  3. %ORACLE_HOME%/network/admin directory (indien TNS_ADMIN omgevingsvariabele is niet aanwezig)

Ik zou aanraden om een ​​omgevingsvariabele te definiëren voor TNS_ADMIN en gebruik slechts één tnsnames.ora-bestand. Controleer voor de zekerheid ook uw registerwaarden.

Als uw bestanden niet . zijn bevindt zich in %ORACLE_HOME%\network\admin , raad ik aan om er een symbolische link voor te maken - gewoon om op de zeer . te zijn veilige kant, bijv. mklink /d %ORACLE_HOME%\network\admin c:\Oracle\common\settings\admin

Nog een opmerking, je hoeft niet te "spelen" met je tnsnames.ora-bestand. Met Process Monitor van Microsoft Sysinternals kunt u elke bestandstoegang controleren, d.w.z. het filter zou zijn Path contains tnsnames

Bijwerken

Als ik een test op mijn machine uitvoer, krijg ik de volgende volgorde:

  1. Omgevingsvariabele TNS_ADMIN
  2. Registersleutel HKEY_CURRENT_USER\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
  3. Registersleutel HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN , resp. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN

    -> Alleen als TNS_ADMIN Omgevingsvariabele is niet ingesteld.

  4. %ORACLE_HOME%\network\admin
  5. Huidige map (die kan verschillen van de map waarin uw toepassing zich bevindt)
  6. Map waarin uw toepassing zich bevindt

Update 2

Het is duidelijk dat er geen fix-zoekopdracht is, dit varieert voor verschillende providers/drivers. Misschien hangt het ook af van de Oracle-versie.

Bijvoorbeeld de Oracle HTTP-server leest TNS_ADMIN instelling van opmn.xml config-bestand.

Een ander voorbeeld, voor ODP.NET Managed Driver (Oracle.ManagedDataAccess) bèta versie vond ik deze bestelling bij Oracle Managed en TNS Names :

  1. gegevensbronalias in het gedeelte 'dataSources' onder <oracle.manageddataaccess.client> sectie in het .NET-configuratiebestand (d.w.z. machine.config , web.config , user.config ).
  2. gegevensbronalias in de tnsnames.ora bestand op de locatie gespecificeerd door TNS_ADMIN in het .NET-configuratiebestand.
  3. gegevensbronalias in de tnsnames.ora bestand aanwezig in dezelfde map als de .exe .
  4. gegevensbronalias in de tnsnames.ora bestand aanwezig op %TNS_ADMIN%
    (waar %TNS_ADMIN% is een instelling voor een omgevingsvariabele).
  5. gegevensbronalias in de tnsnames.ora bestand aanwezig op %ORACLE_HOME%\network\admin
    (waar %ORACLE_HOME% is een instelling voor een omgevingsvariabele).

In officiële documentatie (12c Release 4 (12.1.0.2.4)) staat:

  1. gegevensbronalias in de dataSources sectie onder <oracle.manageddataaccess.client> sectie in het .NET-configuratiebestand (d.w.z. machine.config , web.config , user.config ).
  2. gegevensbronalias in de tnsnames.ora bestand op de locatie gespecificeerd door TNS_ADMIN in het .NET-configuratiebestand. Locaties kunnen bestaan ​​uit absolute of relatieve directorypaden.
  3. gegevensbronalias in de tnsnames.ora bestand aanwezig in dezelfde map als de .exe .

Op basis van enkele tests die ik heb gemaakt met ODP.NET Managed Driver (4.121.2.0) duurt het echter %ORACLE_HOME%\network\admin en TNS_ADMIN Omgevingsvariabele in acht genomen. Sloten zoals de documentatie is niet 100% correct.



  1. Problemen met transactiereplicatie van SQL Server oplossen

  2. Moeten we niet null opgeven voor de primaire sleutel? Oracle/SQL

  3. Oracle SQL-ontwikkelaar en PostgreSQL

  4. Werken met MySQL-database-engines