반응형

오랜만에  글을 쓰게 되었습니다.. (그동안 바쁘기도 하고 서버가 터지는 일이 많이 줄어서..)

앞선 글에 ORA-01653 오류 대처에 대한 정보만 남겼는데 더 간단하고 쉽게 설명하기 위해서 글을 다시 씁니다.

(사실 최근에 이 문제로 한번 더 터졌습니다 서버가..)

 

 

고객사에서 기능들이 작동하지 않는다고 차장님에게 전화가 왔습니다.

 

차장님이 확인 후 혹시 이 문제에 대한 해결방법을 알고있냐고 물었고 발생한 에러를 보니

 

ORA-00604 : error occurred at recursive SQL level 1

 

ORA-01653 : unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM

 

ORA-02002 : error while writing to audit trail

 

ORA-00604 : error occurred at recursive SQL level 1

 

ORA-01653 : unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM

 

에러가 뿜어져 나오고 있었습니다.. 

 

이 에러에 원인을 알고 있던 저는 바로 자리에서 원격을 접속하여 (윈도우버전)


 

 

sqlplus /nolog     - sqlplus 로 패스워드없이 접속

 

conn /as sysdba     - sysdba 계정권한으로 로그인

 

truncate table SYS.AUD$;     -테이블 잘라내기

 

commit;    -저장

 

 

명령어를 입력 후 서버데몬을 시작하니

 

정상 작동 되었습니다.

 

 

이 문제가 리눅스 버전에서도 발생 할수 있기 때문에 리눅스에서 발생시 해결 방법을 알려드립니다.

 

리눅스 터미널에 접속하여 (리눅스버전)

 

 

su - oracle 

 

sqlplus /nolog

 

connect /as sysdba 

 

truncate table SYS.AUD$;

 

commit;

 

 

명령어를 입력하면 정상적으로 오라클 이용이 가능 합니다.

 

 

추가로 윈도우 에서는 이렇게 지속적으로 명령어 치기가 힘든경우 윈도우 배치파일 과 작업 스케줄러 를 이용하면 더욱 쉽게 사용 가능 합니다.

 

추가적인 방법은 차후에 또 다른 글로 설명 드리겠습니다.

 

 

반응형
반응형

ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace 에러가 오늘 아침에 발생 했습니다.


기숙사에서 자고있는와중에 시스템들이 동작하지 않는다고 연락이 와서 저번처럼 업체 네트워크 문제인지 확인해달라고 하여 부랴부랴 노트북이 있는 회사로 가려하던중 같은 연락을 받으신 대리님이 " 내가 들어보니 SYS.AUD 테이블스페이스 용량 꽉 찬거 같으니까 오라클 재시작하고 truncate 쓰고와 " 라고 말씀하셨고 내려가서 확인해보니 위와 같은 사진과 함께 오라클 연결이 되지 않았습니다.


그래서 대리님이 말하신대로 truncate를 하려하던 도중 또다른 에러를 만났습니다.



ORA-00054: 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다. 


대략 난감 했었습니다. 빠르게 구글링 해본 결과


"사용중인 테이블에LOCK이 걸린 상태에서 발생하는 오류"
"Commit" 으로 해결

누군가 작업을 하고 commit 를 안친건지 의아해 하던 도중 대리님이 " 너 오라클 서비스 안껏다켰지? " 라고 말씀하셨습니다.


네 맞습니다 저는 오라클 서비스를 재시작 하지 않고 명령어를 치고있던 중이였습니다.


사실 이 문제는 commit 한번 과 truncate table SYS.AUD$; 로 해결할수 있는 문제 였을지도 모르겠습니다.

하지만 무슨 작업을 누가 어떻게 한지 확인을 못한 상황이여서 commit 보단 오라클 서비스 재시작을 선택 한거 같습니다.

만약 commit 을 입력 했더라도 그대로 안되는거라면 다음과 같은 방법을 이용 합니다.


SELECT

    S.SID,

    S.SERIAL#

FROM

    (

        SELECT SID

        FROM V$LOCK

        WHERE ID1 IN (SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OBJECT_NAME = 'IP_NMCBOARD_T')

    ) X

    JOIN V$SESSION S ON X.SID = S.SID;



SID SERIAL#

--- -------

5   1

6   1


2. 다음 명령으로 SESSION들을 KILL한다.


SQL> ALTER SYSTEM KILL SESSION '5, 1';

SQL> ALTER SYSTEM KILL SESSION '6, 1';



반응형

+ Recent posts