Domanda

A volte ho Oracle problemi di connessione in quanto io non riesco a capire che tnsnames.ora il mio file client di database che si sta utilizzando.

Qual è il modo migliore per capire questo?++felice per varie soluzioni di piattaforma.

È stato utile?

Soluzione

Oracle fornisce un programma di utilità chiamato tnsping:

R:\>tnsping someconnection

TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:38:07

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora

TNS-03505: Failed to resolve name

R:\>


R:\>tnsping entpr01

TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:39:22

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = **)
 (PROTOCOL = TCP) (Host = ****) (Port = 1521))) (CONNECT_DATA = (SID = ENTPR0
1)))
OK (40 msec)

R:\>

Questo dovrebbe mostrare ciò che il file che si sta utilizzando.L'utilità si trova in Oracle bin directory.

Altri suggerimenti

Per linux:

$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'open.*tnsnames.ora'

mostra qualcosa di simile a questo:

open("/opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora",O_RDONLY)=7

Modifica

$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'tnsnames.ora'

mostra tutti i percorsi dei file che stanno fallendo.

C'è un altro posto dove il TNS posizione è memorizzata:Se si utilizza Windows, aprire regedit e navigare My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1 dove KEY_OraClient10_home1 è Oracle casa.Se c'è una stringa di chiamata TNS_ADMIN, quindi il valore di tale voce, al punto da TNS file che Oracle sta utilizzando sul tuo computer.

Per Windows: Filemon da SysInternals vi mostrerà che cosa sono i file a cui si accede.

Ricordate di impostare i filtri in modo da non siete sopraffatti dalla loquace file di sistema traffico.

Filter Dialog

Aggiunto il: Filemon non funziona con le più recenti versioni di Windows, in modo che è possibile utilizzare Process Monitor.

Sulla mia macchina di sviluppo, ho tre diverse versioni del software client Oracle.Posso gestire il tnsnames.ora file in uno di loro.Le altre due, sono entrato in tnsnames.ora file:

ifile=path_to_tnsnames.ora_file/tnsnames.ora

In questo modo, se per qualche motivo sbagliato tnsnames.ora il file è utilizzato da un client, si finisce sempre in up-to-date versione.

Codeslave chiede "non Dovrebbe essere sempre "$ORACLE_ HOME/network/admin/tnsnames.ora"?La risposta è no, non è possibile.Considerare questi due invocazioni di tnsping sulla stessa macchina:

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>

Nota i due parametri diversi percorsi dei file, che dipendono da quali tnsping eseguibile che si sta eseguendo (e magari dove eseguito da).Per tnsnames-base oracle rete, utilizzando la TNS_ADMIN variabile è l'unico modo per assicurarsi che stai ricevendo un coerente tnsnames.ora il file.(NOTA:Windows-centrico risposta)

Per impostazione predefinita, tnsnames.ora si trova in $ORACLE_HOME/network/admin directory su sistemi operativi UNIX e nel ORACLE_HOME ete\directory di amministrazione, su sistemi operativi Windows.tnsnames.ora può anche essere memorizzati i seguenti percorsi:

Directory specificata dall'TNS_ADMIN variabile di ambiente (o valore del registro di sistema)

Sui sistemi operativi UNIX, globale directory di configurazione.Per esempio, il Sistema Operativo Solaris, questa directory è /var/opt/oracle

Se si dispone di più ORACLE_HOMES, essere consapevoli di quale stai utilizzando, come la posizione del tnsnames.ora il file può variare da un ORACLE_HOME per il prossimo.

Per la persona che ha menzionato il TWO_TASK, che viene utilizzato per impostare il valore predefinito del database il nome del servizio per la connessione (che potrebbe essere un database su un altro server).Il nome del servizio è impostato TWO_TASK è quindi cercato in tnsnames.ora file durante la connessione.

Non dovrebbe essere sempre "$ORACLE_ HOME/network/admin/tnsnames.ora"?Quindi si può solo fare "echo $oracle_ casa" o *nix equivalente.

@Pete Holberton Si sono del tutto corrette.Il che mi ricorda, c'è un'altra scimmia chiave nelle opere chiamato TWO_ ATTIVITÀ

Secondo http://www.orafaq.com/wiki/TNS_ADMIN
TNS_ADMIN è una variabile di ambiente che punti alla directory in cui SQL*Net file di configurazione (come sqlnet.ora e tnsnames.ora) si trovano.

strace sqlplus -L scott/tiger@orcl aiuta a trovare, .tnsnames.ora file /home/oracle per trovare il file che si vuole, invece di $ORACLE_HOME/network/admin/tnsnames.ora file.Grazie per la pubblicazione.

Il modo più semplice è probabilmente per controllare la PERCORSO variabile di ambiente del processo che esegue la connessione al database.Più probabile che il tnsnames.ora il file è in prima di Oracle directory bin nel path.. ete\admin.TNS_ADMIN variabile di ambiente o di un valore nel registro di sistema (per il corrente Oracle casa) può eseguire l'override di questo.

Utilizzo di filemon come suggerito da altri anche fare il trucco.

Non è una risposta diretta alla tua domanda, ma sono stato molto frustrato io che cerco di trovare e aggiornare tutti i file tnsnames, come ho avuto diverse oracle installa:Cliente, strumenti di BI, OWB, ecc, ognuno dei quali aveva il suo principale oracle.Ho finito per la creazione di un programma di utilità chiamato TNSNamesSync che consente di aggiornare tutti i tnsnames in tutti oracle case.E ' sotto licenza MIT, gratuito per uso qui https://github.com/artybug/TNSNamesSync/releases

I documenti sono qui:https://github.com/artchik/TNSNamesSync/blob/master/README.md

Questo è solo per Windows, anche se.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top