ORA-12154 kon de opgegeven verbindings-ID niet oplossen

Ik ben overgestapt op de 64-bits Windows 7 en heb een eenvoudige web-app gemaakt om de verbinding met de database te testen. Ik gebruik VS 2010 – gewoon asp.net-webproject en ik voer de applicatie uit vanuit VS.

Ik krijg deze foutmelding:
“ORA-12154 kon de opgegeven verbindings-ID niet oplossen”

Ik heb ook een voorbeeldconsoletoepassing die de verbinding met de database test, en het werkt prima.

Na wat gegoogled te hebben, ontdekte ik dat veel berichten online verwijzen naar machtigingen, dus ik heb mijn C:/Oracle-machtigingen ingesteld op lezen/schrijven/uitvoeren voor mijn ASP.net-account, NETWERKSERVICE, COMPUTERNAAM. Dat lost het probleem nog steeds niet op. Ik heb gecontroleerd of mijn webapp wordt uitgevoerd onder mijn domein\gebruikersnaamaccount en dat dit account de rechten heeft om te lezen/schrijven/uitvoeren naar de map C:\Oracle.

Ik heb zelfs mijn VS opnieuw geïnstalleerd om er zeker van te zijn dat het in C:\Program Files staat in plaats van C:\Program Files(x86)

Enig idee waarom mijn web-app de verbindingsreeks niet ziet? (terwijl de console-app dat wel doet)
Ik weet niet zeker wat ik nog meer kan doen.


Antwoord 1, autoriteit 100%

Ik ga ervan uit dat je het bestand tnsnames.ora gebruikt om je beschikbare databaseservices op te geven. Als dat zo is, hebben verbindingsfouten meestal twee dingen.

  1. De toepassing kan het TNS-item dat u in de verbindingsreeks hebt opgegeven niet vinden.

  2. Het TNS-item is gevonden, maar het IP-adres of de host is niet correct in het bestand tnsnames.ora.

Om uit te breiden op nummer 1 (wat volgens mij jouw probleem is). Wanneer u Oracle vertelt om verbinding te maken met iets als:

sqlplus user/pass@service

De service is gedefinieerd in het bestand tnsnames.ora. Als ik probeer verbinding te maken met een service die niet is gedefinieerd in mijn tnsnames.ora, krijg ik de foutmelding die je krijgt:

[sodonnel@home ~]$ sqlplus sodonnel/sodonnel@nowhere

SQL*Plus: Release 11.2.0.1.0 Production on Mon Oct 31 21:42:15 2011
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

Dus je moet een paar dingen controleren:

  1. Is er een tnsnames.ora-bestand – ik denk van wel omdat je console verbinding kan maken
  2. Is er een vermelding in het bestand voor de service – ik denk ook ja als de console verbinding maakt
  3. Kan de toepassing de tnsnames.ora vinden?

Uw probleem is misschien wel nummer 3 – wordt de toepassing uitgevoerd als een andere gebruiker dan wanneer u de console uitvoert?

Oracle zoekt naar het bestand tnsnames.ora in de map die is gedefinieerd in de omgevingsvariabele TNS_ADMIN – Als u als verschillende gebruikers werkt, is de omgevingsvariabele TNS_ADMIN misschien niet ingesteld en kan het bestand daarom niet worden gevonden?


Antwoord 2, autoriteit 21%

Had een soortgelijk probleem, alleen mijn web-app was in orde en het was SQLPlus dat me problemen gaf om verbinding te maken, en de ORA-12154 could not resolve the connect identifier specified-fout niet oplossen. Ik had 11g en 12 Oracle-clients geïnstalleerd. Mijn omgevingsvariabelen waren allemaal ingesteld om naar mijn 12instantie te wijzen:

  • ORACLE_HOME= C:\oracle\product\12
  • PATH= C:\oracle\product\12\bin;....
  • TNS_ADMIN= C:\oracle\product\12\network\admin

Er is ook een registervermelding vereist bij HKLM\Software\Oracle\KEY_OraClient12Home1, een tekenreeksvermelding van TNS_ADMINmet hetzelfde pad als de omgevingsvariabele.

Ik heb een tnsnames.ora op zowel C:\oracle\product\11\network\adminals C:\oracle\product\12\network\admin. Voor zover ik weet, hadden zowel mijn web-app als de 12 SQLPlus-client die ik gebruikte alle 12-versievariabelen moeten gebruiken.

