Cara menggunakan sqlplus untuk terhubung ke Oracle Database yang terletak di host lain tanpa memodifikasi tnsnames.ora saya sendiri

80

Saya ingin terhubung ke database oracle yang terletak di host lain menggunakan sqlplus. Halaman ini menyarankan untuk menambahkan item pada nama saya untuk bergabung ke database itu

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

dan kemudian menggunakannya dalam sqlplus

sqlplus user/pass@local_SID

Namun, dalam keadaan saya memodifikasi nama tns lokal tidak mungkin. Apakah mungkin untuk terhubung ke basis data jauh hanya dengan menggunakan argumen sqlplus tanpa harus mengubah nama tns? Sesuatu seperti

sqlplus user/pass@remote_SID@hostname.network ;( I know, this one is not valid)
Louis Rhys
sumber
1
bahkan lebih pendek - sqlplus userid / password @ database
@ GlennLong - tetapi dalam versi Anda, databaseapakah masih ada alias TNS, yang harus ada di tnsnames.ora, jadi itu sama dengan yang coba dihindari oleh Louis?
Alex Poole

Jawaban:

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

Mungkin, dan ini mungkin tergantung pada lingkungan baris perintah yang Anda gunakan, Anda perlu mengutip string, semacamnya

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

atau

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

Anda dapat menggunakan koneksi yang mudah untuk ini:

sqlplus usr/pass@hostname.network/remote_service_name

Untuk mengaktifkan koneksi yang mudah pada mesin Anda, Anda perlu menambahkannya ke NAMES.DIRECTORY_PATH dalam sqlnet.ora, mis:

NAMES.DIRECTORY_PATH=(EZCONNECT)

Jika pendengar Anda menggunakan port non-default [email protected]:port/....

Sebenarnya sepertinya Anda harus memberikan nama layanan, bukan SID; mereka mungkin sama tetapi jika tidak, Anda harus mendapatkannya dari server.

Alex Poole
sumber
1
Jika nama layanan sama dengan nama host, Anda bahkan tidak perlu menentukan nama layanan saat menghubungkan. (Praktis tidak ada yang melakukan ini, tetapi senang mengetahui hal itu.)
durette
Tautan mati .......
Harvey
1
@ Harvey - diperbarui, terima kasih.
Alex Poole
17

Buat salinan file tnsnames.ora di direktori tempat Anda dapat menulis, memodifikasi file yang sesuai, lalu atur variabel lingkungan TNS_ADMIN ke lokasi direktori itu.

misalnya:

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
Philᵀᴹ
sumber
2
Ini adalah respons yang jauh lebih baik
Andrew Sledge
Pendekatan ini bekerja dengan sistem yang tidak memiliki infrastruktur oracle yang diinstal selain klien sqlplus. Cukup salin tnsnames.ora dari server db, dan ikuti proses Phil.
theRiley
3

Pada sistem Unix / Linux, Anda dapat menggunakan file konfigurasi level pengguna untuk mengganti entri level sistem.

Level Sistem Level Pengguna 
File Konfigurasi File Konfigurasi
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

File konfigurasi tingkat sistem dapat ditemukan di direktori $TNS_ADMIN. Jika variabel TNS_ADMINtidak disetel maka mereka dicari di direktori $ORACLE_HOME/network/admin.

File konfigurasi tingkat pengguna tidak menggantikan file konfigurasi tingkat sistem secara keseluruhan (karena TNS_ADMINdirektori mengganti seluruh $ORACLE_HOME/network/admindirektori) tetapi mereka menambah atau mengubah entri file konfigurasi tingkat sistem. Jika ada entri dalam file konfigurasi level pengguna maka yang ini digunakan, jika tidak ada dalam file konfigurasi level pengguna maka entri file konfigurasi level sistem digunakan.

keajaiban173
sumber