2009-04-17 40 views
6

Mục tiêu của tôi là kết nối với một cá thể Oracle 9i từ máy OS X của tôi. Tôi đã làm theo các hướng dẫn thiết lập here và vượt qua chúng mà không có lỗi (cuối cùng). Tuy nhiên, tôi đang tìm sqlplus đó là không thể kết nối:Làm thế nào để sqlplus không kết nối?

[ [email protected] ~ ]$ sqlplus xxx/[email protected] 

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Apr 17 10:13:08 2009 

Copyright (c) 1982, 2007, Oracle. All Rights Reserved. 

chờ đợi looooong ...

ERROR: 
ORA-12170: TNS:Connect timeout occurred 

Enter user-name: xxx 
Enter password: 
ERROR: 
ORA-12162: TNS:net service name is incorrectly specified 

Enter user-name: 

My tập tin tnsnames.ora ...

zzz = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = 
     (PROTOCOL = TCP) 
     (HOST = dbhost) 
     (PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
    (SERVICE_NAME = zzz) 
) 
) 

Có thể có một biến env mà cần phải được thiết lập?


CẬP NHẬT

Có thể ping DB máy chủ không có vấn đề.

Cố gắng ...

sqlplus xxx/[email protected]//dbhost/zzz 

Got ...

ERROR: 
ORA-12170: TNS:Connect timeout occurred 

Cố gắng sử dụng SID thay vì SERVICE_NAME trong tnsnames.ora. Dường như không thay đổi kết quả. Đã hoàn nguyên trở lại SERVICE_NAME.


vài cuối mục trong sqlnet.log ...

*********************************************************************** 
Fatal NI connect error 12170. 

    VERSION INFORMATION: 
    TNS for MacOS X Server: Version 10.2.0.4.0 - Production 
    TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production 
    Time: 17-APR-2009 10:33:06 
    Tracing not turned on. 
    Tns error struct: 
    ns main err code: 12535 
    TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS 
    ns secondary err code: 12560 
    nt main err code: 505 
    TNS-00505: Message 505 not found; No message file for product=network, facility=TNS 
    nt secondary err code: 60 
    nt OS err code: 0 


*********************************************************************** 
Fatal NI connect error 12170. 

    VERSION INFORMATION: 
    TNS for MacOS X Server: Version 10.2.0.4.0 - Production 
    TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production 
    Time: 17-APR-2009 11:24:08 
    Tracing not turned on. 
    Tns error struct: 
    ns main err code: 12535 
    TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS 
    ns secondary err code: 12560 
    nt main err code: 505 
    TNS-00505: Message 505 not found; No message file for product=network, facility=TNS 
    nt secondary err code: 60 
    nt OS err code: 0 

ĐÁP PHẦN

Cảm ơn tất cả mọi người cho câu trả lời của bạn. Họ rất hữu ích. Tôi thấy rằng đã xảy ra sự cố DNS. Tôi đã có thể ping bằng tên máy, vì vậy nghĩ rằng nên làm việc tốt. Tôi cũng đã thử I.P. địa chỉ nhà. Hóa ra là tôi cần nội bộ "10.1.x.x" I.P. địa chỉ để nó hoạt động trên máy OS X này (nhưng tên máy chủ là tốt trên Windows).

Tại thời điểm này, tôi có thể kết nối với ...

sqlplus xxx/[email protected]//INTERNAL_IP/zzz 

Tuy nhiên, với những giá trị nhập vào tnsnames.ora, điều này vẫn không hoạt động ...

sqlplus xxx/[email protected] 

. ..

ORA-12154: TNS:could not resolve the connect identifier specified 

tôi đã tìm kiếm cho một sa tệp tnsnames.ora mple đó gần với những gì tôi cần và sao chép nội dung vào tệp của tôi. Thay đổi các params và bây giờ tất cả mọi thứ hoạt động. Không chắc tại sao tôi không làm việc.

Trả lời

8

Vì bạn đang sử dụng một khách hàng 10g, đó là khuyến khích sử dụng Easy Connect cú pháp thay vì:

export TWO_TASK=//dbhost/zzz 
sqlplus xxx/yyy 

, hoặc chỉ này:

sqlplus 'xxx/[email protected]//dnhost/zzz' 

Ngoài ra kiểm tra ORACLE_HOME điểm của bạn vào thư mục bên phải: tnsnames.ora được tìm kiếm trong $ORACLE_HOME/network/admin/tnsnames.ora

+0