Mijn stappen voor probleemoplossing:

  • Verander alle bovenstaande omgevingsvariabelen van 12in 11.
  • Maak verbinding met 11g’s SQLPlus (werkt!)
  • Verander alle omgevingsvariabelen hierboven terug van 11in 12.
  • Maak opnieuw verbinding met 12’s SQLPlus (werkt!)

Dus ik weet niet echt waardoor 12’s SQLPlus stopte met verbinden, maar dit soort reset kan voor iemand werken, dus dacht ik het hier te documenteren.


Antwoord 3, autoriteit 17%

Er kunnen zoveel problemen zijn, maar als je oracle 10g gebruikt, verwijder dan oracle 10g en verwijder ook de waarde uit het register en installeer oracle 11g. Maar als je oracle 11g gebruikt, ga dan eerst in het register kijken of het naar de juiste home verwijst. Soms kan er meer dan één huis zijn omdat u sql developer steeds opnieuw installeert. In dat geval kunt u ofwel de onnodige home-registerwaarde verwijderen of u kunt het tns- en sql.net-bestand aan al die home-bestanden toevoegen, dat zou het probleem kunnen oplossen. Ik heb de mijne op die manier opgelost.


Antwoord 4, autoriteit 17%

Ik had hetzelfde probleem. In mijn geval gebruikte ik een webservice die was gebouwd met AnyCPU-instellingen. Omdat de WCF 32-bits Oracle-gegevenstoegangscomponenten gebruikte, gaf het dezelfde fout toen ik het probeerde te bellen vanaf een consoleclient. Dus toen ik de WCF-service compileerde met behulp van de x86-gebaseerde instelling, kon de client met succes gegevens van de webservice ophalen.

Als u compileert als “Elke CPU” en draait op een x64-platform, kunt u geen 32-bits dll’s laden (wat in ons geval de Oracle Data Access-componenten waren), omdat onze app dat niet was gestart in WOW64 (Windows32 op Windows 64). Dus om de 32-bits afhankelijkheid van Oracle Data Access-componenten mogelijk te maken, compileer ik de webservice met Platformtarget van x86 en dat loste het voor mij op

Als alternatief als u 64-bits ODAC-stuurprogramma’s op de computer hebt geïnstalleerd waardoor het probleem ook is verholpen.


Antwoord 5, autoriteit 17%

Ik heb een Entity Framework-webtoepassing die werkt op mijn lokale computer, maar deze fout verschijnt wanneer deze naar een andere omgeving wordt gepusht. Er zijn andere niet-Entity Framework-applicaties die werken, en ik kan verbinding maken met sqlplus.

Het gebruik van sysinternals Process Monitor geeft aan dat het tns-namenbestand niet correct wordt geladen:

tnsnames.ora status NAAM NIET GEVONDEN

Volgend op de documentatiedie ik heb geprobeerd om een ​​sectie toe te voegen die de locatie van het tnsnames-bestand als volgt aangeeft:

<configuration>
  <configSections>
    <section name="oracle.manageddataaccess.client"
      type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  </configSections>
  <oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name="TNS_ADMIN" value="C:\Oracle\product\12.1.0\client_1\Network\Admin"/>
      </settings>
    </version>
  </oracle.manageddataaccess.client>
<configuration>

Dit resulteerde echter in een onmiddellijke 500 serverfout.

Verder onderzoek wees uit dat de dll die ik bij de webapplicatie inpakte, versie 4.122.1.0 was, terwijl de Oracle-clientomgeving die op de machine was geïnstalleerd 4.121.2.0 was. Zoals uitgelegd in de Oracle EntityFramework-pakketdocumentatie

Opmerking: als uw toepassing een webtoepassing is en het bovenstaande item is toegevoegd aan een web.config en dezelfde configuratiesectie-handler voor “oracle.manageddataaccess.client” bestaat ook in machine.config maar de kenmerkwaarden “Versie” zijn anders, een foutmelding van “Er is een dubbele ‘oracle.manageddataaccess.client’ sectie gedefinieerd.” tijdens runtime kan worden waargenomen. Als dit het geval is, moet de handler-vermelding in de configuratiesectie in machine.config voor “oracle.manageddataaccess.client” worden verwijderd uit machine.config voor de webtoepassing om deze fout niet tegen te komen. Maar gezien het feit dat er andere toepassingen op de machine kunnen zijn die afhankelijk zijn van dit item in machine.config, moet deze handler-item in de configuratiesectie mogelijk worden verplaatst naar alle .NET-configuratiebestanden van de toepassing op die machine die ervan afhankelijk zijn.

