2012-03-27 16 views
7

Ich bin fest mit der Verbindung zu Oracle DB, habe viel Zeug gelesen, aber keine Hilfe auf das Ergebnis.
Ich habe Remote-Oracle-DB, ich es anschließe wie dies mit DbVisualizer Einstellung Verbindung:Verbinden mit Oracle DB mit Ruby

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

Verbindung ok funktioniert.

Was ich in Ruby zu tun ist:

require 'oci8' 
require 'dbi' 
... 

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

Was ich erhalte, ist:

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

Antwort

8

der dritte Parameter muss der TNS-Hostname sein, wenn Sie SQL verwenden und es ist auch die dritte Parameter in der Verbindungszeichenfolge, Sie können es auch in der Datei tnsnames.ora in den Oracle-Karten

in SQLPlus finden: Benutzer/Passwort @ ho verbinden stname;
in oci8: conn = OCI8.new ('EinUser', 'SomePass', Hostname)

hier ein Arbeitsbeispiel,

die Parameter natürlich verschleierten diese
require 'oci8' 
oci = OCI8.new('****','***','****.***') 
oci.exec('select * from table') do |record| 
    puts record.join(',') 
end 
+0

nicht hilft ORA-12504: TNS: Listener nicht die SERVICE_NAME in CONNECT_DATA gegeben – qwebek

+0

sind Sie sicher über Ihren Hostnamen? hinzugefügt ein funktionierendes Beispiel – peter

+1

Ich habe TNS_ADMIN Variable erstellt, legen Sie meine TNS-Hostname. Ich kann durch sqlplus verbinden und in Rubin, kann ich wie so verbinden OCI = OCI8.new ('myuser', 'mypass', '// : 1521/' ABER Wenn ich die TNS-Host erwähnen, Es schlägt mit ORA-12514 fehl: TNS: Listener kennt derzeit keinen Dienst, der im Verbindungsdeskriptor angefordert wird (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

Vielleicht möchten Sie einen Kommentar hinzufügen, der Ihre Antwort erklärt und warum Sie glauben, dass dadurch das Problem des OP gelöst wird. – 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