programing

ORA-12170: TNS: Connect 타임아웃 발생

lastmoon 2023. 3. 18. 09:16
반응형

ORA-12170: TNS: Connect 타임아웃 발생

Oracle Toad를 사용하여 노트북의 데이터베이스에 연결하려고 했지만 계속 다음 오류가 발생했습니다.

ORA-12170: TNS: Connect 타임아웃 발생

이 에러가 계속 발생하는 원인은 무엇입니까?

어제 같은 데이터베이스에 접속해서 접속할 수 있었어요.

[댓글에 답을 모으는 중]

문제는 Oracle 서비스가 IP 주소에서 실행되고 있고 호스트가 다른 IP 주소로 구성되어 있다는 것입니다.

서비스의 IP 주소를 합니다.lsnrctl status명령어를 실행하여 보고된 주소를 확인합니다(이 경우 localhost는 127.0.0.1).

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))

주소를 하려면 , 「IP」를 합니다.ipconfig 아래) (창 아래)ifconfig(리눅스) ★★★★★★★★★★★★★★★★★★★★★★★★★★★」

설치 환경에서 로컬 호스트 주소로 설정하면 Oracle 서비스가 작동하지 않으므로 실제 호스트 IP 주소(예: 192.168.10.X)를 설정해야 합니다.

나중에 이 문제를 방지하려면 호스트의 IP 주소를 할당하는 데 DHCP를 사용하지 말고 정적 주소를 사용하십시오.

SID가 충돌하기 때문입니다.예를 들어 Oracle 12cBase\app\product\12.1.0\dbhome_1\NETWORK\ADM 입니다.IN\tnsnames.ora 파일의 ORCL 연결 설명은 다음과 같습니다.

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

또한 다음과 같이 SID는 같지만 IP는 다른 사용자 이름/비밀번호를 사용하여 연결 문자열을 사용하여 연결을 시도합니다.

sqlplus username/password@192.168.130.52:1521/orcl

이 문제를 해결하려면 tnsnames.ora 파일을 변경합니다.

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.130.52)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

방화벽을 체크하고 서버에서 클라이언트와의 접속을 허용합니다.도메인 네트워크를 허용하거나 규칙을 만듭니다.

할당된 시간 간격 내에 연결 설정 또는 클라이언트와의 통신을 완료하지 못했기 때문에 발생합니다.네트워크 또는 시스템 지연이 원인일 수 있습니다.

트러블 슈팅 순서(문서 번호 730066).1)

Connection Timeout errors ORA-3135 및 ORA-3136 데이터베이스에 접속하려고 해도 SQLNET이 허용하는 기간 내에 접속 및 인증 단계가 완료되지 않으면 접속 타임아웃 오류가 발생할 수 있습니다.INBOUND_CONNECT_타임아웃 및/또는 INBOUND_CONNECT_TIMOUT_ 서버측 파라미터.

Oracle 10.2부터는 이러한 파라미터의 기본값은 60초입니다.이전 릴리스에서는 0이었습니다.즉, 타임아웃은 없습니다.

타임아웃 시 클라이언트프로그램은 ORA-3135(또는 TNS-3135) 오류를 수신합니다.

ORA-3135 접속이 끊어짐

그러면 데이터베이스 alert.log에 ORA-3136 오류가 기록됩니다.

... 2008년 5월 10일 토요일 02:21:38 경고: 인바운드 연결이 타임아웃되었습니다(ORA-3136).

  • 인증 SQL

데이터베이스 세션이 인증 단계일 때 일련의 SQL 문을 발행합니다.이러한 모든 것을 해석, 실행, 취득할 때까지 인증은 완료되지 않습니다.이 목록의 SQL 문 중 일부는 다음과 같습니다(예: 10.2).

select value$ from props$ where name = 'GLOBAL_DB_NAME'

select privilege#,level from sysauth$ connect by grantee#=prior privilege# 
and privilege#>0 start with grantee#=:1 and privilege#>0