Ik heb geprobeerd een aparte versiesectie toe te voegen aan .NET machine.config zonder succes (er bestond een sectie voor versie 4.121.2.0 en ik heb een sectie toegevoegd voor versie 4.122.1.0). Nadat ik de sectie “oracle.manageddataaccess.client” uit de machine.config had verwijderd, loste de bovenstaande toevoeging aan de web.config ORA-12154 op.

Samenvatting van oplossing #1:

  1. Verwijder “oracle.manageddataaccess.client” uit .NET machine.config
  2. Geef de TNS_ADMIN configuratie-instelling in web.config zoals hierboven

Oplossing 2

Tijdens het onderzoeken van dit probleem ontdekte ik dat de omgevingsvariabele TNS_ADMIN niet was ingesteld. Ik heb een nieuwe omgevingsvariabele gemaakt met de naam TNS_ADMIN en de waarde ingesteld op “C:\Oracle\product\12.1.0\client_1\Network\Admin”. Ik heb de wijzigingen in web.config verwijderd en de sectie “oracle.manageddataaccess.client” uit .NET machine.config verwijderd, maar ik heb nog steeds ORA-12154 ontvangen. Pas nadat ik de machine opnieuw had opgestart, loste dit het probleem op.

Samenvatting van oplossing #2:

  1. Maak een nieuwe omgevingsvariabele met de naam TNS_ADMIN en stel de waarde in op “C:\Oracle\product\12.1.0\client_1\Network\Admin”
  2. Herstart machine

Oplossing 3

Ik heb een vermelding voor de juiste versie in het register toegevoegd en dit loste het probleem op:

HKLM\Software\Wow6432Node\Oracle\ODP.NET.Managed\4.121.2.0  

De naam van de sleutel is TNS_ADMINen dit verwijst naar de map met het tnsnames-bestand:

C:\Oracle\product\12.1.0\client_1\network 

Niet de map C:\Oracle\product\12.1.0\client_1\network\admin.


Antwoord 6, autoriteit 8%

Als je LDAP gebruikt, zorg er dan voor dat de omgevingsvariabele “TNS_ADMIN” bestaat en verwijst naar de map met het bestand “ldap.ora”.

Als deze variabele niet bestaat, maakt u deze aan en start u Visual Studio opnieuw.


Antwoord 7, autoriteit 8%

Nog een irritant fouttype dat ik ben tegengekomen in Oracle 11: vermeldingen in tnsnames.ora die niet beginnen bij de eerste kolom van de regel (‘ XXX=(…)’ in plaats van ‘XXX=(.. .)’) en worden samen met het voorgaande item geparseerd, waardoor het misvormd is.

Net als vervangen of verkeerd geplaatste tnsnames.ora-bestanden, is dit type probleem eenvoudig te diagnosticeren met het opdrachtregelprogramma tnsping: u geeft het de naam van een tnsnames.ora-item en het geeft de volledige tekst van zijn definitie.


Antwoord 8, autoriteit 4%

Laat me alsjeblieft herhalen wat Stephen zei, aangezien ik het de eerste keer zelf heb gemist. De omgevingsvariabele TNS_ADMINen ORACLE_HOMEis ingesteld op C:\instantclient_11_2 en het bestand th tnsnames.orabevindt zich in daar. Het antwoord gevonden op deze link.


Antwoord 9, autoriteit 4%

Als uw wachtwoord @ bevat, moet u dit wijzigen, de meeste Oracle-producten accepteren het @-teken in het wachtwoord niet


Antwoord 10

gebruik procesmonitor en zoek naar naam niet gevonden log voor tnsnames.ora bestand.

controleer uw omgevingsvariabelen. indien niet geldig, verwijder dan alle oracle-clients en installeer ze opnieuw.


Antwoord 11

Ik had deze fout in Visual Studio 2013, met een SSIS-project. Ik heb Project, Properties, Debugging, Run64BitRuntime = falseingesteld en toen werd het SSIS-pakket uitgevoerd. Toen ik het pakket echter op de server implementeerde, moest ik de waarde instellen op true (Server is 64 bit Windows 2012 / Sql 2014).