Tôi nghĩ rằng nó phải định vị tệp tnsnames tốt, vì nó không phàn nàn rằng zzz là một dịch vụ không xác định. –

+0

Bạn đã thử TNSPING zzz chưa? Bạn có thể TELNET dbhost 1521 không? – chris

4

Dấu ngoặc của bạn có vẻ chính xác.

Hãy thử sử dụng SID:

Sau đây là một ví dụ về một tập tin tnsnames.ora:

IDENTIFIER = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP) (HOST = userid.myhosteddb.net)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = (SID = odb)) 
) 

Read about SID here.

1

Có lẽ là một tập tin sqlnet.log được tạo trong làm việc của bạn danh mục. Điều này có thể giúp bạn hoặc nếu bạn đăng nội dung của nó, nó có thể cung cấp cho chúng tôi thêm thông tin.

Trong ví dụ của bạn, bạn đang thử hai thứ khác nhau. Trên dòng lệnh bạn đã sử dụng "xxx/yyy @ zzz". Có vẻ như đây là tìm mục nhập "zzz" trong tnsnames.ora thành công, nhưng thời gian chờ cho biết rằng nó không nhận được phản hồi nào từ máy chủ. Bạn có thể ping dbhost thành công không?

Trong lần thử thứ hai, bạn vừa nhập "xxx" cho tên người dùng; điều này có ý nghĩa nếu bạn không quen với SQLPlus, nhưng như bạn có thể thấy không có điểm nào nó nhắc bạn về tên cơ sở dữ liệu. Vì vậy, trong trường hợp này, nó đang cố gắng kết nối với "xxx/yyy" mà không có tên dịch vụ, dẫn đến lỗi thứ hai. Điều này có nghĩa là bạn chưa thiết lập tên dịch vụ mặc định. Vì vậy, lỗi này đến từ đầu vào không đầy đủ. (Bạn sẽ nhập "xxx @ zzz" cho tên người dùng để chỉ định tên dịch vụ tại dấu nhắc này. Bạn thực sự có thể nhập toàn bộ chuỗi kết nối "xxx/yyy @ zzz" vào dấu nhắc tên người dùng, nếu bạn không nhớ mật khẩu hiển thị.)

+0

Có, tôi có thể ping máy chủ DB được chỉ định trong tệp tnsnames.ora của tôi. – Ethan

1

Bạn đã thử sử dụng telnet để truy cập cổng mở để đảm bảo tường lửa không chặn bạn? có thể đáng thử một máy chủ telnet port-num

+0

Tôi có thể kết nối với DB đó từ các máy khác bằng cách sử dụng các công cụ như SQLDeveloper, vì vậy tôi biết máy chủ lưu trữ cho phép kết nối. – Ethan

+0

Nhưng tường lửa cục bộ có chặn các kết nối gửi đi không? – trent

1

Bạn đã thiết lập môi trường của mình với tập lệnh oraenv?

Bạn đã thử tnsping chưa?

$ tnsping $ORACLE_SID 

Có lẽ nó sẽ giúp so sánh đầu ra trên máy kết nối với đầu ra trên máy không kết nối được. Ít nhất đó là những gì tôi làm ngay trước khi liên hệ với DBA của chúng tôi.

Bạn có thể nhận được chi tiết hơn một chút về những gì lỗi với oerr lệnh:

$ oerr ora 12170 
12170, 00000, "TNS:Connect timeout occurred" 
// *Cause: The server shut down because connection establishment or 
// communication with a client failed to complete within the allotted time 
// interval. This may be a result of network or system delays; or this may 
// indicate that a malicious client is trying to cause a Denial of Service 
// attack on the server. 
// *Action: If the error occurred because of a slow network or system, 
// reconfigure one or all of the parameters SQLNET.INBOUND_CONNECT_TIMEOUT, 
// SQLNET.SEND_TIMEOUT, SQLNET.RECV_TIMEOUT in sqlnet.ora to larger values. 
// If a malicious client is suspected, use the address in sqlnet.log to 
// identify the source and restrict access. Note that logged addresses may 
// not be reliable as they can be forged (e.g. in TCP/IP). 
+0

Các công cụ tôi có sẵn là bất kỳ thứ gì đi kèm với Oracle Instant Client cho OS X. Điều đó bao gồm sqlplus, nhưng tôi dường như không có lệnh "tnsping". – Ethan

+0

Biến $ ORACLE_SID là gì? Đó không phải trong môi trường của tôi. Nó có cần phải không? – Ethan