select SYS_CONTEXT('USERENV', 'SERVER_HOST'), SYS_CONTEXT('USERENV', 'DB_UNIQUE_NAME'),
SYS_CONTEXT('USERENV', 'INSTANCE_NAME'), SYS_CONTEXT('USERENV', 'SERVICE_NAME'), 
INSTANCE_NUMBER, STARTUP_TIME, SYS_CONTEXT('USERENV', 'DB_DOMAIN') 
from v$instance where INSTANCE_NAME=SYS_CONTEXT('USERENV', 'INSTANCE_NAME')

select privilege# from sysauth$ where (grantee#=:1 or grantee#=1) and privilege#>0

ALTER SESSION SET NLS_LANGUAGE= 'AMERICAN' NLS_TERRITORY= 'AMERICA' NLS_CURRENCY= '$'
NLS_ISO_CURRENCY= 'AMERICA' NLS_NUMERIC_CHARACTERS= '.,' NLS_CALENDAR= 'GREGORIAN'
NLS_DATE_FORMAT= 'DD-MON-RR' NLS_DATE_LANGUAGE= 'AMERICAN' NLS_SORT= 'BINARY' TIME_ZONE= '+02:00'
NLS_COMP= 'BINARY' NLS_DUAL_CURRENCY= '$' NLS_TIME_FORMAT= 'HH.MI.SSXFF AM' NLS_TIMESTAMP_FORMAT=
'DD-MON-RR HH.MI.SSXFF AM' NLS_TIME_TZ_FORMAT= 'HH.MI.SSXFF AM TZR' NLS_TIMESTAMP_TZ_FORMAT=
'DD-MON-RR HH.MI.SSXFF AM TZR'

메모: 위의 SQL 목록은 완전하지 않으며 인증 SQL의 순서를 나타내지 않습니다.릴리스마다 차이가 있을 수 있습니다.

  • 인증 중 행업

위의 SQL 문은 Oracle 데이터베이스 내의 모든 SQL에 대해 구문 분석, 실행 및 가져오기를 수행해야 합니다.그 결과, 이러한 단계에서 행업 또는 퍼포먼스가 현저하게 저하하는 문제가 발생하면 타임아웃이 발생할 수 있습니다.

이러한 행의 증상은 인증 세션에 의해 다음과 같이 표시됩니다. • 커서: 핀S wait on X • latch: 행 캐시 객체 • 행 캐시 잠금 기타 유형의 대기 이벤트가 발생할 수 있습니다.이 목록은 완전하지 않을 수 있습니다.

여기서의 문제는 인증 세션이 데이터베이스 내의 다른 세션에 의해 유지되는 공유 리소스를 얻기 위해 대기하는 동안 차단된다는 것입니다.이 블로커 세션 자체는 장기 실행 액티비티(또는 그 자체의 행)에 사용되고 있기 때문에 인증 세션에 필요한 공유 리소스를 시기적절하게 해방할 수 없습니다.그 결과 타임아웃은 최종적으로 인증 세션에 보고됩니다.

  • 인증 행의 트러블 슈팅

이러한 상황에서는 인증 세션에 필요한 공유 리소스를 보유하고 있는 블로커 프로세스를 조사하여 어떤 일이 일어나고 있는지 확인해야 합니다.

이러한 경우에 사용되는 일반적인 진단은 다음과 같습니다.

  1. 1개 이상의 인증 세션이 차단되어 있는 동안 레벨 266의 시스템스테이트 덤프가 3회 연속됩니다.블로킹 세션으로 인해 여러 연결 시도가 타임아웃되었을 가능성이 있습니다.따라서 시스템 상태 덤프를 생성하는 데 필요한 시간이 단일 타임아웃 기간을 초과하는 경우에도 시스템 상태 덤프는 유용합니다(예: 60초).
      $ sqlplus -prelim '/ as sysdba' 

       oradebug setmypid 
       oradebug unlimit 
       oradebug dump systemstate 266 
       ...wait 90 seconds 
       oradebug dump systemstate 266 
       ...wait 90 seconds 
       oradebug dump systemstate 266 
       quit
  • ASH 보고서에는 여러 타임아웃 오류가 발생한 기간 중 10-15분이 포함됩니다.
  • 가능하면 V$LATCHHOLDER 뷰에서 대기 중인 공유 리소스가 래치인 경우 두 개의 쿼리를 연속으로 실행합니다. v$latchholder에서 *를 선택합니다.시스템 스테이트 덤프는 블로커세션을 식별하는 데 도움이 됩니다.레벨 266 에서는, 실행중의 코드로 기존의 버그를 근본 원인으로 특정하는데 도움이 되는 것을 알 수 있습니다.

