Kami memiliki aplikasi yang berjalan secara lokal tempat kami mengalami kesalahan berikut:
ORA-12514: TNS: pendengar saat ini tidak mengetahui layanan yang diminta dalam deskriptor hubungkan
Saya telah menguji koneksi yang menggunakan TNSPing
yang diselesaikan dengan benar dan saya mencoba SQLPlus
mencoba menghubungkan, yang gagal dengan kesalahan yang sama seperti di atas. Saya menggunakan sintaks ini untuk SQLPlus
:
sqlplus username/password@addressname[or host name]
Kami telah memverifikasi bahwa:
- Pendengar TNS di server sedang berjalan.
- Oracle sendiri di server sedang berjalan.
Kami tidak mengetahui adanya perubahan apa pun yang dilakukan pada lingkungan ini. Ada lagi yang bisa kita uji?
Jawaban:
Saya memiliki masalah ini dan perbaikannya adalah untuk memastikan
tnsnames.ora
bahwaSERVICE_NAME
ini adalah nama layanan yang valid di database Anda. Untuk mengetahui nama layanan yang valid, Anda dapat menggunakan kueri berikut dalam oracle:Setelah saya perbarui
tnsnames.ora
ke:kemudian saya berlari:
Keberhasilan! Pendengar pada dasarnya memberi tahu Anda bahwa apa pun service_name yang Anda gunakan bukan layanan yang valid menurut DB.
(* Saya menjalankan sqlplus dari Win7 client workstation ke DB jarak jauh dan menyalahkan DBA;) *)
sumber
Saya tahu ini adalah pertanyaan lama, tetapi masih belum terjawab. Butuh satu hari penelitian, tetapi saya menemukan solusi paling sederhana, setidaknya dalam kasus saya (Oracle 11.2 pada Windows 2008 R2) dan ingin berbagi.
Kesalahan, jika dilihat secara langsung, menunjukkan bahwa pendengar tidak mengenali nama layanan. Tetapi di mana ia menyimpan nama layanan? Di
%ORACLE_HOME%\NETWORK\ADMIN\listener.ora
"SID_LIST" hanya itu, daftar SID dan nama layanan yang dipasangkan dalam format yang dapat Anda salin atau cari.
Saya menambahkan masalah Nama Layanan, kemudian di panel kontrol "Layanan" Windows, saya melakukan "Restart" pada layanan pendengar Oracle. Sekarang semuanya baik-baik saja.
Misalnya, file listener.ora Anda pada awalnya mungkin terlihat seperti:
... Dan untuk membuatnya mengenali nama layanan
orcl
, Anda dapat mengubahnya menjadi:sumber
listener.ora
menyimpan nama. Saya bahkan tidak punyalistener.ora
file. Saya juga berada di workstation klien yang menjalankan SQL Developer dan mencoba membuat Database Link ketika saya mendapatkan kesalahan. Saya tidak memiliki layanan Oracle Listener untuk memulai kembali.Saya punya masalah ini di server Windows 2008 R2 dan Oracle 11g
Jika Anda tidak memiliki entri untuk layanan database, buat satu dan setel database global yang benar,
sid
dan oracle home.sumber
Dalam keadaan saya kesalahan itu disebabkan oleh fakta bahwa pendengar tidak mendaftarkan layanan db. Saya memecahkan masalah ini dengan mendaftarkan layanan. Contoh:
Deskriptor saya di
tnsnames.ora
:Jadi, saya melanjutkan untuk mendaftarkan layanan di
listener.ora
manual:Terakhir, restart pendengar dengan perintah:
Selesai!
sumber
Memulai OracleServiceXXX dari services.msc bekerja untuk saya di Windows.
sumber
Ini benar-benar harus menjadi komentar untuk jawaban Brad Rippe , tetapi sayangnya, tidak cukup perwakilan. Jawaban itu membuat saya 90% dari perjalanan ke sana. Dalam kasus saya, instalasi dan konfigurasi database memasukkan entri dalam file tnsnames.ora untuk database yang saya jalankan. Pertama, saya dapat terhubung ke database dengan mengatur variabel lingkungan (Windows):
dan kemudian menghubungkan menggunakan
Selanjutnya, menjalankan perintah dari jawaban Brad Rippe:
menunjukkan bahwa nama-nama itu tidak sama persis. Entri yang dibuat menggunakan Asisten Konfigurasi Basis Data Oracle tempat asalnya:
Nama layanan dari kueri
mydatabase
lebih dari sekadarmydatabase.mydomain.com
. Saya mengedit file tnsnames.ora menjadi hanya nama dasar tanpa bagian domain sehingga terlihat seperti ini:Saya memulai kembali layanan Pendengar TNS (saya sering menggunakan
lsnrctl stop
danlsnrctl start
dari jendela perintah administrator [atau Windows Powershell] alih-alih panel kontrol Layanan, tetapi keduanya berfungsi.) Setelah itu, saya dapat terhubung.sumber
Saya memiliki masalah yang sama. Bagi saya, hanya menulis
melakukan trik, melakukannya membuatnya terhubung ke nama layanan default, kurasa.
sumber
jdbc:oracle:thin:@//localhost:1521/orcl
. String koneksi yang dikoreksi untuk menghilangkan kesalahan ini adalah:jdbc:oracle:thin:@localhost:1521
.apa yang bekerja untuk saya benar-benar sederhana, saya hanya perlu memulai layanan secara manual di "Layanan Windows" (services.msc dalam cmd trompt). nama layanan saya adalah: OracleServiceXXXXX.
sumber
Periksa untuk melihat database sudah habis. Masuk ke server, atur variabel lingkungan ORACLE_SID ke SID basis data Anda, dan jalankan SQL * Plus sebagai koneksi lokal.
sumber
Kesalahan ini dapat terjadi ketika aplikasi membuat koneksi baru untuk setiap interaksi database atau koneksi tidak ditutup dengan benar. Salah satu alat gratis untuk memantau dan mengonfirmasi ini adalah pengembang Oracle Sql (walaupun ini bukan satu-satunya alat yang dapat Anda gunakan untuk memantau sesi DB).
Anda dapat mengunduh alat dari situs oracle Sql Developer
di sini adalah tangkapan layar tentang bagaimana memonitor sesi Anda. (jika Anda melihat banyak sesi yang menumpuk untuk pengguna aplikasi Anda saat Anda melihat kesalahan ORA-12514 maka itu indikasi yang baik bahwa Anda mungkin memiliki masalah kumpulan koneksi).
sumber
Saya mengatasi masalah ini di lingkungan linux saya memperbarui IP mesin saya di file / etc / hosts.
Anda dapat memverifikasi IP jaringan Anda (inet end.) Dengan:
Lihat apakah IP Anda cocok dengan file / etc / hosts:
Edit file / etc / hosts Anda, jika ada:
Sampai jumpa.
sumber
Bagi mereka yang mungkin menjalankan Oracle di VM (seperti saya) saya melihat masalah ini karena VM saya kehabisan memori, yang tampaknya telah mencegah OracleDB memulai / menjalankan dengan benar. Meningkatkan memori VM saya dan me-restart memperbaiki masalah.
sumber
Banyak jawaban di sini, tetapi inilah contoh kerja dengan kode yang dapat Anda salin dan tempel dan uji segera:
Bagi saya kesalahan 12514 diselesaikan setelah menetapkan SERVICE_NAME yang benar. Anda menemukan bahwa di server dalam file
tnsnames.ora
yang datang dengan 3 nama layanan yang telah ditentukan (salah satunya adalah "XE").HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
. Pada mesin 64 bit tulis jugaHKLM\SOFTWARE\Wow6432Node\Oracle\...
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
Oracle.ManagedDataAccess.dll
yang hanya 4 MB dan DLL dikelola murni yang bekerja dalam proses 32 bit dan 64 bit juga dan tidak bergantung pada DLL lain dan tidak memerlukan entri registri.Jika
SERVICE_NAME=XE
salah, Anda mendapatkan kesalahan 12514. IniSERVICE_NAME
opsional. Anda juga bisa meninggalkannya.sumber
Saya juga menghadapi masalah yang sama dan menghabiskan 3 hari untuk menggali itu.
Ini terjadi karena entri layanan TNS Anda salah.
Pertama, periksa apakah Anda dapat terhubung ke database siaga dari database primer menggunakan sql>
sqlplus sys@orastand as sysdba
(orastand
adalah database siaga).Jika Anda tidak dapat terhubung maka itu adalah masalah dengan layanan. Perbaiki entri nama layanan dalam file TNS di ujung utama.
Periksa database siaga dengan cara yang sama. Buat perubahan di sini juga jika diperlukan.
Pastikan
log_archive_dest_2
parameter memiliki nama layanan yang benar.sumber
Saya mendapat kesalahan yang sama karena remote SID yang ditentukan salah:
Saya menanyakan database sistem:
pilih * dari global_name;
dan menemukan SID jarak jauh saya ("XE").
Lalu saya bisa terhubung tanpa masalah.
sumber
Dalam kasus saya, basis data telah kehabisan ruang disk. Yang menyebabkannya tidak merespon. Setelah saya membereskan masalah itu semuanya bekerja kembali.
sumber
Bagi saya ini disebabkan oleh menggunakan iPad dinamis menggunakan instalasi. Saya menginstal ulang Oracle menggunakan ipadress statis dan kemudian semuanya baik-baik saja
sumber
Restart VM berfungsi untuk saya
sumber
Masalah saya diselesaikan dengan mengganti'SID 'di URL dengan' nama layanan 'dan host yang benar.
sumber
tnslsnr
sudah habis tetapi basis data sedang rusak.Untuk pemula oracle tidak jelas bahwa database mungkin turun saat koneksi diterima.
Saya harus memulai database secara manual seperti itu
Dan kemudian di konsol sql
Dalam kasus saya saya gagal untuk memulai tetapi mendapat pesan kesalahan lain dan menemukan sumber masalah - saya harus mengubah nama host dan kemudian startup otomatis database berfungsi kembali.
sumber
Saya telah menerapkan solusi di bawah ini untuk menyelesaikan masalah ini.
Saya telah menetapkan ORACLE_HOME menggunakan command prompt (klik kanan cmd.exe dan Run as System administrator).
Digunakan perintah di bawah ini
set oracle_home="path to the oracle home"
Buka Semua program -> Oracle -ora home1 -> Alat migrasi konfigurasi -> Manajer Net -> Pendengar
Pilih Layanan Database dari dropdown. Baik nama basis data global dan SID disetel sama (ORCL dalam kasus saya). Atur Oracle Home Directory.
Contoh jendela Oracle Net Manager dari dokumentasi oracle:
sumber
Masalahnya adalah bahwa url string koneksi saya berisi nama database dan bukan SID. Mengganti nama database dengan koneksi database oracle SID memecahkan masalah ini.
Untuk mengetahui SID oracle Anda, Anda dapat menelusuri
tnsnames.ora
file.XE
adalah SID yang sebenarnya, jadi ini adalah bagaimana string koneksi kucing jantan saya terlihat seperti sekarang:Versi server saya adalah "Oracle 11.2 Express", tetapi solusi juga harus bekerja pada versi lain.
sumber
Dalam kasus saya, tanda kurung bulat di sekitar SERVICE_NAME tidak ada di file tnsnames.ora .
sumber
Untuk mereka yang menggunakan spring-boot dan jdbc untuk koneksi. Anda harus berhati-hati saat menulis jdbcUrl di application.properties
Dengan SID dalam koneksi Database -
source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID
Dengan nama Layanan dalam koneksi db
globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
Ini bekerja untuk saya :)
sumber