Tablespace의 크기를 MB 단위로 조회하고, 관련 정보를 조회하는 쿼리입니다.

select
ts.status
, data.name
, ts.contents
, extent_management
, data.Mbytes "SPACE(MB)", free.free "FREE(MB)"
, trunc((data.Mbytes-free.free)/data.Mbytes*100,2) "Used(%)"
from (select tablespace_name name, trunc(sum(bytes/1024/1024)) Mbytes
from dba_data_files
group by tablespace_name) data,
(select free.tablespace_name, trunc(sum(free.bytes)/1024/1024,1) free
from dba_free_space free
group by free.tablespace_name) free,
dba_tablespaces ts
where data.name = free.tablespace_name
and data.name = ts.tablespace_name
;


select
ts.status
, data.file_name
, data.name
, data.Mbytes "SPACE(MB)", free.free "FREE(MB)"
, trunc((data.Mbytes-free.free)/data.Mbytes*100,2) "Used(%)"
from (select tablespace_name name, file_name, file_id, trunc(bytes/1024/1024) Mbytes
from dba_data_files) data,
(select tablespace_name, file_id, trunc(bytes/1024/1024,1) free
from dba_free_space free) free,
dba_tablespaces ts
where data.name = free.tablespace_name
and data.name = ts.tablespace_name
and data.file_id = free.file_id
and data.name not in ('UNDOTBS1', 'SYSTEM')
;

위의 회색 박스안의 쿼리를 실행하면 아래와 같은 결과가 나옵니다.
사용자 삽입 이미지




참고 자료
Littleworld Encylopedia
오라클 정보공유 커뮤니티 oracleclub
 월요일에 갑자기 사무실에 있는 개발서버의 오라클 DB가 다운되어 있다는 얘기를 들었습니다.
팀원의 반정도가 본사로 교육을 받으러가있었서 급할게 없기에 천천히 복구 작업을 하게되었죠. 하드디스크 하나를 제거한 뒤에 datafile을 못 찾아서 생긴 현상이었기에 해당 datafile을 삭제해주고 DB를 open하려고 했는데...

SQL> set linesize 150

SQL> col ts_name format a15

SQL> col filename format a60

SQL> SELECT A.TS#, A.NAME AS TS_NAME, B.FILE#, B.NAME AS FILENAME, B.STATUS, B.ENABLED FROM v$tablespace A, v$datafile B WHERE A.TS#=B.TS#

테이블스페이스 이름과 활당된 데이터파일 목록 출력


SQL> ALTER DATABASE DATAFILE 14 OFFLINE DROP;
-- 14번 데이터파일이 없어진 파일이다.

SQL> ALTER DATABASE OPEN;


 여기서 문제가 발생했다. 오류 메세지를 보니 ORA-00600이고 상세 오류 정보에 [2252]가 포함되어 있기에 검색을 해봤더니 SCN관련 오류인듯했다. 다시 서버를 점검해보니 서버의 시스템 날자가 2003년도 1월로 되어있기에 이를 오늘 날자로 바꿔주고 Oracle을 재시작해줬더니 잘 되었다.
그리고 DB를 open한뒤에 해당 테이블 스페이스를 삭제해준걸로 마무리를 했습니다.

SQL> ALTER DATABASE DATAFILE 14 OFFLINE DROP;

SQL> ALTER DATABASE OPEN;

SQL> DROP TABLESPACE LIS;



 이렇게 써놓으니 아주 쉽게 넘어간것 같은데... 사실 이 과정이 이틀이나 걸렸던것이다.
처음엔 controlfile을 재생성하려고 했었다. ORA-00600 [2252] ~~~ 뭐 이런 메세지를 처음 봐서 너무 당황한 나머지 DB 재생성까지 생각했던 것인데... ㅡ.ㅡa
여기서 이번 사례를 정리해보면

환경
1) 아카이브 로그 모드가 아니다.     ㅡ.ㅡ
2) Offline backup을 한 적이 없다.   ㅜ.ㅜ
3) 해당 테이블스페이스는 없어져도 된다.    ^^ (빙고~)

증상
1) Oracle DBMS가 mount 단계에서 open되지 않고 멈추어있다.

원인
1) Datafile 일부가 없어졌다.

해결책
1) 해당 파일을 없애준뒤에 DB를 open한다.
2) 해당 테이블스페이스를 삭제한다.

+ Recent posts