ORA-12505, TNS: pendengar saat ini tidak mengetahui SID yang diberikan dalam descriptor hubungkan

154

Saya telah menginstal Oracle 11g Express Edition Release 2 di windows saya 7 64 bit OS dan mencoba menjalankan program JDBC, maka saya mendapatkan kesalahan berikut:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
    at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
    ... 8 more
Pelajar
sumber
1
Memulai OracleServiceXE secara manual dari layanan bekerja untuk saya.
Sen

Jawaban:

184

Saya memperbaiki masalah ini dengan memperbaiki string jdbc saya.

Sebagai contoh, string jdbc yang benar harus ...

jdbc:oracle:thin:@myserver:1521/XE

Tapi string jdbs yang saya gunakan adalah ...

jdbc:oracle:thin:@myserver:1521:XE

(Catatan: antara 1521dan XEharus a /)

String jdbc buruk ini memberi saya kesalahan ORA-12505 juga.

Wade H
sumber
53
Jika Anda menggunakan / itu adalah nama layanan internet, jika Anda menggunakan titik dua itu adalah SID.
eckes
89

Ada beberapa hal yang dapat menyebabkan masalah ini, tetapi sebelum Anda mulai dengan JDBC, Anda perlu memastikan bahwa Anda dapat terhubung ke database menggunakan SQL * Plus. Jika Anda tidak terbiasa dengan SQL * Plus, itu adalah alat baris perintah untuk menghubungkan ke database Oracle yang telah menjadi bagian standar dari Oracle untuk waktu yang lama dan disertakan dengan Oracle XE.

Saat menghubungkan ke database Oracle menggunakan JDBC, Anda tidak terhubung ke database secara langsung. Sebaliknya, Anda terhubung ke pendengar TNS, yang kemudian menghubungkan Anda ke database. Kesalahan itu ORA-12505berarti bahwa pendengar sudah naik dan Anda bisa terhubung, tetapi tidak bisa menghubungkan Anda ke database karena tidak tahu bahwa database sudah habis. Ada dua alasan untuk ini:

  • database belum dimulai,
  • database belum terdaftar dengan pendengar, misalnya karena basis data dimulai sebelum pendengar. (Ketika basis data mulai, ia mendaftarkan dirinya sendiri dengan pendengar jika sudah berjalan. Jika pendengar tidak berjalan, basis data tidak mendaftar sendiri, dan jika pendengar mulai, ia tidak mencari basis data yang mungkin daftar dengan itu.)

ORA-12505 berarti bahwa pendengar tahu tentang database itu, tetapi pendengar belum menerima pemberitahuan dari database bahwa database sudah habis. (Jika Anda mencoba terhubung ke database yang salah, menggunakan SID yang salah, Anda akan mendapatkan kesalahan ORA-12154 "TNS: tidak dapat menyelesaikan pengidentifikasi koneksi yang ditentukan".)

Layanan Oracle apa yang berjalan di snap-in Layanan? (Buka ini dari Control Panel> Administrative Tools> Services, atau hanya Start> Run> services.msc.) Anda memerlukan layanan OracleServiceXE dan OracleXETNSListener untuk dapat berjalan.

Jika kedua layanan sudah dimulai, dapatkah Anda menyambungkan ke database di SQL * Plus menggunakan salah satu dari yang berikut ini pada prompt perintah? (Saya berasumsi Anda menjalankan ini pada mesin yang sudah Anda instal dengan Oracle XE.)

sqlplus system / system-password @XE
sqlplus system / system-password
sqlplus / as sysdba

(Ganti system-passworddengan kata sandi yang Anda tetapkan untuk pengguna SYS dan SYSTEM selama instalasi Oracle XE.)

Yang pertama dari ketiga terhubung melalui pendengar TNS, tetapi yang kedua terhubung langsung ke database tanpa melalui pendengar, dan hanya bekerja jika Anda berada di mesin yang sama dengan database. Jika yang pertama gagal tetapi dua yang lain berhasil, maka koneksi JDBC juga akan gagal. Jika demikian, sambungkan ke database menggunakan salah satu dari dua lainnya dan jalankan ALTER SYSTEM REGISTER. Kemudian keluar dari SQL * Plus dan coba formulir pertama lagi.

