Domanda

Il mio obiettivo è connettermi a un'istanza Oracle 9i dalla mia macchina OS X.Ho seguito le istruzioni di configurazione Qui e li ho superati senza errori (alla fine).Tuttavia, sto scoprendo che sqlplus non è in grado di connettersi:

[ ethan@gir ~ ]$ sqlplus xxx/yyy@zzz

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Apr 17 10:13:08 2009

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Luuuuuuu aspetta...

ERROR:
ORA-12170: TNS:Connect timeout occurred

Enter user-name: xxx
Enter password: 
ERROR:
ORA-12162: TNS:net service name is incorrectly specified

Enter user-name:

Mio tnsnames.ora file...

zzz =
  (DESCRIPTION = 
    (ADDRESS_LIST =
      (ADDRESS =
        (PROTOCOL = TCP)
        (HOST = dbhost)
        (PORT = 1521))
    )
  (CONNECT_DATA =
    (SERVICE_NAME = zzz)
  )
)

Forse c'è una variabile env che deve essere impostata?


AGGIORNAMENTO

In grado di eseguire il ping della macchina host DB senza problemi.

Provato...

sqlplus xxx/yyy@//dbhost/zzz

Avuto...

ERROR:
ORA-12170: TNS:Connect timeout occurred

Ho provato a usare SID invece di SERVICE_NAME in tnsnames.ora.Non sembrava cambiare il risultato.Tornato a SERVICE_NAME.


Ultime due voci in sqlnet.log...

***********************************************************************
Fatal NI connect error 12170.

  VERSION INFORMATION:
    TNS for MacOS X Server: Version 10.2.0.4.0 - Production
    TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production
  Time: 17-APR-2009 10:33:06
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12535
    TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS
    ns secondary err code: 12560
    nt main err code: 505
    TNS-00505: Message 505 not found; No message file for product=network, facility=TNS
    nt secondary err code: 60
    nt OS err code: 0


***********************************************************************
Fatal NI connect error 12170.

  VERSION INFORMATION:
    TNS for MacOS X Server: Version 10.2.0.4.0 - Production
    TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production
  Time: 17-APR-2009 11:24:08
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12535
    TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS
    ns secondary err code: 12560
    nt main err code: 505
    TNS-00505: Message 505 not found; No message file for product=network, facility=TNS
    nt secondary err code: 60
    nt OS err code: 0

RISPOSTA PARZIALE

Grazie a tutti per le vostre risposte.Sono stati utili.Ho scoperto che c'era un problema DNS.Sono riuscito a eseguire il ping in base al nome host, quindi ho pensato che avrebbe dovuto funzionare bene.Ho provato anche l'I.P.indirizzo.Si è scoperto che avevo bisogno di interno IP "10.1.x.x"indirizzo affinché funzioni su questa macchina OS X (ma il nome host va bene su Windows).

A questo punto posso connettermi con...

sqlplus xxx/yyy@//INTERNAL_IP/zzz

Tuttavia, con questi valori immessi in tnsnames.ora, questo continua a non funzionare...

sqlplus xxx/yyy@zzz

...

ORA-12154: TNS:could not resolve the connect identifier specified

Ho cercato un file tnsnames.ora di esempio che fosse vicino a ciò di cui avevo bisogno e ho copiato il contenuto nel mio file.Modificati i parametri e ora funziona tutto.Non sono sicuro del motivo per cui il mio non funzionasse.

È stato utile?

Soluzione

Dal momento che si sta utilizzando un client 10g, è consigliabile utilizzare la sintassi Easy Connect invece:

export TWO_TASK=//dbhost/zzz
sqlplus xxx/yyy

, o semplicemente in questo modo:

sqlplus 'xxx/yyy@//dnhost/zzz'

Anche controllare i punti ORACLE_HOME nella cartella giusta: tnsnames.ora viene cercato in $ORACLE_HOME/network/admin/tnsnames.ora

Altri suggerimenti

I tuoi parentesi sembrano corrette.

Provare a utilizzare il SID:

Il seguente è un esempio di un file tnsnames.ora:

IDENTIFIER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP) (HOST = userid.myhosteddb.net)(PORT = 1521))
    )
    (CONNECT_DATA = (SID = odb))
  )

leggere su SID qui.

Puoi usare

sqlplus user/password@servicename_host

se non riesci a connetterti puoi usare

sqlplus user/password@(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))

se stai usando Linux un altro sistema operativo *Nix devi usare le virgolette altrimenti le () vengono interpretate dalla shell

per esempio

sqlplus user/password@'(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))'

Non è probabilmente un file sqlnet.log generato nella directory di lavoro. Questo può aiutare o se si posta il suo contenuto potrebbe darci maggiori informazioni.

Nel tuo esempio, si sta cercando due cose diverse. Sulla riga di comando si è utilizzato "xxx / yyy @ zzz". Sembra che questo è trovare la voce "zzz" in tnsnames.ora con successo, ma il timeout indica che si sta facendo nessuna risposta dal server. Potete fare un ping dbhost successo?