인증이 중단될 수 있는 문제의 예

  • 게시되지 않은 버그 6966286에 대한 패치별로 수정된 게시되지 않은 버그 6879763 공유 풀 시뮬레이터 버그 563149.1 참조
  • 게시되지 않은 Bug 7039896 회피책 매개 변수 _enable_shared_pool_configurations=false 참고 7039896.8

  • 문제를 피하기 위한 기타 접근법

경우에 따라서는 인스턴스가 시작되고 새로 로드된 직후에 이러한 문을 공유 풀에 고정함으로써 인증 SQL과 관련된 문제를 방지할 수 있습니다.이에 대한 조언은 다음과 같은 방법으로 할 수 있습니다.문서 726780.1 DBMS_SHARED_POOL을 사용하여 공유 풀에서 커서를 고정하는 방법지킨다

핀 접속을 실시하면 비활성화 및 에이징으로 인한 플래시아웃을 방지할 수 있기 때문에 향후 새로고침이 필요하게 되어 인증 행의 문제가 발생하기 쉬워집니다.

open sqlnet.ora  

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.INBOUND_CONNECT_TIMEOUT=360
SQLNET.RECV_TIMEOUT=10
SQLNET.SEND_TIMEOUT=10

http://docs.oracle.com/cd/B19306_01/network.102/b14213/sqlnet.htm

플러그형 데이터베이스인 ORCLPDB의 "hr" 사용자를 연결하는 동안 동일한 오류가 발생했습니다.

「호스트명과 를 취득합니다.」를 입력해 번호를 합니다.lsnrctl statusWindows ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」0.0이었습니다.

다음으로, 호스트명과 포토 번호를 지정하고, 다음의 커맨드를 입력합니다.

sqlplus username/password@HostName:Port Number/PluggableDatabaseName.

예를 들어 다음과 같습니다.

sqlplus hr/hr@127.0.0.1:1521/ORCLPDB.

가상 시스템 내의 Oracle Linux 8에 21c를 방금 설치한 경우.(생산용이 아님)

다음의 순서에 따릅니다.

  1. 먼저 듣는 사람을 중지합니다.

     ./lsnrctl stop
    
  2. listener.ora 파일을 열고 HOST 값을 IP 주소 #Location --> /opt/oracle/homes/OraDBHome21cE/network/admin/listener.ora로 바꿉니다.

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.223.130)(PORT =1521))
    
  3. 리스너를 재기동합니다.

     ./lsnrctl start
    
  4. 이제 root 사용자로 전환하고 다음 명령을 하나씩 실행하여 방화벽을 비활성화합니다.

    sudo systemctl stop firewalld
    
    sudo systemctl disable firewalld
    
    sudo systemctl status firewalld
    
  5. 가상 시스템을 최소화하고 Toad 또는 기타 데이터베이스 브라우저 도구를 사용하여 호스트 시스템(또는 다른 시스템)에서 연결합니다.

그래도 작동하지 않으면 데이터베이스를 중지하고 재시작할 수 있습니다.

./sqlplus / as sysdba

shutdown immediate;

startup;

localhost 또는 loopback address가 아닌 서버의 IP를 사용하여 tnsnames.ora 파일을 변경하려고 했지만 작동하지 않았습니다.방화벽이 요청을 차단하고 있었습니다.방화벽을 구성하거나 해제하십시오(권장되지 않음). 작동합니다.

언급URL : https://stackoverflow.com/questions/23970158/ora-12170-tnsconnect-timeout-occurred

반응형