본문 바로가기

IT/oracle

테이블 행수(row,레코드)와 빈공간 없애는 방법

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

사용중인 테이블들에 들어가 있는 데이터의 행수(레코드)를 알고 싶은 경우가 있습니다.

데이터가 많은 테이블을 특별 관리하고 싶기때문이죠.

select table_name, num_rows from user_tables;

로그인한 계정이 소유한 테이블들의 레코드수를 확인할 수 있습니다.

 

 

sysadm 권한으로 로그인한 경우 테이블스페이스 파일별 위치와 사이즈(크기) 등 다양한 상태정보를

알수 있습니다.

select * from dba_data_files;

- 실행 결과 입니다.

파일 위치와 이름, 파일 크기, 자동증가 상태 등을 자세히 알 수 있습니다.

간혹 파일 경로를 옮겨야 할때도 있고, 경로를 알고 싶을때 사용하시면 됩니다.

 

- 이중에 사용하지 않는 테이블 스페이스 파일(datafiles)을 포함해서 모두 삭제하는 방법입니다.

drop tablespace 테이블_스페이스명 including contents and datafiles

 

- 테이블스페이스를 목록에서만 삭제 하는 방법입니다.

DROP TABLESPACE 테이블 스페이스명
INCLUDING CONTENTS
CASCADE CONSTRAINTS;

drop tablespace 테이블_스페이스명 including contents cascade constraints;

*목록에서만 삭제후, 나중에 다시 등록해서 재활용하기위해서 목록만 제거 합니다. ^^ 

 

- 테이블스페이스 목록명을 변경하는 방법입니다.

ALTER TABLESPACE  KSAM  RENAME TO KING;

alter tablespace 현재_테이블스페이스명 rename to 신규_테이블_스페이스명;

*테이블스페이스 파일명은 변경되지 않습니다.

 

특정 테이블의 데이터가 많아, 다른 테이블스페이스 영역으로

테이블과 데이터를 옮겨야할 경우도 있죠

그럴때는 이전 글의 쿼리를 이용해서 테이블스페이스 정보를 확인하시고

다음과 같은 쿼리를 이용하여 테이블을 옮김니다.

 

alter table '테이블명' move tablespace '테이블스페이스명';

alter table irs move tablespace BKAU;

commit;  '커밋하는거 잊지 마세요'

iris라는 테이블의 BKAU 테이블 스페이스로 옮겨졌습니다.

*테이블과 테이블스페이스의 소유자만 가능합니다. ^^

 

자 이제는 테이블이 사용하는 영역중에서 사용되지 않는 빈공간을 제거해보겠습니다.

alter table IRIS deallcate unuse; 

commit;   

디스크 공간이 약간(?) 확보되었습니다.

결과를 확인해 보겠습니다.

select table_name, empty_blocks, blocks from dba_tables where table_name='IRIS';

*EMPTY_BLOCKS가 없어진걸 확인했습니다.