Jika yang ketiga gagal tetapi yang kedua berhasil, tambahkan akun pengguna Anda ke grup ora_dba. Lakukan ini di Panel Kontrol> Manajemen Komputer> Pengguna dan Grup Lokal.

Setelah Anda bisa mendapatkan koneksi formulir

sqlplus system / system-password @XE

untuk bekerja, Anda harus dapat terhubung ke Oracle XE via JDBC. (Kebetulan, Anda belum menunjukkan kepada kami kode JDBC yang Anda gunakan untuk terhubung ke database, tapi saya menduga bahwa itu sangat mungkin benar; akan ada berbagai kesalahan lain jika bagian dari string koneksi salah.)

Luke Woodward
sumber
3
@ Raj: Saya tidak melihat apa yang diedit oleh jawaban Anda, jadi saya telah menghapusnya. Jika Anda ingin menyumbang sejumlah besar ke sebuah pertanyaan, silakan posting jawaban Anda sendiri daripada mengedit jawaban orang lain.
Luke Woodward
@LukeWoodward Saya mendapatkan kesalahan ini SP2-0734: unknown command beginning "system/ora..." - rest of line ignored. pada semua tanggal 3
vaibhavcool20
1
@qtpseleniumSupport: pesan itu mengatakan bahwa Anda menggunakan SQL * Plus dan Anda memasukkan baris system/ora...(atau SQL * Plus membaca baris itu dari file yang Anda suruh baca). Baris perintah yang saya berikan di atas dimaksudkan untuk digunakan dari jendela command-prompt / shell / Terminal. Jika Anda sudah menjalankan SQL * Plus, ganti sqlplusdengan connect.
Luke Woodward
"basis data belum terdaftar dengan pendengar, misalnya karena basis data dimulai sebelum pendengar." - ini dia, terima kasih!
Ursache
47

Saya juga mendapat kesalahan yang sama tetapi ketika mencoba mereka bertiga gagal. Jika tiga di atas gagal. Coba status LSNRCTL jika Anda menemukan layanan (XE dalam kasus saya) hilang coba ini

sqlplus /nolog
conn  system
alter system register;  
exit  
lsnrctl status  

Sekarang Anda dapat melihat layanan
Bahkan jika tidak melihat coba yang ini

sqlplus /nolog  
conn system  
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;  
alter system register;  
exit  
lsnrctl status

Ini mungkin harus bekerja ...

Raj
sumber
2
Anda berhasil! Setelah mengatur local_listener, pendengar orcl sekarang ditampilkan di lsnrctl. Terima kasih banyak!
asgs
Ini membuat sistem saya berfungsi, tetapi perhatikan bahwa saya menjalankan yang berikut: ALTER SYSTEM set local-listener = XE;
Daniel Williams
ketika saya mengetik: 'ubah set sistem local_listener =' (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521)) 'scope = keduanya;' Ini mengembalikan kesalahan: ORA-65040: operation not allowed from within a pluggable databaseapa artinya? Tidak dapat mengonfigurasi JDBC: /
Alg_D
1
kedua jawaban terpilih itu membantu, tetapi jawaban ini lebih membantu. Sepertinya saya tidak punya 127.0.0.1 sebagai alamat pendengar (saya punya satu dengan nama lokal PC saya). Jadi dengan menambahkan yang baru ini, ia mulai bekerja
johnbr
alter system set local_listener = ... bekerja untukku.
Ben Asmussen
31

Saat Anda mendapatkan kesalahan ini "ORA-12505, TNS: listener saat ini tidak mengetahui SID yang diberikan di connect descriptor"

Solusi: Buka Layanan, dan mulai OracleServiceXE, setelah itu coba sambungkan ...

