ORA-609 Error (11.1.0.6 to 11.2.0.3)
Oracle 2014. 2. 12. 20:34
![]() 이 문서에서
적용 대상:Oracle Net Services - 버전 11.1.0.6 to 11.2.0.3 [릴리즈 11.1 to 11.2]이 문서의 내용은 모든 플랫폼에 적용됩니다. 목적ORA-609 에러는 alert.log 에 보고된다. 이 에러는 간헐적으로 발생하고 몇일 동안 발생하지 않을 수도 있다. Mon Oct 12 10:03:39 2009
Errors in file e:\app\oracle\diag\rdbms\center\center\trace\center_ora_7464.trc: ORA-00609: could not attach to incoming connection ORA-12537: TNS:connection closed ORA-609 : opiodr aborting process unknown ospid (2436_7464)
Fatal NI connect error 12537, connecting to:
(LOCAL=NO) VERSION INFORMATION: TNS for 64-bit Windows: Version 11.1.0.7.0 - Production Oracle Bequeath NT Protocol Adapter for 64-bit Windows: Version 11.1.0.7.0 - Production Windows NT TCP/IP NT Protocol Adapter for 64-bit Windows: Version 11.1.0.7.0 - Production Time: 12-OCT-2009 10:03:39 Tracing to file: E:\app\oracle\product\11.1.0\db_1\NETWORK\trace\svr1_7464.trc Tns error struct: ns main err code: 12537 TNS-12537: TNS:connection closed ns secondary err code: 12560 nt main err code: 0 nt secondary err code: 0 nt OS err code: 0
12-OCT-2009 10:03:39 * (CONNECT_DATA=(SID=ORCL)) * (ADDRESS=(PROTOCOL=tcp)(HOST=123.456.1.123)(PORT=3158)) * establish * ORCL * 0
12-OCT-2009 10:03:39 * (CONNECT_DATA=(SID=ORCL)) * (ADDRESS=(PROTOCOL=tcp)(HOST=123.456.1.123)(PORT=3159)) * establish * ORCL * 0
여기서 문제는 접속 패킷을 클라이언트로부터 받을 때 나타난다. ORA-609 에러는 Oracle Net 트레이스에는 나타나지 않는다. ORA-609 에러는 트레이스 snippet에서 ns=12537 을 동반하면서 발생한다.
[000001 12-OCT-2009 10:03:39:116] nscon: doing connect handshake...
[000001 12-OCT-2009 10:03:39:116] nscon: recving a packet [000001 12-OCT-2009 10:03:39:116] nsprecv: entry [000001 12-OCT-2009 10:03:39:116] nsprecv: reading from transport... [000001 12-OCT-2009 10:03:39:116] nttrd: entry [000001 12-OCT-2009 10:03:39:163] nttrd: exit [000001 12-OCT-2009 10:03:39:163] ntt2err: entry [000001 12-OCT-2009 10:03:39:163] ntt2err: Read unexpected EOF ERROR on 7104 [000001 12-OCT-2009 10:03:39:163] ntt2err: exit [000001 12-OCT-2009 10:03:39:163] nsprecv: error exit [000001 12-OCT-2009 10:03:39:163] nserror: entry [000001 12-OCT-2009 10:03:39:163] nserror: nsres: id=0, op=68, ns=12537, ns2=12560; nt[0]=507, nt[1]=0, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0 [000001 12-OCT-2009 10:03:39:163] nscon: error exit [000001 12-OCT-2009 10:03:39:163] nsdo: nsctxrnk=0 [000001 12-OCT-2009 10:03:39:163] nsdo: error exit [000001 12-OCT-2009 10:03:39:163] nsinh_hoff: error recving request Alert log와 Oracle Net 트레이스를 통해서 ORA-609 에러를 트레이스하는 다른 방법을 보여주는데, 핸드쉐이크하는 동안에 이슈가 나타나는 것을 보여준다. 아래는 Alert log를 보여준다.: Mon Dec 21 15:52:15 2009
[21-DEC-2009 15:52:15:025] nscon: sending NSPTAC packet
[21-DEC-2009 15:52:15:025] nspsend: entry [21-DEC-2009 15:52:15:031] ntt2err: Read unexpected EOF ERROR on 14 [21-DEC-2009 15:52:15:031] ntt2err: exit [21-DEC-2009 15:52:15:031] nsprecv: error exit [21-DEC-2009 15:52:15:031] nserror: entry [21-DEC-2009 15:52:15:031] nserror: nsres: id=0, op=68, ns=12537, ns2=12560; nt[0]=507, nt[1]=0, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0 [21-DEC-2009 15:52:15:031] nsrdr: error exit [21-DEC-2009 15:52:15:031] nsdo: nsctxrnk=0 [21-DEC-2009 15:52:15:031] nsdo: error exit [21-DEC-2009 15:52:15:031] nsnareceive: error exit [21-DEC-2009 15:52:15:031] nserror: entry [21-DEC-2009 15:52:15:031] nserror: nsres: id=0, op=68, ns=12537, ns2=12532; nt[0]=0, nt[1]=0, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0 [21-DEC-2009 15:52:15:031] nacomrc: received 12637 bytes [21-DEC-2009 15:52:15:031] nacomrc: failed with error 12637 [21-DEC-2009 15:52:15:031] nacomrc: exit [21-DEC-2009 15:52:15:031] na_receive_packet: failed with error 12637 [21-DEC-2009 15:52:15:031] na_receive_packet: exit [21-DEC-2009 15:52:15:031] na_server: failed with error 12637
다음은 그 예를 보여준다. Fatal NI connect error 12537, connecting to:
Oracle Net 서버 트레이스 안에 event에 매치되는 것을 보여준다. 진단 절차1. listener.log로부터 접속을 맺는 클라이언트를 찾아낸다. Mon Oct 05 12:41:49 2009
ORA-609 : opiodr aborting process unknown ospid (21131406_1) Listener.log로 가서 이 접속에 일치하는 엔트리를 찾아본다. Listener.log 내 엔트리는 아래의 예처럼 보일 것이다.: 05-OCT-2009 12:41:49 * (CONNECT_DATA=(SID=orcl)) *
(ADDRESS=(PROTOCOL=tcp)(HOST=sample.com)(PORT=1234)) * establish * orcl * 0 위 예제에서 클라이언트 주소값이 "sample.com"임을 주목하여야 한다. 한가지 옵션은 그 사이트에서 몇 개의 클라이언트를 위치시키고, 클라이언트 트레이싱을 활성화하는 것이다. 클라이언트 사이드에서 $ORACLE_HOME/network/log 화일을 확인해야 하고 동일한 timestamp 시점에 발생한 timeout 에러에 대해 명시적으로 확인해야 한다.
2. Oracle Net 트레이싱을 클라이언트 레벨 16으로 걸어서 확인한다. 클라이언트 SQLNET.ORA 화일 안에 아래와 같이 추가한다. DIAG_ADR_ENABLED=off # Diable ADR if version 11g
TRACE_LEVEL_CLIENT = 16 # Enable level 16 trace TRACE_TIMESTAMP_CLIENT = ON # Set timestamp in the trace files TRACE_DIRECTORY_CLIENT = <DIRECTORY> # Control trace file location TRACE_FILELEN_CLIENT =<n> #Control size of trace set in kilobytes eg 20480 TRACE_FILENO_CLIENT =<n> #Control number of trace files per process 만일 접속 모델이 JDBC Thin이라면 클라이언트 사이드의 Java 트레이싱이 필요하므로, Document 793415.1 How to Perform the Equivalent of SQL*Net Client Tracing with Oracle JDBC Thin Driver 를 참고하도록 한다. 3. Oracle Net 트레이싱을 서버 사이드 레벨 16으로 걸어서 확인한다. 클라이언트 SQLNET.ORA 화일 안에 아래와 같이 추가한다. DIAG_ADR_ENABLED=off # Diable ADR if version 11g
TRACE_LEVEL_SERVER = 16 # Enable level 16 trace TRACE_TIMESTAMP_SERVER = ON # Set timestamp in the trace files TRACE_DIRECTORY_SERVER = <DIRECTORY> # Control trace file location TRACE_FILELEN_SERVER =<n> #Control size of trace set in kilobytes eg 20480 TRACE_FILENO_SERVER =<n> #Control number of trace files per process
중요 노트:
SQLNET.ORA 화일은 프로세스 생성 시 단 한번 읽혀진다. RDBMS 백그라운드 프로세스와 SHARED 서버 디스패처는 sqlnet.ora 화일의 파라미터 변경이 반영될 수 있도록 재기동되어야 한다. 프로세스가 트레이싱되기 위해 기동이 되었다면 트레이스는 프로세스가 멈출 때까지 중단되지 않는다. Oracle Net 서버 트레이싱을 활성화하면 짧은 시간 동안에 많은 양의 트레이스를 생성시킬 수 있다. 비록 순환적인 트레이싱을 하더라도 각 프로세스는 TRACE_FILENO_SERVER 에 지정한 갯수 만큼의 트레이스를 생성시킬 것이다. 최적의 트레이싱 워크플로우는 트레이싱을 활성화하고 문제를 재현하고 트레이싱을 비활성화시키는 것이다. 그러므로, 트레이싱하는 시간의 양을 제한하는 것이 활성화된다. TRACE_FILENO_SERVER 를 1로 셋팅하고, TRACE_FILELEN_SERVER 를 20480로 셋팅하게 되면 프로세스 당 생성되는 트레이스의 양을 낮춰주기 위한 솔루션이다. 이렇게 셋팅하면 트레이스 화일이 overwrite되고, failure가 발생한 시점의 중요한 데이타를 유실할 수 있음을 명심해야 한다.
SQL> alter session set events '609 errorstack(3)';
에러가 재현되는 동안 몇 개의 트레이스를 수집한다. SQL> alter session set events '609 off';
매칭되는 클라이언트와 서버 트레이스를 찾게 될 것이다.
알려진 이슈들:
REFERENCESNOTE:793415.1 - How to Perform the Equivalent of SQL*Net Client Tracing with Oracle JDBC Thin DriverNOTE:1050942.1 - How to Trace the Network Packets Exchanged Between JDBC and the RDBMS in Release 11.2 NOTE:609.1 - ORA-609 TNS-12537 and TNS-12547 in 11g Alert.log |
'Oracle' 카테고리의 다른 글
Oracle DB Link 설정 갯수 제한 (0) | 2017.10.18 |
---|---|
Oracle PartnerNetwork(OPN) 혜택 (0) | 2015.04.08 |
Oracle 11g Enterprise Option 내용 (0) | 2014.02.12 |
Oracle Trim Function (0) | 2013.11.15 |
Benefits and consequences of the NOLOGGING option (0) | 2013.11.01 |