SQL Plus에서 새롭게 실습할 때면 이전에 있던 테이블들을 모두 삭제하곤 합니다.
예제들에 있는 테이블을 여러 개 생성하다 보면 테이블이 많아져 번거롭기도 하고, 그 편이 더 깔끔하고 작업하기도 좋기 때문입니다.
SELECT*FROM TAB; --로그인한 계정에 존재하는 모든 테이블 확인
DROP TABLE '테이블 이름'; --특정 테이블을 삭제
그러나 이제 잘 삭제됐겠지? 하고 다시 SELECT*FROM TAB;을 써봤더니 종종 이상한 경우가 발생합니다.
저는 먼젓번 실습에서 사용했던 테이블 3개를 모두 삭제했었습니다. 분명 삭제한 테이블들의 이름은 사라졌는데, 저 테이블들은 어디서 온 것일까요? 잘 보면 하나같이 'BIN$~'로 시작해 '==$0'으로 끝나는 형식이라는 것을 알 수 있습니다. 저는 처음에 저게 잘못 생성된 테이블인 줄 알고 여러가지 방법을 시도해 보았습니다.
마음 같아서는 한 방에 저 테이블들을 몽땅 삭제해 주는 코드가 있었으면 좋겠는데, 아쉽게도 오라클에 그런 명령어는 없습니다. 그래도 한 번에 삭제 명령어들을 띄워준다는 코드가 있어 시도를 해보았는데,
선택된 레코드가 없다는군요.
분명 테이블은 존재하는데 뭐가 어떻게 된 것일까요. 유령인가?
어쨌거나 저게 제대로 된 테이블이 아니라는 것은 알겠습니다.
직접 삭제도(오라클에서는 사실 그 방법밖에 없긴 합니다만) 시도해봤습니다.
3연타로 옵션이 부적합하다는 메시지를 보고 나니 대략 정신이 혼미해지기 시작했습니다.
저 이상한 이름의 테이블들이 정상적인 테이블이 아닌 것은 분명하고, 심지어는 저 이름도 진짜 이름이 아니라는 결론이 나옵니다. 생각해 보면 지운 테이블은 3개, 저 이상한 테이블도 3개. 혹시 저것들은 진작 지워졌어야 할 찌꺼기들이 아닐까? 하는 합리적 의심이 듭니다. 그리고 검색을 해보니 예상은 들어맞았습니다.
오라클(10g 이상의 버전부터)에는 휴지통(recyclebin)이라는 것이 존재하는데, DROP(삭제)를 한 테이블들은 바로 지워지는 것이 아니라 이곳으로 들어가게 된다고 하네요(이전 버전에서는 바로 삭제되었다고 합니다.). 저 이상한 이름의 파일들은 테이블이 휴지통에 들어가 있다는 것을 의미하는 것입니다.
이 휴지통 안의 테이블들은 언제든 UNDROP 명령어로 복구될 수 있으며, 아래의 상황에 해당되지 않는 한 휴지통에서 사라지지 않습니다.
- PURGE 명령어로 영구 삭제
- 휴지통 공간이 부족할 때
- 휴지통 공간이 확장(extend)될 때
휴지통과 관련된 명령어들은 다음과 같습니다.
--휴지통의 테이블들 조회
SHOW RECYCLEBIN;
--휴지통의 테이블 복원
FLASHBACK TABLE 테이블 이름 TO BEFORE DROP;
--휴지통 비우기
PURGE RECYCLEBIN;
--휴지통에서 특정 테이블만 삭제
PURGE TABLE 테이블 이름;
--DBA 권한으로 휴지통 내 테이블 전체 삭제
PURGE DBA_RECYCLEBIN;
덤으로 휴지통에 테이블을 보내지 않고 바로 삭제하는 명령어는 다음과 같습니다.
--휴지통에 보내지 않고 테이블 완전 삭제
DROP TABLE 테이블 이름 PURGE;
※ 참고 사이트
'Database' 카테고리의 다른 글
[Oracle]The Blunder(풀이 성공) (0) | 2021.04.07 |
---|---|
[Oracle]Average Population of Each Continent(풀이 성공) (0) | 2021.04.01 |
[Oracle]Population Census(풀이 성공) (0) | 2021.04.01 |
[Oracle]Weather Observation Station 6(풀이 성공) (0) | 2021.03.29 |
[Oracle/HackerRank]Weather Observation Station 5(풀이 성공) (0) | 2021.03.26 |