Cách sử dụng sqlplus để kết nối với Cơ sở dữ liệu Oracle nằm trên một máy chủ khác mà không sửa đổi tnsnames.ora của riêng tôi


80

Tôi muốn kết nối với một cơ sở dữ liệu oracle nằm trên một máy chủ khác bằng sqlplus. Trang này đề nghị thêm một mục trên tnsnames của tôi để chuyển sang cơ sở dữ liệu đó

local_SID =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host= hostname.network)(Port= 1521))
    (CONNECT_DATA = (SID = remote_SID))
  )

và sau đó sử dụng nó trong sqlplus

sqlplus user/pass@local_SID

Tuy nhiên, trong hoàn cảnh của tôi, việc sửa đổi các tên miền địa phương là không thể. Có thể kết nối với cơ sở dữ liệu từ xa chỉ bằng cách sử dụng đối số sqlplus mà không phải thay đổi tnsnames? Cái gì đó như

sqlplus user/pass@remote_SID@hostname.network ;( I know, this one is not valid)

1
thậm chí ngắn hơn - sqlplus userid / password @ cơ sở dữ liệu

@GlennLong - nhưng trong phiên bản của bạn, databasevẫn là bí danh TNS, tồn tại trong tnsnames.orađó, vậy có giống như Louis đang cố tránh không?
Alex Poole

Câu trả lời:


85
 sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))

Có thể, và điều này có thể phụ thuộc vào môi trường dòng lệnh bạn đang sử dụng, bạn cần trích dẫn chuỗi, đại loại như

 sqlplus "user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))"

hoặc là

 sqlplus 'user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))'

35

Bạn có thể sử dụng kết nối dễ dàng cho việc này:

sqlplus usr/pass@hostname.network/remote_service_name

Để cho phép kết nối dễ dàng trên máy của bạn, bạn cần thêm nó NAMES.DIRECTORY_PATH vào sqlnet.ora, ví dụ:

NAMES.DIRECTORY_PATH=(EZCONNECT)

Nếu người nghe của bạn đang sử dụng cổng không mặc định ...@hostname.network:port/....

Trên thực tế, có vẻ như bạn phải cung cấp tên dịch vụ, không phải SID; chúng có thể giống nhau nhưng nếu không bạn sẽ cần lấy nó từ máy chủ.


1
Nếu tên dịch vụ giống với tên máy chủ, bạn thậm chí không cần chỉ định tên dịch vụ khi kết nối. (Thực tế không ai làm điều này, nhưng thật tuyệt khi biết.)
durette

Liên kết chết .......
Harvey

1
@Harvey - cập nhật, cảm ơn.
Alex Poole

17

Tạo một bản sao của tệp tnsnames.ora trong một thư mục mà bạn có thể ghi vào, sửa đổi tệp cho phù hợp, sau đó đặt biến môi trường TNS_ADMIN thành vị trí của thư mục đó.

ví dụ:

cp $ORACLE_HOME/network/admin/tnsnames.ora /tmp/tnsnames.ora
# edit the /tmp/tnsnames.ora file to add your entries

# Set the $TNS_ADMIN environment variable so that sqlplus knows where to look 
export TNS_ADMIN=/tmp

2
Đây là một phản hồi tốt hơn nhiều, tốt hơn nhiều
Andrew Sledge

Cách tiếp cận này hoạt động với một hệ thống không có cơ sở hạ tầng orory được cài đặt ngoài máy khách sqlplus. Chỉ cần sao chép qua tnsnames.ora từ máy chủ db và làm theo quy trình của Phil.
theRiley

3

Trên hệ thống Unix / Linux, bạn có thể sử dụng các tệp cấu hình cấp người dùng để ghi đè các mục nhập cấp hệ thống.

Cấp độ người dùng cấp hệ thống 
Cấu hình tập tin cấu hình tập tin
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

Các tập tin cấu hình cấp hệ thống có thể được tìm thấy trong thư mục $TNS_ADMIN. Nếu biến TNS_ADMINkhông được đặt thì chúng được tìm kiếm trong thư mục $ORACLE_HOME/network/admin.

Các tệp cấu hình cấp người dùng không thay thế toàn bộ tệp cấu hình cấp hệ thống (vì TNS_ADMINthư mục thay thế toàn bộ $ORACLE_HOME/network/adminthư mục) nhưng chúng thêm hoặc thay đổi các mục của tệp cấu hình cấp hệ thống. Nếu một mục tồn tại trong tệp cấu hình cấp người dùng thì mục này được sử dụng, nếu mục đó không tồn tại trong tệp cấu hình cấp người dùng thì mục nhập của tệp cấu hình cấp hệ thống sẽ được sử dụng.

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.