+0

Tôi không có bất kỳ trải nghiệm nào với Ứng dụng khách Oracle Instant. Tôi chắc rằng $ ORACLE_SID cần được đặt để sử dụng tập lệnh thiết lập oraenv. Có vẻ như bạn đang thiếu một số phần ở đó. –

2

Bạn có thể sử dụng

sqlplus user/[email protected]_host 

nếu bạn không thể kết nối, bạn có thể sử dụng

sqlplus user/[email protected](DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz))) 

nếu bạn đang sử dụng Linux khác * Hệ điều hành Nix bạn cần sử dụng dấu ngoặc kép khác() được diễn giải bởi vỏ

ví dụ

sqlplus user/[email protected]'(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))' 
0

THEO THIS LINK CHO STEP BY STEP LẮP ĐẶT VÀ PHƯƠNG PHÁP LẮP ĐẶT POST .. Hãy cẩn thận với nó.

Và để kết nối với sql cộng:

  1. USERNAME sẽ được hệ thống theo HƯỚNG DẪN đưa ra trong TRÊN LINK
  2. mật khẩu của bạn không được hổ nhưng một trong những mà bạn đặt ở đầu quá trình cài đặt

PS: đừng lo lắng nếu bạn thấy vấn đề (không tương thích trình duyệt) kết nối Oracle Enterprise Manager trong khi thử nghiệm cài đặt nếu trình duyệt của bạn là Google Chrome. nhấn mũi tên trang sau và mũi tên trang tiếp theo để đồng ý các điều khoản và nhấp vào ok.

Tôi giải quyết vấn đề này trên máy tính của tôi trong một ngày .. nhưng nó sẽ là một vấn đề của vài hors cho bạn.

soruces: i am máy tính khoa học kỹ sư chủ yếu là mã trong java

+2

không cần phải hét lên, phải không? – kleopatra

0

tôi đã có lỗi tương tự (ORA-12162: TNS: tên dịch vụ net là không đúng quy định) nhưng một lý do khác nhau (Trên Windows 7 Enterprise 64-bit). Hy vọng điều này sẽ giúp ai đó:

I.T. tại nơi làm việc của tôi đã cài đặt Oracle 32bit và 64bit, và dựa trên biến PATH của tôi, trình vỏ tìm trong đường dẫn 64-bit cho SQLPLUS.exe so với đường dẫn 32 bit.

Các đường dẫn khác nhau sử dụng file tnsnames.ora khác nhau và tôi không có chuỗi kết nối của tôi trong đường dẫn 64-bit:

Oracle \ sản phẩm \ 11.1.0 \ client_1_64bit \ mạng \ admin \ tnsnames.ora

tôi chỉ có chuỗi kết nối trong 32-bit tnsnames.ora: Oracle \ sản phẩm \ 11.1.0 \ client_1_32bit \ mạng \ admin \ tnsnames.ora

Ngoài ra, vì đã có nhiều bản cài đặt ORACLE tôi đã phải loại bỏ biến môi trường ORACLE_HOME để cả hai lượt cài đặt có thể sử dụng các thư mục chính khác nhau.

0

Tôi gặp sự cố tương tự và có vẻ như Oracle sqlplus là vấn đề!

Connecting như một trong những tác phẩm này:

> sqlplus MyUsername/[email protected]:1521/MyServiceName 
    > sqlplus MyUsername/[email protected]//MyHostname:1521/MyServiceName 

(các // là không bắt buộc trước khi hostname). Tuy nhiên, để lại tắt mật khẩu hoặc cả hai người dùng/vượt qua thất bại như thế này:

sqlplus @//MyHostname:1521/MyServiceName 

    SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 2 15:59:49 2015 

    Copyright (c) 1982, 2013, Oracle. All rights reserved. 

    SP2-0310: unable to open file "//MyHostname:1521/MyServiceName.sql" 
    Enter user-name: MyUsername 
    Enter password: MyPassword 
    ERROR: 
    ORA-12162: TNS:net service name is incorrectly specified 

Vì vậy, mặc dù sqlplus yêu cầu bạn cho tên người dùng/mật khẩu, nó sẽ ngớ ngẩn thất bại với một thông báo lỗi không có thật nếu bạn gõ chúng trong tại lời nhắc. Nó chỉ hoạt động nếu bạn đặt chúng (cả hai) ở đầu chuỗi kết nối.

Stupid Oracle !!!

Các vấn đề liên quan