Oracle 11g 리스너가 ORA-12514 및 ORA-12505 오류로 실패


17

개발 시스템에서 Oracle 11g 인스턴스를 로컬로 실행하고 SqlPlus를 통해 로컬 인스턴스에 직접 연결할 수 있습니다.

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

그러나 청취자를 통해 연결할 수 없습니다.

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

마찬가지로 SqlDeveloper를 통해 연결하면 오류가 발생합니다 ( ORA-12505, TNS:listener does not currently know of SID given in connect descriptor).

이 인스턴스는 월요일 아침까지 오늘까지 1 년 이상 안정적으로 작동했습니다. 우리 회사의 IT 부서는 주말에 새로운 정책과 업데이트를 추진하기 때문에 변경 사항이 있다고 가정하지만 그 결과를 해결할 수 없었습니다.

서비스와 리스너를 여러 번 다시 시작했는데 리스너 로그에 실마리가 없습니다.

리스너는 괜찮아 보입니다 :

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

포트 1521은 정상인 것 같습니다.

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 프로세스입니다.)

또한 tnspingXE 서비스를 사용할 수 있습니다 .

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.ora파일 :

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)

또한 관련이 있는지 잘 모르겠습니다. 정점에 액세스 할 수 없습니다 https://127.0.0.1:8080/apex(사용 권한이 괜찮아 보이지만).

다른 곳을 찾아야합니까?

요청 된 정보로 업데이트 :

SQL> show parameter service_names

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

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

Update2 : @ miracle173이 올바르게 지적 했으므로 리스너 가 좋지 않았습니다 . 업데이트 된 'local_listener'매개 변수를 사용하면 추가 정보가 표시됩니다.

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_NAME초기화 매개 변수 및 ORACLE_SID환경 변수 의 값은 무엇입니까 ? 어떤 이유로 데이터베이스가 기본 리스너에 등록되지 않습니다. alter system register;데이터베이스 를 발행 한 후 다시 연결하십시오.
Yasir Arsanukaev

@YasirArsanukaev instance_name은 'xe'(관련된 경우 소문자)이며 ORACLE_SID 환경 변수가 없습니다.
Unsliced

3
두 가지 참고 사항 : "청취 인은 괜찮아 보인다": "XE"라는 서비스를 표시하지 않기 때문에 그렇게 생각하지 않습니다. "XE 서비스를 핑할 수 있습니다": tnsping은 리스너에 연결하지만 서비스에 대해서는 신경 쓰지 않습니다. 따라서 리스너가 시작되어 실행중인지만 표시 할 수 있지만 리스너가 서비스를 등록했는지 확인하기 위해 ist를 사용할 수 없습니다. 따라서 리스너가 포트에서 실행중인 경우 "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))"를 tnsping하면 성공합니다 서비스가 존재하지 않더라도 localhost의 1521
miracle173

나는 오늘 같은 문제에 부딪 쳤고 @ miracle173이 설명한 것처럼 alert.log에 등록이 있습니다. Oracle이 VM에서 실행 중입니다. VM에서 호스트 이름과 호스트 이름. 도메인이 모두 127.0.0.1 (localhost)과 다른 IP 주소를 가리 킵니다. 호스트 파일 (Windows \ system32 \ drivers \ etc)을 수정하여 매핑을 강제 실행 한 후 모든 것이 정상입니다.

ALTER이 문제 .. 감사에게 : 고정 레지스터
user116258

답변:


15

그래서 그가 넣은 시간 동안 @YasirArsanukaev 덕분에 나는 효과가 있지만 실제로는 설명 할 수없는 해결책을 찾았습니다.

LOCAL_LISTENER생각을 듣자 나는 다른 대답 을 읽었 습니다.

데이터베이스는 LOCAL_LISTENER 매개 변수를 사용하여 등록해야하는 리스너를 식별합니다. 기본적으로이 값은 null이며 설명서에 따라 hostname : 1521과 같습니다.

그래서 나는 내 자신의 호스트 이름을 핑하려고했지만 실패했습니다. 일반적인 실패 메시지를 수신하는 일부 IPv6 문제처럼 보입니다.

그래서 나는 그 대답에서 조언을 얻었습니다.

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

로컬 호스트 참조를 확인할 수 있기 때문에 실제 호스트 이름 확인에 실패했기 때문에 이제 작동합니다.


1
실제로 솔루션을 설명했습니다. 데이터베이스를 기본 LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP) (HOST = hostname) (PORT = 1521))'(자동으로 호스트 이름은 시스템의 네트워크 이름 임) 이 이름으로 기기에 연결하는 데 문제가 있기 때문에 작동하지 않습니다. 데이터베이스의 등록 문제에 대한 alert.log 또는 일부 sqnlnet.log (% ORACLE_HOME % / network / log /) 항목이있을 수 있습니다.
miracle173

@Unsliced ​​실제로 같은 문제가 있습니다. 사용 된 서비스 ID가 ".Domain.local"접미사 텍스트를 제거했기 때문에 해결되었습니다.
Nap

두 개의 alter 문을 실행하면 나를 위해 tns listner 오류 메시지가 해결되었으며 연결할 수있었습니다
smartexpert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.