collegamento OracleClient + TNSless con .NET
-
18-09-2019 - |
Domanda
Stiamo utilizzando System.Data.OracleClient e l'astratto classi base DbConnection, DbCommand (etc) per connettersi a Oracle.
Il collegamento funziona benissimo nelle nostre fasi di sviluppo. Durante messa in scena incontriamo l'errore ORA-12514: TNS: l'ascoltatore attualmente non sa di servizio richiesto nel descrittore di connessione
.Il nostro obiettivo era quello di connettersi senza una voce di TNS, e fornendo tutte le informazioni pertinenti nella stringa di connessione (www.connectionstrings.com/oracle#19)
Posso confermare che SQL Plus connettersi allo schema desiderata dal server di gestione temporanea (l'ascoltatore è in ascolto). L'entrata TNS agganciato in SQLPlus soddisfa tutte le credenziali della stringa di query in fase di costruzione.
SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));uid=myUsername;pwd=myPassword;
C'è un'installazione sul server abbiamo perso? Qualcosa che possiamo modificare?
Ogni aiuto è apprezzato.
Soluzione
Un SID non è un nome di servizio. A nome del servizio è di solito un nome di database completo, mentre un SID è un identificatore breve.
Un nome di servizio potrebbe essere dbname.company.com in tutta SID è dbname. Un'istanza può effettivamente avere diversi nomi di servizi ad esso associati, ma solo uno SID.
Cambia la SERVICE_NAME al SID nella stringa di connessione, o specificare il nome del servizio per l'opzione SERVICE_NAME.
Altri suggerimenti
Se non ricordo male, ho avuto lo stesso problema fino a quando sono passato a servirvi di Oracle e OracleDbConnection e OracleDbCommand. Quelli generici non sempre istanziare il corretto fornitore in tutti i casi.
Microsoft deprecato lo System.Data.OracleClient Si veda questo articolo: http://blogs.oracle.com/databaseinsider/2009/ 07 / microsoft_deprecates_systemdataoracleclient_net_developers_for_oracle_should_migrate_to_oracle_data_provider_for_net.html
Se il client Oracle è in versione 10+, è possibile utilizzare anche EZConnect (che sta per Easy Connect metodo di denominazione ). La stringa di connessione sarebbe quindi simile a questa:
"Data Source=MyHost:MyPort/MyServiceName;User ID=myUserName;Password=myPassword"
In combinazione con Oracle Instant client , rende l'uso di Oracle si sentono quasi professionale! ...