C Nageswara Reddy
sumber
Saya memiliki masalah yang sama tetapi dengan menjalankan OracleServiceXE.Oleh karena itu, memulai kembali layanan OracleServiceXE bekerja untuk saya. Tidak tahu kenapa ?!
Hamedz
Ketika mencari OracleServiceXE perlu diingat bahwa XE sesuai dengan basis data SID jadi pastikan Anda mencari layanan yang tepat, OracleService [SID]
Sandoval0992
10

Saya menemukan beberapa alasan untuk pengecualian ini

1) Nama database XE secara default. Jadi url akan menjadi " jdbc: oracle: thin: @localhost: 1521: XE ".

2) Pastikan bahwa OracleServiceXE, OracleXETNSListener sedang berjalan.it akan berada di Control Panel \ Semua Control Panel Items \ Administrative Tools \ Services

rajeesh
sumber
8

Saya memecahkan masalah ini dengan memperbaiki kode JDBC saya.

string JDBC yang benar harus ...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");

Tapi string JDBC yang saya gunakan adalah ...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");

Jadi, kesalahan menentukan orcl bukan xe menunjukkan kesalahan ini karena nama SID salah.

javabeginner
sumber
Dalam kasus saya conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");berhasil.
Pran Kumar Sarkar
8

Masalah saya terpecahkan ketika saya menggunakan kode di bawah ini:

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");
Rasheed Puttur
sumber
7

Menghadapi kesalahan serupa, salah satu solusi di atas tidak membantu. Ada masalah dalam file listner.ora. Secara tidak sengaja saya telah menambahkan SIDdari SID_LISTlihat di bawah (bagian antara bintang *)

 SID_LIST_LISTENER =
      (SID_LIST =

        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = CLRExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        )

 *(SID_DESC =
           (SID_NAME = XE)
           (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
         )*
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
      )


    DEFAULT_SERVICE_LISTENER = (XE)

Memperbaiki kesalahan ini seperti di bawah ini:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
       (SID_NAME = XE)
       (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
     )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )


DEFAULT_SERVICE_LISTENER = (XE)

Berhenti dan basis data masukkan deskripsi gambar di sini

Menghentikan pendengar OracleServiceXE dan OracleXETNSListener secara manual karena tidak berhenti secara otomatis dengan masuk ke Control Panel \ All Control Panel Items \ Administrative Tools \ Services. Restart database dan itu berfungsi seperti pesona.

Nirmal Mangal
sumber
4

Saya awalnya datang ke sini dengan masalah yang sama. Saya baru saja menginstal Oracle 12c pada Windows 8 (64-bit), tetapi sejak itu saya telah menyelesaikannya dengan 'TNSPING xe' pada baris perintah ... Jika koneksi tidak ditemukan atau nama tidak ditemukan, coba nama database, dalam kasus saya itu 'orcl' ... 'TNSPING orcl' lagi dan jika ping berhasil maka Anda perlu mengubah SID ke 'orcl' dalam kasus ini (atau apa pun nama database yang Anda gunakan) ...

Jose Rego
sumber
4

Satu kemungkinan yang belum saya lihat secara luas dibahas adalah bahwa mungkin ada masalah menyelesaikan nama host pada mesin host itu sendiri. Jika tidak ada entri untuk $ (nama host) di / etc / hosts, pendengar Oracle menjadi bingung dan tidak akan muncul.

Itu ternyata masalah saya, dan menambahkan nama host dan alamat ip di / etc / hosts menyelesaikan masalah.

BillT
sumber
4

Jika Anda memiliki koneksi yang berfungsi di Oracle SQL Developer, gunakan informasi pada menu koneksi untuk membangun url Anda, seperti yang dijelaskan dalam gambar berikut:

masukkan deskripsi gambar di sini

Pada contoh di atas, urlnya adalah: jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice

Perhatikan bahwa jika Anda menggunakan SID, maka ada titik dua (":") alih-alih slash ("/") setelah nama host.

Pierre C
sumber
2

Saya juga menghadapi masalah yang sama. Saya telah menginstal Oracle Express edisi 10g di Windows XP OS menggunakan VMware dan itu berfungsi dengan baik. Karena sangat canggung mengetik pertanyaan SQL dalam utilitas SQL yang disediakan oleh 10g dan karena saya terbiasa bekerja dengan pengembang SQL, saya menginstal 32 bit pengembang SQL di XP dan mencoba menghubungkan ke DB SID "XE" saya. Tetapi koneksi gagal dengan pendengar TNS error-ORA-12505 saat ini tidak mengetahui SID yang diberikan dalam descriptor hubungkan. Saya bingung bagaimana masalah ini terjadi karena berfungsi baik dengan utilitas SQL dan saya juga telah membuat beberapa pemetaan Informatica menggunakan hal yang sama. Saya melakukan browsing banyak pada hal-hal ini ke sana dan menerapkan saran yang ditawarkan kepada saya setelah melakukan ping status "lsnrctl" di forum publik tetapi tidak berhasil. Namun, pagi ini saya mencoba membuat koneksi baru lagi, dan Voila, itu berhasil tanpa masalah. Saya menduga setelah membaca di beberapa posting yang terkadang mendengarkan pendengar sebelum DB menghubungkan atau sesuatu (maafkan saya untuk referensi kasar saya karena saya seorang pemula di sini) tetapi saya menyarankan untuk hanya me-restart mesin dan memeriksa lagi.

pengguna2905345
sumber
2

Saya memiliki masalah yang sama sehingga untuk menyelesaikan masalah ini saya mengkonfigurasi ulang pendengar saya menggunakan netcasetelah itu saya menghapus database lama saya yang menggunakan ORCL dbcadan kemudian saya membuat database baru lagi menggunakandbca

Technokrat
sumber
2

Saya telah menghadapi masalah yang sama dan diselesaikan dengan me-restart layanan OracleServiceXE. Goto Services.msc dan kemudian verifikasi layanan 'OracleServiceXE' UP dan berjalan

Vijay Thayalan
sumber
2

Saya memperbaiki masalah ini dengan mengubah " SID " menjadi " SERVICE_NAME " di file TNSNAMES.ora saya.

Harap lihat apakah DB Anda meminta SID atau SERVICE_NAME.

Bersulang

Akshay Lokur
sumber
2

Jika Anda menggunakan Oracle Express Edition, Anda harus memiliki url ini

jdbc: oracle: thin: @localhost: 1521: xe atau jdbc: oracle: thin: @localhost: 1521 / XE

Saya punya masalah serupa dengan plugin config liquibase di pom.xml. Dan saya mengubah konfigurasi saya:

`<configuration>
   <driver>oracle.jdbc.OracleDriver</driver>
   <url>jdbc:oracle:thin:@localhost:1521:xe</url>
   <defaultSchemaName></defaultSchemaName>
   <username>****</username>
   <password>****</password>
</configuration>`
Pavlo Chechehov
sumber
2

Koneksi con = DriverManager.getConnection ("jdbc: oracle: thin: @localhost: 1521: xe", "scott", "tiger");

Kesalahan yang saya dapatkan:

java.sql.SQLException: Listener menolak koneksi dengan kesalahan berikut: ORA-12505, TNS: listener saat ini tidak mengetahui SID yang diberikan dalam descriptor hubungkan. Deskriptor koneksi yang digunakan oleh klien adalah: localhost: 1521: xe

Bagaimana saya menyelesaikannya:

Koneksi con = DriverManager.getConnection ("jdbc: oracle: thin: localhost: 1521: xe", "scott", "tiger");

(Hapus @)

Tidak tahu mengapa, tetapi ini berfungsi sekarang ...

Srikar Madhavapeddy
sumber
1

Periksa dengan melakukan tnsping dan nama instance di mesin host. Ini akan memberi Anda uraian tns dan semua sebagian besar nama host waktu berbeda yang tidak cocok.

Saya menyelesaikan masalah saya juga

Di mesin Unix $ tnsping (Enter)

Ini memberi saya uraian lengkap di mana saya menemukan bahwa nama host berbeda .. :)

Abhishek Banik
sumber
1

Silakan periksa keduanya OracleServiceXEdan OracleXETNSListenerstatus dimulai ketika Anda menavigasi start->run->services.msc.

Hanya untuk kasus saya OracleXETNSListener dimulai tetapi OracleServiceXEtidak dimulai, ketika saya mulai right clicking -> startdan memeriksa koneksi itu berfungsi untuk saya

pengguna5211481
sumber
1

Saya punya masalah serupa di SQL Workbench.

URL:

jdbc: oracle: thin: @ 111.111.111.111: 1111: xe

tidak bekerja

URL:

jdbc: oracle: thin: @ 111.111.111.111: 1111: asdb

bekerja.

Ini membantu saya dalam situasi konkret saya. Saya khawatir, ada banyak alasan lain dengan solusi yang berbeda.

Máťa - Stitod.cz
sumber
0

Punya masalah serupa. Masalahnya mulai terjadi secara tiba-tiba - kami memiliki memuat URL koneksi basis data yang seimbang, tetapi dalam koneksi jdbc saya menunjuk ke satu db secara langsung.

Berubah untuk memuat url db seimbang dan berhasil.

Kisanagaram
sumber
2
Kami sarankan untuk menggunakan URL string koneksi yang sepenuhnya memenuhi syarat seperti yang ditunjukkan jdbc: oracle: thin: @ (DESCRIPTION = (ADDRESS = (HOST = myhost) (PORT = 1521) (PROTOCOL = tcp)) (CONNECT_DATA = (SERVICE_NAME = myorcldbservicename)))
Nirmala
0

Dalam kasus saya tidak berhasil, akhirnya saya memulai kembali oracle saya dan pendengar TNS dan semuanya bekerja. Berjuang selama 2 hari.

Amarjeet
sumber
0

Saya mendapatkan kesalahan ini ORA-12505, TNS: listener saat ini tidak mengetahui SID yang diberikan dalam descriptor hubungkan ketika saya mencoba untuk terhubung ke oracle DB menggunakan pengembang SQL.

String JDBC yang digunakan adalah jdbc: oracle: thin: @myserver: 1521 / XE , jelas yang benar dan dua layanan oracle wajib OracleServiceXE, OracleXETNSListener aktif dan berjalan .

Cara saya mengatasi masalah ini (Di Windows 10)

 1. Open run command.
 2. Type services.msc 
 3. Find services with name OracleServiceXE and OracleXETNSListener in the list.
 4. Restart OracleServiceXE service first. After completing the restart try restarting OracleXETNSListener service.
r-cerah
sumber
0

Selain menjalankan layanan (OracleServiceXE, OracleXETNSListener), ada kemungkinan perangkat lunak / firewall Anti-virus Anda masih dapat memblokirnya. Pastikan mereka tidak diblokir.masukkan deskripsi gambar di sini

sql_dummy
sumber
0

Saya baru saja memperbaikinya dengan memulai kembali / memulai oracleService dalam layanan

Shahid Hussain Abbasi
sumber
0

Peramal saya berhenti bekerja dan saya mendapatkan kesalahan ini. Saya me-restart mesin saya dan juga mencoba solusi di atas. Pada akhirnya, saya membuka layanan komponen dan memulai kembali layanan oracle dan semuanya mulai berfungsi. Semoga ini bisa membantu seseorang.

rj4u
sumber
0

Saya baru saja membuat tautan basis data secara tidak benar.

Perbaikan sederhana bagi saya adalah dengan mengubah 'SID' menjadi SERVICE_NAME

CREATE DATABASE LINK my_db_link
CONNECT TO myUser IDENTIFIED BY myPassword
USING
'
(
    DESCRIPTION=
    (
        ADDRESS=
        (PROTOCOL=TCP)
        (HOST=host-name-heren)
        (PORT=1521)
    )
    (CONNECT_DATA=(SID=theNameOfTheDatabase))
)';

Berubah

SID=theNameOfTheDatabase

untuk

SERVICE_NAME=theNameOfTheDatabase 

menyelesaikan masalah saya.

Paul
sumber