프린트 하기

OS환경 : Oracle Linux 6.8 (64bit)


DB 환경 : Oracle Database 11.2.0.4


에러 : ORA-00600[1:dbktDefFileInit]

#11g 이상에서 사용할 수 있는 쿼리

1
2
3
4
5
6
7
8
SQL> 
SELECT /* Alert log View */
    ORIGINATING_TIMESTAMP
  , HOST_ID
  , MESSAGE_TEXT
FROM X$DBGALERTEXT
WHERE ORIGINATING_TIMESTAMP >= SYSDATE -7
/

#해당 쿼리를 실행하면 alert log를 sqlplus 안에서 볼 수있다.



#하지만 oracle database 11.2.0.4 버전에서는 해당 쿼리를 실행 시킬 경우

1
2
3
4
5
6
7
8
9
10
11
ERROR:
ORA-03113: end-of-file on communication channel
Process ID: 24979
Session ID: 43 Serial number: 447
 
 
 
2670 rows selected.
 
ERROR:
ORA-03114not connected to ORACLE

#마지막에 이렇게 에러를 뿜으며 커넥션이 끊긴다.



#그리고 alert log를 보면 ORA-00600 이 발견된다

1
2
3
4
5
6
7
8
9
10
11
12
$ cat alert_orcl.log
==> alert_orcl.log <==
ORA-49204: Recursive DDE invocation at Phase I
ORA-00600: internal error code, arguments: [1:dbktDefFileInit], [48005], [], [], [], [], [], [], [], [], [], []
ORA-49204: Recursive DDE invocation at Phase I
ORA-00600: internal error code, arguments: [1:dbktDefFileInit], [48005], [], [], [], [], [], [], [], [], [], []
ORA-49204: Recursive DDE invocation at Phase I
ORA-00600: internal error code, arguments: [1:dbktDefFileInit], [48005], [], [], [], [], [], [], [], [], [], []
ORA-49204: Recursive DDE invocation at Phase I
ORA-00600: internal error code, arguments: [1:dbktDefFileInit], [48005], [], [], [], [], [], [], [], [], [], []
ORA-07445: exception encountered: core dump [dbgtrRecNewestGet()+8] [SIGSEGV] [ADDR:0x0] [PC:0x9100398] [Address not mapped to object] []
ORA-48216: Field Len Exceeds Max Field Length [5] [30] [11357] [66]


해결 방법 : 패치 18909196 적용 및 <ADR_HOME>/alert/log.xml 제거

해결방법은 두가지이다.

1. 패치 18909196 에서 관련 수정 사항이 있는지 확인후 적용하라. (11.2.0.4에만 해당). 

패치가 제공되지 않는 플랫폼의 경우 Oracle Support에 지원요청을 하라.

2. <ADR_HOME> /alert/log.xml (및 log _ *. xml)에서 

xml 파일로 된 alert 로그를 제거하는 하라. 


2번 방법으로 log.xml 파일을 log.xmlbak 로 변경 후 

위 쿼리를 실행 시켰더니 no rows가 나왔다.

1
2
3
4
5
6
7
8
9
10
11
$ cd <ADR_HOME>/alert/log.xml
$ mv log.xml log.xmlbak
SYS@orcl> SELECT /* Alert log View */
    ORIGINATING_TIMESTAMP
  , HOST_ID
  , MESSAGE_TEXT
FROM X$DBGALERTEXT
WHERE ORIGINATING_TIMESTAMP >= SYSDATE -7
/ 
 
no rows selected



즉 log.xml 파일을 읽어와서 X$DBGALERTEXT 뷰에서 결과를 보여주는데

log.xml 파일을 없애버려서 X$DBGALERTEXT 뷰를 봐도 아무것도 안나오는 것이다.

하지만 다시 여기에 로그가 쌓이게끔 명령어를 날리면(로그 스위치 등)

다시 log.xml파일이 새로 생성되고

위 쿼리를 입력하면 alert log들이 나온다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SYS@orcl> alter system switch logfile;
SYS@orcl> SELECT /* Alert log View */
    ORIGINATING_TIMESTAMP
  , HOST_ID
  , MESSAGE_TEXT
FROM X$DBGALERTEXT
WHERE ORIGINATING_TIMESTAMP >= SYSDATE -7
/ 
 
ORIGINATING_TIMESTAMP                                                       HOST_ID
----------------------------------                                    ------------------------                                                            
MESSAGE_TEXT 
--------------------------------------------------------------                                                     
13-MAR-18 10.49.04.091 AM +09:00                                            oracle                                                                                                                     
  Current log# 3 seq# 30 mem# 0/oracle/app/oracle/oradata/orcl/redo03.log                                                                                                                             
13-MAR-18 10.49.04.107 AM +09:00                                            oracle                                                                                                                    
Archived Log entry 32 added for thread 1 sequence 29 ID 0x59477938 dest 1:                                                                                                                              
13-MAR-18 10.49.04.109 AM +09:00                                            oracle                                                                                                                     
Thread 1 advanced to log sequence 31 (LGWR switch)                                                                                                                                                      
13-MAR-18 10.49.04.109 AM +09:00                                            oracle                                                                                                                     
  Current log# 1 seq# 31 mem# 0/oracle/app/oracle/oradata/orcl/redo01.log                                                                                                                                                                                                                                                                            
13-MAR-18 10.49.04.114 AM +09:00                                            oracle                                                                                                                     
Archived Log entry 33 added for thread 1 sequence 30 ID 0x59477938 dest 1:                                                                                                                              
99 rows selected.



원인 : log.xml 불러오는 부분에서 특정 문제 발생

이전에 ORA-600 에러가 발생한건 alert log 에 '어떤 내용'이 있어서 그런것 같은데

정확한 원인은 모르겠지만 예상할 수 있는 원인은 alert log에 특수문자나 이상한 문자들이 들어가서

위 쿼리에서 log.xml을 불러 올 때 구문 오류로 인해 에러가 나는 것같다.



참조 : (문서 ID 1679553.1)