Oracle TNS tên không hiển thị khi thêm kết nối mới vào SQL Developer


93

Tôi đang cố gắng kết nối với cơ sở dữ liệu oracle bằng SQL Developer.

Tôi đã cài đặt trình điều khiển .Net oracle và đặt tnsnames.oratệp tại
C:\Oracle\product\11.1.0\client_1\Network\Admin

Tôi đang sử dụng định dạng sau trong tnsnames.ora:

dev =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.XXX.XXX)(PORT = XXXX))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = idpdev2)
    )
  )

Trong SQL Developer, khi tôi cố gắng tạo một kết nối mới, không có tên TNS nào hiển thị dưới dạng tùy chọn.

Có điều gì tôi đang thiếu?

Câu trả lời:


176

Nhà phát triển SQL sẽ tìm tệp tnsnames.ora ở vị trí sau theo thứ tự này

  1. $ HOME / .tnsnames.ora
  2. $ TNS_ADMIN / tnsnames.ora
  3. Khóa tra cứu TNS_ADMIN trong sổ đăng ký
  4. /etc/tnsnames.ora (không phải cửa sổ)
  5. $ ORACLE_HOME / network / admin / tnsnames.ora
  6. LocalMachine \ SOFTWARE \ ORACLE \ ORACLE_HOME_KEY
  7. LocalMachine \ SOFTWARE \ ORACLE \ ORACLE_HOME

Để xem nhà phát triển SQL nào đang sử dụng, hãy phát hành lệnh show tnstrong trang tính

Nếu tệp tnsnames.ora của bạn không được nhận dạng, hãy sử dụng quy trình sau:

  1. Xác định một biến môi trường được gọi là TNS_ADMIN để trỏ đến thư mục chứa tệp tnsnames.ora của bạn.

    Trong Windows, điều này được thực hiện bằng cách điều hướng đến Bảng điều khiển > Hệ thống > Cài đặt hệ thống nâng cao > Biến môi trường ...

    Trong Linux, xác định biến TNS_ADMIN trong tệp .profile trong thư mục chính của bạn.

  2. Xác nhận hệ điều hành nhận ra biến môi trường này

    Từ dòng lệnh Windows: echo% TNS_ADMIN%

    Từ linux: echo $ TNS_ADMIN

  3. Khởi động lại nhà phát triển SQL

  4. Bây giờ trong SQL Developer nhấp chuột phải vào Connections và chọn New Connection ... . Chọn TNS làm loại kết nối trong hộp thả xuống. Các mục nhập của bạn từ tnsnames.ora bây giờ sẽ hiển thị ở đây.

1
Đối với tôi: $ HOME / .tnsnames.ora không hoạt động ... Thay vào đó tôi đã sử dụng $ HOME / tnsnames.ora. Cũng lưu ý: Bạn sẽ cần phải đi tới Công cụ -> Tùy chọn, tìm kiếm "tns" và trỏ thư mục đến $ HOME
Ryan Delucchi

Mặc dù điều này nằm trong ghi chú phát hành cho phiên bản 1.5 dành cho nhà phát triển SQL, tôi nhận thấy rằng trên Ubuntu 12.04 LTS chỉ # 5 hoạt động . Hãy thử các bước sau để kiểm tra xem đó có phải là trường hợp của bạn không: forum.oracle.com/message/2769285#2769285 . Đáng chú ý : tác giả đã gặp sự cố trên Win Vista.
LAFK nói Hãy phục hồi Monica vào

Làm việc cho tôi trong Windows. Ghi nhật ký mọi thứ mãi mãi FTW!
Isaac

Cài đặt TNS_ADMIN không hoạt động đối với tôi. Thay vào đó, tôi tìm kiếm tất cả các Tệp TNSNAMES trên máy tính và cập nhật nội dung của tất cả chúng. Không hiểu tại sao Windows 7 Sql Developer vẫn tiếp tục sử dụng một số Tệp TNSNAMES khác trong một số thư mục cũ.
Ben,

1
Lưu ý: $TNS_ADMIN.ora
TRỰC TIẾP

30

Mở SQL Developer. Đi tới Công cụ -> Tùy chọn -> Cơ sở dữ liệu -> Nâng cao Sau đó đặt Thư mục tên rõ ràng

TNSNAMES của tôi đã được thiết lập đúng cách và tôi có thể kết nối với Toad, SQL * Plus, v.v. nhưng tôi cần thực hiện việc này để Nhà phát triển SQL hoạt động. Có lẽ đó là một vấn đề Win 7 vì nó cũng là một khó khăn khi cài đặt.


Câu trả lời được chấp nhận không làm việc cho tôi nhưng điều này đã làm (Windows Server 2008R2)
Josh Werts

Gặp vấn đề tương tự, nhưng Nhà phát triển SQL cũng đã xem xét% userprofile% \ tnsnames.ora trước% TNS_ADMIN% \ tnsnames.ora và đó là nơi tôi có thêm tệp tnsnames.ora.
MBWise

15

Trong trình duyệt SQLDeveloperTools --> Preferences , như được hiển thị trong hình ảnh bên dưới.

nhập mô tả hình ảnh ở đây

Trong các tùy chọn Preferencesexpand Database --> select Advanced --> under "Tnsnames Directory" --> Browse the directory nơi tnsnames.ora hiện diện.
Sau đó nhấp vào Ok .
như thể hiện trong sơ đồ dưới đây.

nhập mô tả hình ảnh ở đây

