Oracle 11g dinleyicisi ORA-12514 ve ORA-12505 hatalarıyla başarısız oluyor


17

Geliştirme makinemde yerel olarak Oracle 11g örneğini çalıştırıyorum ve yerel örneğe doğrudan SqlPlus aracılığıyla bağlanabiliyorum:

c:\>sqlplus ace

SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 11 11:50:20 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta

SQL> select count(*) from my_table ;

  COUNT(*)
----------
      5297

Ama dinleyici aracılığıyla ona bağlanamıyorum:

c:\>sqlplus -L "user/pw@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))"

SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 11 11:52:40 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor


SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus

Benzer şekilde, SqlDeveloper üzerinden bağlanırsam bir hata alıyorum (yine de ORA-12505, TNS:listener does not currently know of SID given in connect descriptor).

Bu örnek, Pazartesi sabahı bugüne kadar bir yıl veya daha uzun bir süredir istikrarlı ve iyi çalışıyor. Kurumsal BT'miz bazen hafta sonu yeni politikalar ve güncellemeler getiriyor, bu yüzden bir şeyin değiştiğini varsayıyorum, ancak neyi çözemedim.

Hizmeti ve dinleyiciyi birkaç kez yeniden başlattım, dinleyici günlüğü herhangi bir ipucu vermiyor.

Dinleyici iyi görünüyor:

c:\>lsnrctl status

LSNRCTL for 32-bit Windows: Version 11.2.0.2.0 - Beta on 11-MAR-2013 11:55:33

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 32-bit Windows: Version 11.2.0.2.0 - Beta
Start Date                11-MAR-2013 11:17:30
Uptime                    0 days 0 hr. 38 min. 3 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           XE
Listener Parameter File   C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora
Listener Log File         C:\oraclexe\app\oracle\diag\tnslsnr\FBC305BB46560\listener\alert\log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=machine.domain.com)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

Port 1521 iyi görünüyor:

c:\>netstat -an -O | find /i "1521"
  TCP    0.0.0.0:1521           0.0.0.0:0              LISTENING       4368
  TCP    169.243.90.109:55307   159.185.207.100:1521   ESTABLISHED     12416
  TCP    [::]:1521              [::]:0                 LISTENING       4368

(PID 4368, TNSLSNR.exe işlemidir.)

Ayrıca, tnspingXE hizmetine yapabilirim:

c:\>tnsping xe

TNS Ping Utility for 32-bit Windows: Version 11.2.0.2.0 - Beta on 11-MAR-2013 12:27:47

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

Used parameter files:
C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = machine.domain.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
OK (210 msec)

listenerr.oradosya:

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

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = machine.domain.com)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

Ayrıca ve ilgili olup olmadığı hakkında hiçbir fikrim yok, https://127.0.0.1:8080/apex(bu izinleri iyi görünse bile) üzerinde apeks erişemiyorum .

Başka nereye bakmalıyım?

İstenen bilgilerle güncelleme :

SQL> show parameter service_names

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      XE
SQL> show parameter local_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string

Güncelleme2 : @ miracle173'ün doğru şekilde işaret ettiği gibi, dinleyici iyi değildi . Güncellenmiş 'local_listener' parametresi ile artık ek bilgiler gösteriliyor:

Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=machine.domain.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
Service "xe" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully

INSTANCE_NAMEBaşlatma parametrenizin ve ORACLE_SIDortam değişkeninizin değerleri nelerdir ? Veritabanınız bir nedenle varsayılan dinleyiciye kaydolmuyor. Vermeyi deneyin alter system register;ve sonra veritabanına yeniden bağlanın.
Yasir Arsanukaev

@YasirArsanukaev örnek_adı 'xe' (alakalı ise küçük harf) ve ORACLE_SID ortam değişkenim yok.
Lisanssız

3
iki not: "dinleyici iyi görünüyor": Ben öyle düşünmüyorum çünkü "XE" adlı bir hizmet görüntülemiyor "XE hizmetine ping atabilirim": tnsping dinleyiciye bağlanır ancak hizmetler hakkında rahatsız olmaz. bu nedenle yalnızca dinleyicinin açık ve çalışır durumda olduğunu gösterebilirsiniz ancak dinleyicinin bir hizmet kaydettirip kaydetmediğini kontrol etmek için ist'i kullanamazsınız. Bu nedenle "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))" bağlantı noktası bir dinleyici çalışıyorsa başarılı olur 1521 yerel barındırma hizmeti olmasa bile.
miracle173

Bugün aynı problemle karşılaştım ve @ miracle173 açıklandığı gibi alert.log dosyasında bir kayıt var. Oracle bir sanal makine üzerinde çalışıyor. VM'de, hem hostname hem de hostname.domain öğelerinin tümü 127.0.0.1'den (localhost) farklı bir IP adresine işaret eder. Eşlemeyi zorlamak için hosts dosyasını (Windows \ system32 \ drivers \ etc) değiştirdikten sonra, artık her şey yolunda.

alter kaydı sorunu çözdü .. teşekkürler :)
user116258

Yanıtlar:


15

Bu yüzden, @YasirArsanukaev'e verdiği süre sayesinde, işe yarayan ama gerçekten açıklayamadığım bir çözüm buldum.

Düşünceye dayanarak, bu diğer yanıtı söylediği yerde LOCAL_LISTENERokuyordum :

Veritabanı, kayıt olması gereken dinleyiciyi tanımlamak için LOCAL_LISTENER parametresini kullanır. Varsayılan olarak, bu null değeridir; bu, belgelere göre ana bilgisayar adına eşdeğerdir: 1521.

Bu yüzden kendi ana bilgisayar adımı pinglemeye çalıştım ve yapamadım - genel bir hata mesajı alan bazı IPv6 problemlerine benziyor.

Bu yüzden bu cevaptan tavsiye aldım

SQL> alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope=both;
SQL> alter system register;

ve muhtemelen yerel ana bilgisayar başvurusunu çözümleyebildiği için, gerçek ana bilgisayar adını çözemediği için çalışıyor.


1
aslında çözümü gözden geçirdiniz: veritabanının varsayılan LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP) (HOST = ana bilgisayar adı) (PORT = 1521))' olarak otomatik olarak yeniden yapılandırılması (burada ana bilgisayar adı, makinenin ağ adıdır) çalışmıyor çünkü makineye bu adla ulaşmak için bir sorun var. Belki de veritabanının kayıt sorunu hakkında alert.log veya bazı sqnlnet.log (% ORACLE_HOME% / network / log /)
girişleri var

@Unsliced ​​Aslında aynı sorun var, benim durumum için kullanılan hizmet kimliği ".Domain.local" postfix metni kaldırıldı çünkü çözüldü.
Nap

iki alter ifadeleri çalışan benim için tns listner hata mesajı çözüldü ve ben bağlanmak mümkün
smartexpert
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.