Sul secondo tentativo appena immesso "xxx" per il nome utente; che ha un senso se non siete abituati a SQLPlus, ma come potete vedere non v'è alcun punto in cui si richiede il nome del database. Quindi, in questo caso si è cercato di connettersi a "xxx / yyy" senza un nome di servizio, che conduce al secondo errore. Questo significa solo non si dispone di un nome di servizio di default impostato. Quindi, questo errore viene da ingresso incompleta. (Si potrebbe inserire "xxx @ zzz" per il nome utente per specificare il nome del servizio a questo prompt. Si può effettivamente digitare l'intera stringa di connessione "xxx / yyy @ zzz" al prompt nome utente, se non ti dispiace l'essere la password visibile.)

Hai provato a usare telnet per arrivare alla porta aperta per assicurarsi che un firewall non stia bloccando voi? può essere la pena di provare telnet port-num host

Forse si imposta il vostro ambiente con la oraenv sceneggiatura?

Hai provato tnsping?

$ tnsping $ORACLE_SID

Forse aiuterà a confrontare l'output su una macchina che si connette all'uscita su una macchina che non riesce a connettersi. Almeno questo è quello che faccio appena prima di contattare il nostro DBA.

È possibile ottenere un po 'più in dettaglio su ciò che l'errore con il comando oerr:

$ oerr ora 12170
12170, 00000, "TNS:Connect timeout occurred"
// *Cause:  The server shut down because connection establishment or
// communication with a client failed to complete within the allotted time
// interval. This may be a result of network or system delays; or this may
// indicate that a malicious client is trying to cause a Denial of Service
// attack on the server.
// *Action: If the error occurred because of a slow network or system,
// reconfigure one or all of the parameters SQLNET.INBOUND_CONNECT_TIMEOUT,
// SQLNET.SEND_TIMEOUT, SQLNET.RECV_TIMEOUT in sqlnet.ora to larger values.
// If a malicious client is suspected, use the address in sqlnet.log to
// identify the source and restrict access. Note that logged addresses may
// not be reliable as they can be forged (e.g. in TCP/IP).

Ho avuto un problema simile e sembra che Oracle sqlplus era il problema!

Collegamento come una di queste opere:

   > sqlplus MyUsername/MyPassword@MyHostname:1521/MyServiceName
   > sqlplus MyUsername/MyPassword@//MyHostname:1521/MyServiceName

(la // è facoltativo prima del nome host). Tuttavia, lasciando fuori la password o sia l'utente / passaggio non riesce in questo modo:

    sqlplus @//MyHostname:1521/MyServiceName

    SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 2 15:59:49 2015

    Copyright (c) 1982, 2013, Oracle.  All rights reserved.

    SP2-0310: unable to open file "//MyHostname:1521/MyServiceName.sql"
    Enter user-name: MyUsername
    Enter password: MyPassword
    ERROR: 
    ORA-12162: TNS:net service name is incorrectly specified

Quindi, anche se sqlplus ti chiede il nome utente / password, sarà stupidamente esito negativo con un messaggio di errore fasullo se li si digita al prompt. Funziona solo se si inseriscono (entrambi!) All'inizio della stringa di connessione.

  

stupido Oracle !!!

FOLLOW QUESTO LINK PER PASSO PER INSTALLAZIONE FASE E METODI DI INSTALLAZIONE post .. Fate attenzione con esso.

E per connettersi con SQL più:

  1. nome utente verrà sistema COME DA istruzione data IN LINK SOPRA
  2. la password NON DEVE ESSERE tigre, ma quello che si imposta all'inizio dell'installazione

P.S: Non panico se trovate problemi (incompatibilità browser) che collega Oracle Enterprise Manager durante il test di installazione se il browser è Google Chrome. ha colpito la freccia pagina posteriore e la pagina seguente freccia per concordare i termini e facendo clic su OK.

Ho risolto questo problema sulla mia macchina in un giorno .. ma sarà una questione di un paio di antipasti per voi.

soruces: io sono Ingegnere informatico di scienza per lo più il codice in Java

Ho avuto lo stesso errore (ORA-12162: TNS: il nome di servizio di rete è specificato in modo non corretto), ma un motivo diverso (su Windows 7 Enterprise 64-bit). Spero che questo aiuta qualcuno:

I.T. al mio lavoro installato 32bit e 64bit di Oracle, e in base alla mia variabile PATH, la shell guardò nel percorso a 64 bit per SQLPLUS.exe rispetto al percorso a 32 bit.

I diversi percorsi utilizzare diversi file tnsnames.ora e non ho avuto la mia stringa di connessione nel percorso a 64 bit:

11.1.0 \ client_1_64bit \ rete Oracle \ prodotto \ \ admin \ tnsnames.ora

ho avuto solo la stringa di connessione in tnsnames.ora a 32 bit: Oracle \ product \ 11.1.0 \ client_1_32bit \ network \ admin \ tnsnames.ora

Inoltre, dal momento che ci sono stati più installazioni ORACLE ho dovuto togliere la variabile d'ambiente ORACLE_HOME in modo che entrambe le installazioni possono utilizzare diverse directory home.

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