Bạn đã làm!

Bây giờ bạn có thể kết nối thông qua các tùy chọn TNSnames .


Không thể tìm thấy "Databse: Advanced" ==> phiên bản của tôi là 1.5.5
Tarek El-Mallah

1
Đối với các phiên bản thấp hơn 2.1 hoặc nếu bạn chưa chỉ định thư mục Tnsnames trên 2.1 hoặc cao hơn, vui lòng bỏ qua như được chỉ định trong câu trả lời @JasonAnderson .
Chandra Sekhar

Tôi không có tùy chọn Tnsnames Directory trong menu Tools-> Preferences-> Databaes-> Advanced Parameters. Tôi đang sử dụng SqlDeveloper v1.1.3
Ahmedov

14

Bạn luôn có thể tìm ra vị trí của tệp tnsnames.ora đang được sử dụng bằng cách chạy TNSPING để kiểm tra kết nối (9i trở lên):

C:\>tnsping dev

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 08-JAN-2009 12:48:38

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:
C:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = XXX)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = DEV)))
OK (30 msec)

C:\>

Đôi khi, vấn đề là với mục nhập bạn đã thực hiện trong tnsnames.ora, không phải là hệ thống không tìm thấy nó. Điều đó nói rằng, tôi đồng ý rằng có một tập hợp biến môi trường tns_admin là Điều tốt, vì nó tránh được các vấn đề không thể tránh khỏi phát sinh khi xác định chính xác tệp tnsnames nào đang được sử dụng trong các hệ thống có nhiều nhà oracle.


làm thế nào tôi có thể cài đặt công cụ tnsping ??
Kiquenet

Trong cài đặt máy khách có một hộp kiểm cho Công cụ cơ sở dữ liệu hoặc một số công cụ tương tự.
DCookie

2

Các bước mà Jason đề cập là rất tốt và sẽ hiệu quả. Tuy nhiên, có một chút thay đổi với SQL Developer. Nó lưu trữ các thông số kỹ thuật kết nối (máy chủ, tên dịch vụ, cổng) vào lần đầu tiên nó đọc tệp tnsnames.ora. Sau đó, nó không làm mất hiệu lực của các thông số kỹ thuật khi mục nhập gốc bị xóa khỏi tệp tnsname.ora. Bộ nhớ cache vẫn tồn tại ngay cả sau khi Nhà phát triển SQL đã bị chấm dứt và khởi động lại. Đây không phải là một cách xử lý tình huống phi logic. Ngay cả khi tệp tnsnames.ora tạm thời không khả dụng, Nhà phát triển SQL vẫn có thể tạo kết nối miễn là các thông số kỹ thuật ban đầu vẫn đúng. Vấn đề đến với bước ngoặt nhỏ tiếp theo của họ. SQL Developer xử lý các tên dịch vụ trong tệp tnsnames.ora là các giá trị phân biệt chữ hoa chữ thường khi giải quyết kết nối. Vì vậy, nếu bạn đã từng có một tên mục nhập ABCD. world trong tệp và bạn đã thay thế nó bằng một mục mới có tên abcd.world, Nhà phát triển SQL sẽ KHÔNG cập nhật thông số kết nối của nó cho ABCD.world - nó sẽ coi abcd.world hoàn toàn là một kết nối khác. Tại sao tôi không ngạc nhiên khi một sản phẩm của Oracle lại coi nội dung của định dạng tệp do oracle phát triển là phân biệt chữ hoa chữ thường rõ ràng là phân biệt chữ hoa chữ thường?


@allen: bạn có biết cách buộc nó xóa danh sách này không? Nếu vậy, hãy phản hồi stackoverflow.com/q/6412559/168646
David Oneill

1

Trong Sql Developer, chuyển đến Tools-> tùy chọn-> Datababae-> advanced-> Đặt thư mục Tnsname thành thư mục chứa tnsnames.ora


0

Không có thay đổi nào ở trên tạo ra bất kỳ sự khác biệt nào trong trường hợp của tôi. Tôi có thể chạy TNS_PING trong cửa sổ lệnh nhưng Nhà phát triển SQL không thể tìm ra tnsnames.ora ở đâu.

Vấn đề trong trường hợp của tôi (Windows 7 - 64 bit - Enterprise) là trình cài đặt Oracle đã trỏ lối tắt menu Start đến phiên bản SQL Developer sai. Có vẻ như có ba phiên bản SQL Developer đi kèm với trình cài đặt. Một trong% ORACLE_HOME% \ client_1 \ sqldeveloper \ và hai trong% ORACLE_HOME% \ client_1 \ sqldeveloper \ bin \.

Trình cài đặt đã cài đặt một lối tắt menu bắt đầu trỏ đến một phiên bản trong thư mục bin đơn giản là không hoạt động. Nó sẽ yêu cầu mật khẩu mỗi khi tôi khởi động SQL Developer, không nhớ các lựa chọn tôi đã thực hiện và hiển thị một danh sách trống khi tôi chọn TNS làm cơ chế kết nối. Nó cũng không có trường Thư mục TNS trong cài đặt nâng cao Cơ sở dữ liệu được tham chiếu trong các bài đăng khác.

Tôi đã bỏ lối tắt Bắt đầu cũ và cài đặt lối tắt đến% ORACLE_HOME% \ client_1 \ sqldeveloper \ sqldeveloper.exe. Thay đổi đó đã khắc phục sự cố trong trường hợp của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.