Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: Coriandolo - Ottobre 02, 2021, 11:02:04 pm

Titolo: Oracle errore 12504
Inserito da: Coriandolo - Ottobre 02, 2021, 11:02:04 pm
Ho creato un'applicazione che tenta di connettersi ad un database oracle. Sul mio pc funziona benissimo, ho installato oracle e in localhost riesco a connettermi.
Il problema è sul pc d'ufficio che tento di connettermi in remoto ad oracle. Ottengo quest'errore:
ORA-12504
Descrizione: TNS: al listener non è stato assegnato SERVICE_NAME in CONNECT_DATA

Ho cambiato oci.dll con quello più aggiornato e mi da OCI.DLL ERROR. Se metto oci.dll 64bit mi dice che non è compatibile.
Insomma non riesco a capire il problema dov'è. Va configurato qualcosa nel database che accetti le connessioni dalla mia applicazione?
Titolo: Re:Oracle errore 12504
Inserito da: DragoRosso - Ottobre 03, 2021, 01:40:26 pm
Spero che per te abbia un senso:

Citazione
Database: 11g Rilascio 1
Codice errore: ORA-12504
   Descrizione: TNS: al listener non è stato assegnato SERVICE_NAME in CONNECT_DATA
Causa: Il listener non è stato configurato con un servizio predefinito e SERVICE_NAME mancava dal CONNECT_DATA ricevuto dal listener.
Azione: Le possibili soluzioni sono: - Configurare il parametro DEFAULT_SERVICE in LISTENER.ORA con un nome di servizio valido. Ricarica il file dei parametri del listener usando ricaricare []. Questo dovrebbe essere fatto dall'amministratore di LISTENER. - Se si utilizza un nome di servizio, verificare che il descrittore di connessione corrispondente al nome del servizio in TNSNAMES.ORA abbia un componente SERVICE_NAME o SID in CONNECT_DATA.
Titolo: Re:Oracle errore 12504
Inserito da: nomorelogic - Ottobre 03, 2021, 02:50:33 pm
Puoi postare tnsnames.ora?

Edit:
Sia del tuo pc che quello in ufficio
Titolo: Re:Oracle errore 12504
Inserito da: Coriandolo - Ottobre 03, 2021, 05:31:56 pm
Ufficio:
Codice: [Seleziona]
SERVER01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.9)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )
 
SERVER02 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.9.9)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

Casa:
Codice: [Seleziona]
# tnsnames.ora Network Configuration File: C:\Oracle\18.0.0\dbhomeXE\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

LISTENER_XE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-5KC4KA6)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

Titolo: Re:Oracle errore 12504
Inserito da: nomorelogic - Ottobre 03, 2021, 06:28:04 pm
se non ho capito male:
oracle è installato in locale sul tuo pc di casa
in ufficio oracle è installato in 192.168.7.9 (oppure 192.168.9.9)

quando lavori sul tuo pc, la tua applicazione tenta la connessione con "XE" mentre nel tuo ufficio trovo dichiarati "SERVER01" e "SERVER02".
Su tutte e 3 le configurazioni c'è l'indicazione "(SERVICE_NAME = XE)" ma questo è per la comunicazione col listener e per ora non credo che influisca (in oracle ogni DB normalmente ha un suo servizio).

Quello che puoi provare a fare è di modificare TNSNAME.ORA nel client  in ufficio includendo anche la seguente dichiarazione (posto che oracle sia in 192.168.7.9):
Codice: [Seleziona]
XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.9)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

in conclusione non credo che il problema sia con oci.dll ma che si tratti di un problema di configurazione per far in modo che il client trovi il server
spero che la soluzione quì sopra funzioni al primo colpo, in alternativa devi provare altre configurazioni
ma il tuo problema è in TNSNAMES.ORA o nel listener
Titolo: Re:Oracle errore 12504
Inserito da: DragoRosso - Ottobre 03, 2021, 07:27:11 pm
Vorrei anche ricordare, magari è una informazione stupida, che ovviamente i server Oracle aziendali devono essere raggiungibili.

Sia che siano "proiettati" su Internet che su VPN è necessario che il PC di casa venga configurato correttamente per la rete e abbia i corretti privilegi (non è detto che un PC che accede alla rete aziendale possa anche "andare" su altri servizi non previsti).

Ciao
Titolo: Re:Oracle errore 12504
Inserito da: Coriandolo - Ottobre 03, 2021, 11:19:48 pm
Grazie a tutti ho capito il problema.
@nomorelogic grazie al tuo suggerimento sono riuscito a ragionare in maniera mirata trovando la soluzione. Era esattamente quello il problema, sbagliavo ad inserire il nome del DB. Anzichè mettere XE come nome DB dovevo mettere SERVER01. A mente stanca non è per niente facile superare certi intoppi che possono sembrare banali.
Titolo: Re:Oracle errore 12504
Inserito da: nomorelogic - Ottobre 04, 2021, 08:48:10 am
ottimo

certi intoppi capitano a tutti i programmatori, non c'è nulla da fare
poi oracle, secondo me, ci mette del suo a complicare le cose semplici  :D