본문 바로가기

IT관련

오라클 에러 정보 (ORA-00604) - 내부 SQL 처리에러, 다음 에러를 봐야하는

ORA-00604 에러는 Alertlog 상에서 종종 발견되는 에러입니다.

 

$ oerr ora 604
00604, 00000, "error occurred at recursive SQL level %s"
// *Cause:  An error occurred while processing a recursive SQL statement
//         (a statement applying to internal dictionary tables).
// *Action: If the situation described in the next error on the stack
//         can be corrected, do so; otherwise contact Oracle Support.

 

내부 recursive SQL 을 실행하다가 에러를 만났다는 에러입니다.

그럼, recursive SQL 이란?

사용자가 실행한 1차적인 SQL 또는 어떤 작업을 처리하기 위한 1차적인 SQL을 Base SQL 이라고 하고,

이를 Oracle DBMS 에서 내부적으로 처리해주기 위해서 부수적으로 처리하는 SQL을 recursive SQL 이라고 합니다.

이게 정확히 어떤 SQL인지까지는 알 수 없고, 알 필요도 없습니다.

 

중요한 것은 ORA-00604 에러는 실제 원인이 되는 에러가 보통 따라다닙니다.

 

따라서 Alertlog 에서 ORA-00604 에러를 보게되면, 이걸로 에러원인을 찾으려고 하면 안되고, 그 뒤에 따라오는 에러번호를 가지고 원인을 찾아야 합니다.

 

아래의 샘플들을 보면, 

 

ORA-00604: 순환 SQL 레벨 2 에 오류가 발생했습니다
ORA-01013: 사용자가 현재 작업의 취소를 요청했습니다.

누군가 세션을 kill 시켰거나 WAS 등에서 timeout 으로 인해 발생한 메시지인 것을 알 수 있습니다.

 

ORA-00604: 순환 SQL 레벨 1 에 오류가 발생했습니다
ORA-01000: 최대 열기 커서 수를 초과했습니다

위의 경우는 open cursor 최대값을 초과했다는 얘기입니다. 커서를 많이 오픈하는 Dynamic SQL 같은게 있는지 찾아보거나 open_cursors 파라메타값을 늘려줘야 합니다.

 

ORA-00604: error occurred at recursive SQL level 1
ORA-28365: wallet is not open

이 경우는 Oracle DBMS에서 TDE(암호화) 솔루션 같은 것을 사용하는 경우, 암호키를 담고있는 전자지갑(Wallet)이 오픈되어 있지 않아서 발생한 에러입니다.

 

이런식으로 ORA-00604 는 다양한 에러들과 함께 나오는 부수적인 에러코드 입니다.

ORA-00604 에러를 만나면, 이 에러코드로 원인을 찾으려고 하지말고, 뒤에 나오는 에러코드나 메시지를 가지고 원인을 찾아야 합니다.

 

참고) 오라클 Alertlog 파일 분석 프로그램 다운로드