2012-03-27 49 views
7

Tôi bị kẹt khi kết nối với Oracle DB, đã đọc rất nhiều nội dung nhưng không có trợ giúp về kết quả.
tôi có từ xa Oracle DB, tôi đang kết nối với nó bằng cách sử DbVisualizer kết nối thiết lập như thế này:Kết nối với Oracle DB bằng cách sử dụng Ruby

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

kết nối hoạt động ok.

Những gì tôi làm trong Ruby là:

require 'oci8' 
require 'dbi' 
... 

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

Những gì tôi nhận được là:

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

Trả lời

8

tham số thứ ba cần phải được tên máy TNS, nếu bạn sử dụng SQL plus nó cũng là thứ ba tham số trong chuỗi kết nối, bạn cũng có thể tìm thấy nó trong tệp tnsnames.ora trong bản đồ oracle

trong SQLPlus: kết nối người dùng/mật khẩu @ ho stname;
trong oci8: conn = OCI8.new ('SomeUser', 'SomePass', hostname)

Dưới đây là một mẫu làm việc, obfuscated các thông số của quá trình

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

này không giúp ORA-12504: TNS: người nghe không được cung cấp SERVICE_NAME trong CONNECT_DATA – qwebek

+0

bạn có chắc chắn về tên máy chủ của mình không? thêm một mẫu làm việc – peter

+1

Tôi đã tạo biến TNS_ADMIN, đặt tên máy chủ TNS của tôi. tôi có thể kết nối thông qua sqlplus và trong ruby, tôi có thể kết nối như vậy OCI = OCI8.new ('myuser', 'mypass', '// : 1521/' NHƯNG Khi tôi đề cập đến các máy chủ TNS, nó không thành công với ORA-12514: TNS: người nghe không biết dịch vụ được yêu cầu trong bộ mô tả kết nối (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

Bạn có thể muốn bao gồm một bình luận giải thích câu trả lời của bạn và tại sao bạn nghĩ rằng nó sẽ giải quyết vấn đề của OP. – 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 
Các vấn đề liên quan