데이터베이스 연결 오류 기록 ORA-12560, ORA-12518

7536 단어
환경: Win Server 2008 R2 + Oracle 11.2.0.1 장애: 데이터베이스 연결이 안 되고 본체sysdba와 네트워크 연결이 안 된다는 것을 고객이 반영합니다.
1. 고장 확인
  • 1.1 서버에서sysdba 로그인 시도
  • 1.2 서버가 네트워크를 통해 접속 시도
  • 2. 원인 조사
  • 2.1 ORA-12560 오류 초기 조사 원인
  • 2.2 ORA-12518 오류 조사 원인
  • 2.3 ORA-12560 오류 재조사 원인
  • 1. 고장 확인


    1.1 서버sysdba 로그인 시도

    PS C:\Users\Administrator> sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.1.0 Production on   2  18 09:39:14 2016
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    
    ERROR:
    ORA-12560: TNS:  

    1.2 서버가 네트워크로 연결 시도

    PS C:\Users\Administrator> sqlplus system/oracle@xxoradb
    
    SQL*Plus: Release 11.2.0.1.0 Production on   2  18 09:34:01 2016
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    
    ERROR:
    ORA-12518: TNS:  

    2. 원인 조사


    2.1 ORA-12560 오류의 초기 원인 파악


    ORA-12560 오류 공식 설명:
    $ oerr ora 12560
    12560, 00000, "TNS:protocol adapter error"
    // *Cause: A generic protocol adapter error occurred.
    // *Action: Check addresses used for proper protocol specification. Before
    // reporting this error, look at the error stack and check for lower level
    // transport errors. For further details, turn on tracing and reexecute the
    // operation. Turn off tracing when the operation is complete.

    MOS 관련 문서: Windows에서 ORA-12560이 포함된 Bequeath connection fails(문서 ID 1986438.1)의 원인:
    Environmental variables are not set correctly. This is a common issue on Windows. The following commands do not show proper settings: echo %ORACLE_HOME% echo %ORACLE_SID% echo %PATH%
    해결 방법:
    Please do the following:
    set ORACLE_HOME= <<<<< enter the Oracle Home path here set ORACLE_SID= <<<<< enter the Oracle SID name here set PATH=%PATH%; <<<<< add the path of %ORACLE_HOME%/bin <<<<< this is the directory where "sqlplus.exe"exists echo %ORACLE_HOME% <<<<< this verifies the Oracle home value echo %ORACLE_SID% <<<<< this verifies the Oracle SID value
    하지만 현재 상황은 환경 변수 ORACLE_SID 설정에 문제가 없습니다.Windows 환경, ORACLE_HOME은 환경 변수에 설정할 필요가 없으며 이 ORACLE_에 대한 레지스트리HOME 환경 변수에 대한 질문은 MOS의 다른 글을 참조하십시오. How to Set or Switch Oracle Homes on Windows(Doc ID 969581.1)
    업무가 현재 중단된 상태이기 때문에 감청과 데이터베이스 서비스를 재개하고 등록표 정보를 검사할 수 있지만 문제는 여전하다.여기는 실제로 커브길을 걷고 있습니다. sqlplus 명령은 정상적으로 사용되기 때문에 환경 변수 방면에서 PATH에 대해 많이 생각하지 않습니다.

    2.2 ORA-12518 오류 확인 원인


    ORA-12518 오류 공식 설명:
    $ oerr ora 12518
    12518, 00000, "TNS:listener could not hand off client connection"
    // *Cause: The process of handing off a client connection to another process
    // failed.
    // *Action: Turn on listener tracing and re-execute the operation. Verify
    // that the listener and database instance are properly configured for
    // direct handoff.  If problem persists, call Oracle Support.
    // *Comment: The problem can be worked around by configuring dispatcher(s)
    // to specifically handle the desired presentation(s), and connecting
    // directly to the dispatcher, bypassing the listener.

    현재 모니터링 구성 파일을 보려면 다음과 같이 하십시오.
    # listener.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1
    etwork\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-1XXXXXXXXXX)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC521)) ) ) ADR_BASE_LISTENER = D:\app\Administrator

    감청 프로파일을 수정하여 정적 감청 프로파일에 추가하려면 다음과 같이 하십시오.
    # listener.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1
    etwork\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) (SID_DESC = (GLOBAL_DBNAME = xxoradb) (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1) (SID_NAME = xxoradb) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-1XXXXXXXXXX)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC521)) ) ) ADR_BASE_LISTENER = D:\app\Administrator

    감청을 다시 시작한 후 테스트를 해보니 정적 감청을 넣으면 데이터베이스에 연결할 수 있고 서버의 PL/SQL 도구도 데이터베이스에 정상적으로 연결할 수 있습니다.
    C:\Users\Administrator>sqlplus system/oracle@xxoradb
    
    SQL*Plus: Release 11.2.0.1.0 Production on   2  18 10:52:24 2016
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    
    
     :
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL>

    이렇게 하면 클라이언트 네트워크 연결 문제를 먼저 해결했다.

    2.3 ORA-12560 오류 원인 재조사

    클라이언트의 연결 문제를 해결했지만 문제가 완벽하게 해결되지 않았습니다. 현재 로컬sysdba는 여전히 로그인할 수 없고 ORA-12560을 잘못 보고했기 때문입니다.
    C:\Users\Administrator>sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.1.0 Production on   2  18 10:59:11 2016
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    
    ERROR:
    ORA-12560: TNS:  
    
    
     :

    이때 기계에 여러 개의 Oracle 프로그램이 설치되어 있을 수도 있다는 의심이 들었다. 즉, 이 sqlplus 명령은 어떤 클라이언트의 sqlplus 프로그램일 수도 있다. 다음은 이 상황인지 검증해 보자.
    Oracle 제품 디렉토리에서 11.2.0 폴더 아래에 여러 폴더가 있는 것을 볼 수 있습니다.
    D:\app\Administrator\product\11.2.0>dir
       D  。
       0A43-E08A
    
     D:\app\Administrator\product\11.2.0  
    
    2016/01/26  12:26    <DIR>          .
    2016/01/26  12:26    <DIR>          ..
    2016/01/26  12:35    <DIR>          client_1
    2016/01/26  12:23    <DIR>          dbhome_1
    2016/01/26  12:25    <DIR>          dbhome_2
                   0                0  
                   5   200,137,936,896  

    여러 개의 Oracle 소프트웨어가 설치되어 있는 것으로 보입니다. 이름 규칙을 보면 클라이언트 1개, DB 2개가 있어야 합니다.
    현재 시스템 레지스트리에서 ORACLE_ 보기HOME의 값은 D:\app\Administrator\product\11.2.0\dbhome_1 그러면 우리가 사용하는 qlplus 프로그램은 이 경로 아래에 있는 것입니까?시스템 환경 변수 PATH 값을 더 보려면
    D:\app\Administrator\product\11.2.0\client_1\BIN;D:\app\Administrator\product\11.2.0\dbhome_1\BIN;D:\app\Administrator\product\11.2.0\dbhome_1;C:\Program Files (x86)\Common Files\NetSarang;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

    역시 첫 번째 검색 경로는 클라이언트입니다. 우리가 원하는 서버 프로그램 경로가 아니라 두 번째 경로입니다.이제 문제는 명백해졌다. 우리는 클라이언트의 이 경로D:\app\Administrator\product\11.2.0\client_1\BIN;를 삭제했다.그리고 cmd를 다시 열면 정상적인sysdba 로그인이 가능합니다
    C:\Users\Administrator>sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.1.0 Production on   2  18 11:16:53 2016
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    
    
     :
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL>

    마지막으로 PL/SQL과 같은 도구도 다시 정상적으로 로그인할 수 있는지 확인하십시오.이로써 문제는 완벽하게 해결되었다.

    좋은 웹페이지 즐겨찾기