Ik denk dat de redenering hierachter is dat Visual Studio een 32-bits applicatie is.


Antwoord 12

Dit is een oude vraag, maar de nieuwste installatieprogramma’s van Oracle zijn geen verbetering, dus ik bevond me onlangs weer in dit moeras, een paar dagen ronddobberend …

Mijn scenario was SQL Server 2016 RTM. 32-bit Oracle 12c Open Client + ODAC werkte uiteindelijk prima voor Visual Studio Report Designer en Integration Services-ontwerper, en ook SSIS-pakketten die via SQL Server Agent werden uitgevoerd (met 32-bits optie). 64-bits werkte prima voor Report Portal bij het definiëren en testen van een gegevensbron, maar het uitvoeren van de rapporten gaf altijd de gevreesde “ORA-12154”-fout.

Mijn uiteindelijke oplossing was om over te schakelen naar een EZCONNECT-verbindingsreeks – dit vermijdt de TNSNAMES-rommel helemaal. Hier is een link naar een gedetailleerde beschrijving, maar het is eigenlijk gewoon: host:port/sid

http://www.oracledistilled.com/oracle-database/oracle-net/using-easy-connect-ezconnect-naming-method-to-connect-to-oracle-databases/

Als het iemand in de toekomst helpt (of als ik hier weer mee vastloop), zijn hier mijn Oracle-installatiestappen (de volledige horror):

Installeer Oracle-stuurprogramma’s: Oracle Client 12c (32-bit) plus ODAC.

a. Download en pak de volgende bestanden uit van http ://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.htmlen http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html):

ik. winnt_12102_client32.zip

ii. ODAC112040Xcopy_32bit.zip

b. Voer winnt_12102_client32\client32\setup.exe uit. Kies bij Installatietype Beheerder. Voer voor de installatielocatie C:\Oracle\Oracle12 in. Accepteer andere standaardinstellingen.

c. Start een opdrachtprompt als beheerder en wijzig de map (cd) naar uw ODAC112040Xcopy_32bit-map.

d. Voer het commando in: install.bat all C:\Oracle\Oracle12 odac

e. Kopieer het tnsnames.ora bestand van een andere machine naar deze mappen: *

ik. C:\Oracle\Oracle12\network\admin *

ii. C:\Oracle\Oracle12\product\12.1.0\client_1\network\admin *

Oracle Client 12c (x64) plus ODAC installeren

a. Download en pak de volgende bestanden uit van http ://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.htmlen http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html):

ik. winx64_12102_client.zip

ii. ODAC121024Xcopy_x64.zip

b. Voer winx64_12102_client\client\setup.exe uit. Kies bij Installatietype Beheerder. Voer voor de installatielocatie C:\Oracle\Oracle12_x64 in. Accepteer andere standaardinstellingen.

c. Start een opdrachtprompt als beheerder en wijzig de map (cd) naar de map C:\Software\Oracle Client\ODAC121024Xcopy_x64.

d. Voer het commando in: install.bat all C:\Oracle\Oracle12_x64 odac

e. Kopieer het tnsnames.ora bestand van een andere machine naar deze mappen: *

ik. C:\Oracle\Oracle12_x64\network\admin *

ii. C:\Oracle\Oracle12_x64\product\12.1.0\client_1\network\admin *

* Als u de EZCONNECT-methode gebruikt, zijn deze stappen niet vereist.

De ODAC-installaties zijn lastig en obscuur – dankzij Dan English die me de methode (hierboven gedetailleerd beschreven) daarvoor gaf.


Antwoord 13

Deze fout (en ook ORA-6413: Verbinding niet open) kan ook worden veroorzaakt door haakjes in het uitvoerbare pad van de toepassing en een fout in de oracle-clientbibliotheken van 10.2.0.1 of lager.

U moet uw oracle-clientbibliotheek upgraden of het uitvoerbare pad wijzigen.

Meer details zie:


Antwoord 14

Gebruik deze link.on Microsoft Support

Ik heb toestemming gegeven aan de IUSR_MachineName-gebruiker in de oracle-thuismap en ik heb het probleem kunnen oplossen


Antwoord 15

In mijn geval was de reden voor deze fout dat ik het bestand tnsnames.oraonder client_32\NETWORK\ADMIN

miste

Other episodes