Avatar billede neocron Nybegynder
20. september 2007 - 22:28 Der er 10 kommentarer og
1 løsning

ORA-12560: TNS:protocol adapter error

Det var ikke længe I fik fred for mig i denne kategori ;)
Jeg har netop opdaget at PHP nægter at tilslutte til Oracle (det *har* virket).

Oracle: Oracle Express
PHP: version 5 m/Oracle extension

Det er sært, for jeg kan fint tilslutte via et testprogram jeg har skrevet i VB.net. Dette program kan køres uden problemer både lokalt på serveren og det kan også fint forbinde til den eksternt. Derfor undrer jeg mig lidt over at PHP brokker sig.

Når jeg laver denne test-kode:

$conn = ocilogon("oraclebruger", "minkode");
if(!$conn) {
    echo "<pre>";
    echo str_replace("\n", "<br>\n", var_dump(ocierror()));
    echo "</pre>";
}

Så får jeg følgende fejl:

array(4) {
  ["code"]=>
  int(12560)
  ["message"]=>
  string(37) "ORA-12560: TNS:protocol adapter error"
  ["offset"]=>
  int(0)
  ["sqltext"]=>
  string(0) ""
}

Jeg har søgt på Google efter mulige løsninger på denne fejl, heriblandt forslag såsom at lave en "set ORACLE_SID=XE" (jeg bruger Oracle Express). Der foreslås også "set LOCAL=XE".

Er der nogen der har erfaring med dette?
Avatar billede arne_v Ekspert
20. september 2007 - 22:33 #1
Hvad med:

$conn = oci_connect("oraclebruger", "minkode", "XE");

?
Avatar billede arne_v Ekspert
20. september 2007 - 22:34 #2
Hvordan ser din VB.NET connection string ud ?
Avatar billede neocron Nybegynder
20. september 2007 - 22:48 #3
$conn = oci_connect("oraclebruger", "minkode", "XE");

Giver samme resultat.
Jeg glemte i min iver at poste connection string. Den ser således ud:

Dim constr As String = "Data Source=(DESCRIPTION=" _
      + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=min_wan_ip)(PORT=1521)))" _
      + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)));" _
      + "User Id=oracle_bruger;Password=mit_password;"
Avatar billede arne_v Ekspert
20. september 2007 - 22:52 #4
Det er jo en usaedvanelig connection string.

Virker det hvis du putter hele DataSource vaerdien som 3. argument til oci_connect ?
Avatar billede neocron Nybegynder
20. september 2007 - 23:02 #5
Jeg vil gerne tro at den er usædvanlig.
Men jeg prøvede med f.eks.:

Data Source=MyOracleDB;Integrated Security=yes;
og
Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;Integrated Security=no;

og de virkede ikke
(http://www.connectionstrings.com/?carrier=oracle)

Jeg har prøvet at smide hele DataSource værdien (forsøgt både med og uden user og pass delen) uden held.

Til gengæld, når jeg bruger DataSource får jeg følgende fejl istedet:

TNS:could not resolve the connect identifier specified
Avatar billede arne_v Ekspert
20. september 2007 - 23:06 #6
$conn = oci_connect("oraclebruger", "minkode", "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=min_wan_ip)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)))");

?
Avatar billede neocron Nybegynder
20. september 2007 - 23:06 #7
Lige en rettelse.

$conn = ocilogon("bruger", "password"); = ORA-12560: TNS:protocol adapter error
$conn = ocilogon("bruger", "password", "XE"); = TNS:could not resolve the connect identifier specified

Det er ligegyldigt hvad man skriver som 3. parameter - den siger det samme. På nær, hvis jeg forsøger at angive min IP adresse, så siger den:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

Men okay.. det er så også en optional db string.
Avatar billede neocron Nybegynder
20. september 2007 - 23:09 #8
Arne, du er min redningsmand. Din

$conn = oci_connect("oraclebruger", "minkode", "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=min_wan_ip)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)))");

har fixet det!

Men er det virkelig ikke muligt at lave den lidt mere - skal vi kalde den overskuelig - end sådan en smørre? ;) Ikke at jeg klager, men man er vel lidt perfektionist :D
Avatar billede arne_v Ekspert
20. september 2007 - 23:13 #9
Det burde det vaere.

Hvis din tnsnames.ora indeholder:

mindb = (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=min_wan_ip)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)))

saa burde du kunne bruge:

$conn = oci_connect("oraclebruger", "minkode", "mindb");

og tilsvarende i .NET !

(husk og tag en kopi af den fil inden du gaar igang med at eksperimentere)
Avatar billede arne_v Ekspert
20. september 2007 - 23:13 #10
Og et svar fra mig.
Avatar billede neocron Nybegynder
20. september 2007 - 23:16 #11
Det vil jeg prøve at lege med.
Indtil da vil jeg sige tusind tak for hjælpen og bede dig smide et yderst velfortjent svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester