ORA-12505, TNS: dinleyici şu anda bağlantı tanımlayıcısında verilen SID'yi bilmiyor


154

Windows 7 64 bit işletim sistemime Oracle 11g Express Edition Release 2'yi yükledim ve JDBC programını çalıştırmayı denedim, sonra aşağıdaki hatayı aldım:

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

1
OracleServiceXE ürününü el ile hizmetlerden başlatmak benim için çalıştı.
Sen

Yanıtlar:


184

Benim jdbc dize düzelterek bu sorunu düzeltti.

Örneğin, doğru jdbc dizesi ...

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

Ama kullandığım jdbs dizesi ...

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

(Not: arasında 1521ve XEolmalıdır a /)

Bu kötü jdbc dize de bana bir ORA-12505 hatası verir.


53
A / it kullanırsanız, bir net hizmet adı, iki nokta üst üste kullanırsanız bir SID olur.
eckes

89

Bu soruna neden olabilecek birkaç şey vardır, ancak JDBC'yi kullanmaya başlamadan önce, SQL * Plus kullanarak veritabanına bağlanabildiğinizden emin olmanız gerekir. SQL * Plus'ı bilmiyorsanız, Oracle'ın uzun süredir standart bir parçası olan Oracle veritabanlarına bağlanmak için bir komut satırı aracıdır ve Oracle XE ile birlikte gelir.

JDBC kullanarak bir Oracle veritabanına bağlanırken, veritabanına doğrudan bağlanamazsınız. Bunun yerine, sizi veritabanına bağlayan bir TNS dinleyicisine bağlanırsınız. Hata ORA-12505, dinleyicinin açık olduğu ve ona bağlanabileceğiniz anlamına gelir, ancak veritabanının açık olduğunu bilmediği için sizi veritabanına bağlayamadı. Bunun iki nedeni var:

  • veritabanı başlatılmadı,
  • veritabanı dinleyiciye kayıtlı değildir, örneğin veritabanı dinleyiciden önce başlatıldığından. (Veritabanı başladığında, zaten çalışıyorsa kendisini bir dinleyiciye kaydeder. Dinleyici çalışmıyorsa, veritabanı kendisini kaydetmez ve dinleyici başlatılırsa, olabilecek veritabanlarını aramaz. kayıt olun.)

ORA-12505, dinleyicinin bu veritabanını bildiği anlamına gelir, ancak dinleyici veritabanından veritabanının açık olduğuna dair bir bildirim almaz. (Yanlış SID kullanarak yanlış veritabanına bağlanmaya çalışıyorsanız, "TNS: belirtilen bağlantı tanımlayıcısını çözemedi" şeklinde bir ORA-12154 hatası alırsınız.)

Hizmetler ek bileşeninde hangi Oracle hizmetleri çalışıyor? (Bunu Denetim Masası> Yönetimsel Araçlar> Hizmetler'den açın veya yalnızca Başlat> Çalıştır> services.msc.) OracleServiceXE ve OracleXETNSListener hizmetlerinin çalışması gerekir.

Hizmetlerin her ikisi de başlatılmışsa, komut isteminde aşağıdakilerden birini kullanarak SQL * Plus'ta veritabanına bağlanabilir misiniz? (Bunları Oracle XE'yi yüklediğiniz makinede çalıştırdığınızı varsayıyorum.)

sqlplus sistem / sistem şifresi @XE
sqlplus sistem / sistem şifresi
sqlplus / sysdba olarak

( system-passwordOracle XE yüklemesi sırasında SYS ve SYSTEM kullanıcıları için belirlediğiniz parola ile değiştirin .)

Bu üçünden ilki TNS dinleyicisi aracılığıyla bağlanır, ancak ikincisi dinleyiciden geçmeden doğrudan veritabanına bağlanır ve yalnızca veritabanıyla aynı makinedeyseniz çalışır. Birincisi başarısız, ancak diğer ikisi başarılı olursa, JDBC bağlantıları da başarısız olur. Öyleyse, diğer ikisinden birini kullanarak veritabanına bağlanın ve çalıştırın ALTER SYSTEM REGISTER. Ardından SQL * Plus'tan çıkın ve ilk formu tekrar deneyin.

Üçüncüsü başarısız, ancak ikincisi işe yarıyorsa, kullanıcı hesabınızı ora_dba grubuna ekleyin. Bunu Denetim Masası> Bilgisayar Yönetimi> Yerel Kullanıcılar ve Gruplar bölümünde yapın.

Bir kez formun bağlantılarını alabilirsiniz

sqlplus sistem / sistem şifresi @XE

Çalışmak için Oracle XE'ye JDBC aracılığıyla bağlanabilmelisiniz. (Bu arada, veritabanına bağlanmak için kullandığınız JDBC kodunu bize göstermediniz, ancak bunun büyük olasılıkla doğru olduğundan şüpheleniyorum; bağlantı dizesinin bölümleri yanlış olsaydı başka çeşitli hatalar olurdu.)


3
@Raj: Düzenlemenizin yanıta ne getirdiğini göremiyorum, bu yüzden sildim. Bir soruya önemli miktarda katkıda bulunmak istiyorsanız, lütfen başkalarının yanıtlarını düzenlemek yerine kendi yanıtınızı gönderin.
Luke Woodward

@LukeWoodward Ben SP2-0734: unknown command beginning "system/ora..." - rest of line ignored. tüm 3 bu hatayı alıyorum
vaibhavcool20

1
@ qtpseleniumSupport: bu ileti SQL * Plus'ta olduğunuzu ve satıra girdiğinizi söylüyor system/ora...(veya SQL * Plus bu satırı okumasını söylediğiniz bir dosyadan okuyor). Yukarıda verdiğim komut satırlarının komut istemi / kabuk / Terminal penceresinden kullanılması amaçlanmıştır. Zaten SQL * Plus çalıştırıyorsanız, yerini sqlplusile connect.
Luke Woodward

msgstr "veritabanı dinleyiciye kayıtlı değil, örneğin veritabanı dinleyiciden önce başlatıldığından." - bu kadar, teşekkürler!
Ursache

47

Ben de aynı hatayı aldım ama denendiğinde üçü de başarısız oldu. Yukarıdaki üç başarısız olursa, hizmeti (benim durumumda XE) eksik bulursanız LSNRCTL durumunu deneyin

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

Şimdi hizmeti görebilirsiniz Görmüyor
olsanız bile bunu deneyin

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

Bu muhtemelen işe yarayacaktır ...


2
Başardın adamım! local_listenerAyarlandıktan sonra orcl dinleyicisi şimdi gösteriliyor lsnrctl. Milyonlarca kez teşekkürler!
asgs

Bu benim sistem çalışması var, ama aşağıdaki koştum unutmayın: ALTER SYSTEM set local-listener = XE;
Daniel Williams

yazdığımda: 'alter system set local_listener =' (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521)) 'scope = both;' Bir hata döndürür: bu ORA-65040: operation not allowed from within a pluggable databasene anlama geliyor? JDBC yapılandırılamıyor: /
Alg_D

1
en çok oy alan cevapların her ikisi de yardımcı oldu, ancak bu daha fazla yardımcı oldu. Bir dinleyici adresi olarak 127.0.0.1'e sahip değildim (PC'imin yerel adı olan bir tane vardı). Bu yenisini ekleyerek çalışmaya başladı
johnbr

alter system set local_listener = ... benim için çalıştı.
Ben Asmussen

31

Bu hatayı aldığınızda "ORA-12505, TNS: dinleyici şu anda bağlantı tanımlayıcısında verilen SID'yi bilmiyor"

Çözüm: Hizmetleri açın ve OracleServiceXEardından bağlanmaya çalışın ...


Aynı sorun vardı ama OracleServiceXE.There nedenle, bir OracleServiceXE hizmetini yeniden başlatmak benim için çalıştı. Nedenini bilmiyor musun ?!
Hamedz

OracleServiceXE ararken, XE'nin veri tabanı SID'sine karşılık geldiğini unutmayın, bu nedenle doğru hizmeti, OracleService [SID] aradığınızdan emin olun
Sandoval0992

10

Bu istisna için bazı nedenler buldum.

1) Varsayılan olarak XE veritabanının adı. Url " jdbc: oracle: thin: @localhost: 1521: XE " olacaktır.

2) OracleServiceXE, OracleXETNSListener'ın çalıştığından emin olun. Denetim Masası \ Tüm Denetim Masası Öğeleri \ Yönetimsel Araçlar \ Hizmetler'de olacaktır.


8

JDBC kodumu düzelterek bu sorunu çözdüm.

doğru JDBC dizesi ...

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

Ama kullandığım JDBC dizesi ...

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

Bu nedenle, xe yerine orcl belirtme hatası, SID adı yanlış olduğundan bu hatayı gösterdi.


Benim durumumda conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");çalıştı.
Pran Kumar Sarkar

8

Aşağıdaki kodu kullandığımda sorunum çözüldü:

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

7

Benzer bir hatayla karşılaştık, yukarıdaki çözümlerden herhangi biri yardımcı olmadı. Listner.ora dosyasında bir sorun oluştu. Yanlışlıkla ben ilave etmişti SIDdışına SID_LIST(yıldızlı * arasındaki bölüme) aşağıya bakın.

 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)

Bu hata aşağıdaki gibi düzeltildi:

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)

Durduruldu ve veritabanı resim açıklamasını buraya girin

Denetim Masası \ Tüm Denetim Masası Öğeleri \ Yönetimsel Araçlar \ Hizmetler'e giderek otomatik olarak durmadığından dinleyicilerin OracleServiceXE ve OracleXETNSListener'ı manuel olarak durdurdu. Veritabanı yeniden başlatıldı ve bir cazibe gibi çalıştı.


4

Başlangıçta buraya aynı problemle geldim. Jus'u Oracle 8c'yi Windows 8'e (64 bit) yükledim, ancak o zamandan beri komut satırında 'TNSPING xe' ile çözdüm ... Bağlantı kurulmadıysa veya adı bulunmadıysa, veritabanı adını deneyin, benim durumumda yine 'orcl' ... 'TNSPING orcl' idi ve başarılı bir şekilde ping yaparsa, bu durumda SID'yi 'orcl' olarak değiştirmelisiniz (veya kullanılan veritabanı adı u) ...


4

Yaygın olarak tartışılmadığım bir olasılık, ana makine adını ana makinenin kendisinde çözerken bir sorun olabileceğidir. / Etc / hosts için $ (hostname) girdisi yoksa, Oracle dinleyicisi karışır ve gelmez.

Bu benim sorunum çıktı ve / etc / hosts ana bilgisayar adı ve ip adresi eklemek sorunu çözdü.



4

Oracle SQL Developer'da çalışan bir bağlantınız varsa, URL'nizi oluşturmak için aşağıdaki resimde açıklandığı gibi bağlantı menüsündeki bilgileri kullanın:

resim açıklamasını buraya girin

Yukarıdaki örnekte, URL şöyle olacaktır: jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice

Bir SID kullanıyorsanız, ana bilgisayar adından sonra eğik çizgi ("/") yerine iki nokta üst üste (":") olduğunu unutmayın.


2

Ben de aynı sorunla karşılaştım. VMware kullanarak Oracle Express edition 10g'yi Windows XP işletim sistemine yükledim ve iyi çalışıyordu. 10g tarafından sağlanan SQL yardımcı programına SQL sorguları yazmak çok garip olduğundan ve SQL geliştirici ile çalışmaya alışkın olduğumdan, XP'de 32 bit SQL geliştirici kurdum ve DB SID "XE" bağlantımı denedim. Ancak bağlantı-ORA-12505 hatasıyla başarısız oldu TNS dinleyicisi şu anda bağlantı tanımlayıcısında verilen SID'yi bilmiyor. Ben SQL yardımcı programı ile iyi çalışıyor beri bu sorunun nasıl oluştuğuna denizde ve ben de aynı kullanarak birkaç Informatica eşlemeleri oluşturmuştu. Ben bu konuda bu yüzden çok göz attım ve halka açık forumlarda "lsnrctl" durumunu ping sonra ama boşuna bana sunulan önerileri uyguladı. Ancak bu sabah yeniden yeni bir bağlantı kurmaya çalıştım, ve Voila, hiçbir sorun olmadan çalıştı. Bazen dinleyici DB bağlanır ya da bir şey önce dinler birkaç burada okuduktan sonra tahmin ediyorum (burada bir acemi olduğum gibi benim kaba referans için affedersiniz) ama ben sadece makineyi yeniden başlatmak ve tekrar kontrol etmenizi öneririz.


2

Ben bu sorunu çözmek için aynı sorunu vardı ilk dinleyici kullanarak kullanarak yeniden yapılandırdıktan netcasonra kullanarak ORCL olan eski veritabanımı sildi dbcave sonra tekrar kullanarak yeni veritabanı oluşturdudbca


2

Aynı sorunla karşılaştım ve OracleServiceXE hizmetini yeniden başlatarak çözdüm. Services.msc dosyasına gidin ve 'OracleServiceXE' hizmetinin çalışır durumda olduğunu doğrulayın


2

TNSNAMES.ora dosyamda " SID " i " SERVICE_NAME " olarak değiştirerek bu sorunu çözdüm.

Lütfen DB'nizin SID veya SERVICE_NAME isteyip istemediğine bakın.

Şerefe


2

Oracle Express Edition kullanıyorsanız, bu URL'ye sahip olmalısınız

jdbc: oracle: ince: @localhost: 1521: xe veya jdbc: oracle: ince: @localhost: 1521 / XE

Pom.xml dosyasında liquibase config plugin ile benzer bir sorun yaşadım. Ve yapılandırmamı değiştirdim:

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

2

Bağlantı con = DriverManager.getConnection ("jdbc: oracle: thin: @localhost: 1521: xe", "scott", "kaplan");

Hata aldım:

java.sql.SQLException: Dinleyici aşağıdaki hatayla bağlantıyı reddetti: ORA-12505, TNS: dinleyici şu anda bağlantı tanımlayıcısında verilen SID'yi bilmiyor İstemci tarafından kullanılan Bağlantı tanımlayıcısı şuydu: localhost: 1521: xe

Nasıl çözdüm:

Bağlantı con = DriverManager.getConnection ("jdbc: oracle: ince: localhost: 1521: xe", "scott", "kaplan");

(Kaldırmak @)

Neden bilmiyorum, ama şimdi çalışıyor ...


1

Ana makinede tnsping ve örnek adı yaparak kontrol edin. U tns tanımını verecektir ve çoğu zaman ana bilgisayar adı farklı olan eşleşmiyor.

Sorunumu benzer şekilde çözdüm

Unix makinesinde $ tnsping (Enter)

Ana bilgisayar adının farklı olduğunu bulduğum tam tns açıklaması veriyor .. :)


1

Lütfen ikisini de kontrol edin OracleServiceXEve OracleXETNSListenergezinirken durumun başlatılmasını sağlayın start->run->services.msc.

Benim durumum sadece OracleXETNSListenerbaşladı ama OracleServiceXEbaşlamadı, ben tarafından başladı right clicking -> startve bağlantı kontrol benim için çalışıyor


1

SQL Workbench benzer bir sorun vardı.

URL:

jdbc: oracle: ince: @ 111.111.111.111: 1111: xe

çalışmıyor.

URL:

jdbc: oracle: ince: @ 111.111.111.111: 1111: asdb

İşler.

Bu somut durumumda bana yardımcı oluyor. Korkarım, bu farklı çözümlerle başka birçok neden olabilir.


0

Benzer bir sorun vardı. Sorun aniden oluşmaya başladı - yük dengeli veritabanı bağlantı URL'si yaşıyoruz, ancak jdbc bağlantılarında doğrudan tek bir db'yi işaret ediyordum.

Dengeli db url'yi yükledi ve işe yaradı.


2
Jdbc: oracle: thin: @ (tam adres bağlantı URL'sini gösterildiği gibi kullanmanızı öneririz)
Nirmala

0

Benim durumumda çalışmıyordu, sonunda oracle ve TNS dinleyicimi yeniden başlattım ve her şey çalıştı. 2 gün boyunca mücadele ediyordu.


0

Bu hatayı aldım ORA-12505, TNS: dinleyici şu anda SQL geliştirici kullanarak oracle DB bağlanmaya çalıştığınızda bağlantı tanımlayıcı verilen SID bilmiyor .

Kullanılan JDBC dizesi jdbc: oracle: thin: myserver: 1521 / XE idi , tabii ki doğru olan ve iki zorunlu oracle hizmeti OracleServiceXE, OracleXETNSListener çalışıyor .

Bu sorunu çözme şeklim (Windows 10'da)

 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.

0

Hizmetlerin (OracleServiceXE, OracleXETNSListener) yanı sıra, Anti-virüs yazılımınızın / güvenlik duvarınızın bunları engelleme olasılığı vardır. Sadece engellenmediklerinden emin olun.resim açıklamasını buraya girin



0

Kahinim durdu ve bu hatayı alıyordum. Makinemi yeniden başlattım ve yukarıdaki çözümleri de denedim. Sonuçta, bileşen hizmetleri açtım ve oracle hizmetlerini yeniden başlattım ve her şey çalışmaya başladı. Umarım bu birine yardımcı olur.


0

Sadece veritabanı bağlantısını yanlış oluşturuyordum.

Benim için basit bir düzeltme, 'SID'i SERVICE_NAME olarak değiştirmekti

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))
)';

Değiştirme

SID=theNameOfTheDatabase

için

SERVICE_NAME=theNameOfTheDatabase 

sorunumu çözdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.