2012-03-27 8 views
7

Je suis coincé avec la connexion à Oracle DB, j'ai lu beaucoup de choses, mais aucune aide sur le résultat.
J'ai Oracle DB à distance, je me connecte à l'aide d'une connexion mise en DbVisualizer comme ceci:Connexion à Oracle DB en utilisant Ruby

DB Type : Oracle 
Driver (jdbc) : Oracle thin 
Database URL: jdbc:oracle:thin:@10.10.100.10:1521/VVV.LOCALDOMAIN 
UserIdf: SomeUser 
Pass: SomePass 

Connection fonctionne bien.

Ce que je fais en Ruby est:

require 'oci8' 
require 'dbi' 
... 

conn = OCI8.new('SomeUser','SomePass','//10.10.100.10:1521/VVV.LOCALDOMAIN') 
... 

Ce que je reçois est:

ORA-12545: Connect failed because target host or object does not exist 
oci8.c:360:in oci8lib.so 

Répondre

8

le troisième paramètre doit être le nom d'hôte TNS, si vous utilisez SQL plus il est aussi le troisième paramètre dans la chaîne de connexion, vous pouvez le trouver également dans le fichier tnsnames.ora dans les cartes oracle

dans SQLPlus: connect utilisateur/mot de passe @ ho stname;
dans oci8: conn = OCI8.new ('UnUtilisateur', 'somepass', nom d'hôte)

Voici un échantillon de travail, brouillées les paramètres du cours

require 'oci8' 
oci = OCI8.new('****','***','****.***') 
oci.exec('select * from table') do |record| 
    puts record.join(',') 
end 
+0

cette n'aide pas ORA-12504: TNS: l'écouteur n'a pas reçu le SERVICE_NAME dans CONNECT_DATA – qwebek

+0

Êtes-vous sûr de votre nom d'hôte? ajouté un échantillon de travail – peter

+1

J'ai créé une variable TNS_ADMIN, définissez mon nom d'hôte TNS. je peux connecter via sqlplus et Ruby, je peux me connecter comme si oci = OCI8.new ('myuser', 'mypass', '// : 1521/' MAIS Quand je parle de l'hôte TNS, il échoue avec ORA-12514: TNS: l'écouteur ne connaît pas actuellement le service demandé dans le descripteur de connexion (OCIError) –

-3
require 'oci8' 
oci = OCI8.new('system','prasad','127.0.0.1:1521') 
oci.exec("CREATE TABLE states1 (
      id CHAR(2) PRIMARY KEY, 
      name VARCHAR2(15) NOT NULL, 
      capital VARCHAR2(25) NOT NULL)") 
+0

Vous pouvez inclure un commentaire expliquant votre réponse et pourquoi vous pensez que cela résoudra le problème du PO. – mustaccio

-4
require 'oci8' 
oci = OCI8.new('system','prasad','127.0.0.1:1521') 
oci.exec("insert into states1 values(1,'prasad','visakhapatnam')") 
oci.exec("commit") 
oci.exec('select * from states1') do |record| 
    puts record.join(',') 
end 
Questions connexes