본문 바로가기

study/oracle

ora 38301 에러 해결방법

새로 생성한 데이터베이스에 여러명의 개발자가 달라붙어서 작업을 하다보니...
어느새 이상한 찌꺼기로 보이는 것들이 생기곤 한다.

sql> select * from tab;
...
...
BIN$+JhRwRSHQRm8CPHbIPcAhg==$0
BIN$+dyK/iSeSm2xC63JjCCnWQ==$0
BIN$+iZrUVW+QK6GJf6AU54nDQ==$0
...

이런 정상적이지 않은 놈들이 보인다.
토드 스키마브라우져에서 뒤져보니
My Schema > Constrants 에 들어있는 놈들이다.
자세히 보니 이미 드랍된 테이블의 인덱스들 인듯
drop를 시도하면...
ORA-38301: 휴지통에 있는 객체에 대해 DDL/DML을 수행할 수 없음
이라고 나온다... 웬 휴지통 -.,ㅡa 이거 뭥미...
결국 ORA-38301로 검색을 해보니
오라클 10g에서는 휴지통(recyclebin) 이라는 것이 존재하는데
drop 명령으로 삭제한 객체들이 바로 삭제되지 않고 여기에 담겨있다고 한다.
휴지통에 들어있는 객체들은 아래의 상황 전까지 휴지통에 보관된다고 한다.

- purse 명령으로 영구히 삭제
- undrop명령으로 drop객체 복구
- 테이블스페이스 (휴지통)공간이 부족할때.
- 테이블스페이스가 extend될때

휴지통에 들어있는 객체들 보기
- user_recyclebin
- dba_recyclebin

휴지통 비우기
purge recyclebin; 사용자의 휴지통 비우기
purge dba_recyclebin; 휴지통내의 모든 놈들 비우기
purge tablespace users; users테이블스페이스의 휴지통 비우기
*purge table "휴지통내의 이름" 휴지통의 하나의 객체만 제거시

휴지통의 객체 복구
flashback table 휴지통내의 이름 to before drop;

휴지통에 넣지 않고 drop
drop table 테이블명 purge;


출처 : http://cafe.daum.net/oddtip/FbCl/187?docid=1CBe5|FbCl|187|20080808184442&q=ORA-38301&srchid=CCB1CBe5|FbCl|187|20080808184442