|
CREATE TABLESPACE EXTTBS
DATAFILE 'D:\KHDATA\EXTTBS01.DBF' SIZE 4M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
-- BLOCK의 배수로 할당해 주는 것이 좋다(권장)
ALTER TABLESPACE EXTTBS
ADD DATAFILE 'D:\KHDATA\EXTTBS02.DBF' SIZE 4M;
SELECT *
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME='EXTTBS';
SELECT FILE_NAME, BYTES"할당된 BYTES", BLOCKS"할당된 BLOCKS",
USER_BYTES"현재 사용가능 BYTES", user_BLOCKS"현재 사용가능 BLOCKS"
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME='EXTTBS';
사용된 BLOCKS (할당된 BLOCKS – 현재 사용가능 BLOCKS) 이 8BLOCK인데 이는 FILE HEADER를 위함이다.
|
CREATE TABLE TBLA (NAME VARCHAR2(10) )TABLESPACE EXTTBS; | CREATE TABLE TBLB (NAME VARCHAR2(10) )TABLESPACE EXTTBS; |
CREATE TABLE TBLC (NAME VARCHAR2(10) )TABLESPACE EXTTBS; | CREATE TABLE TBLD (NAME VARCHAR2(10) )TABLESPACE EXTTBS; |
CREATE TABLE TBLE (NAME VARCHAR2(10) )TABLESPACE EXTTBS; | CREATE TABLE TBLF (NAME VARCHAR2(10) )TABLESPACE EXTTBS; |
CREATE TABLE TBLG (NAME VARCHAR2(10) )TABLESPACE EXTTBS; |
--테이블을 생성 후, 다시 공간 확인
SELECT FILE_ID,FILE_NAME, BYTES"할당된 BYTES", BLOCKS"할당된 BLOCKS",
USER_BYTES"현재 사용가능 BYTES", user_BLOCKS"현재 사용가능 BLOCKS",
BYTES-USER_BYTES"현재 사용되고 있는 BYTES",
BLOCKS-USER_BLOCKS"현재 사용되고 있는 BLOCKS"
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME='EXTTBS';
위와 같이 7개의 테이블을 생성하였음에도 불구하고 공간에는 차이가 없음을 알 수 있다.
SELECT *
FROM DBA_EXTENTS
WHERE TABLESPACE_NAME='EXTTBS';
FILE_ID를 확인해보면 11번 즉, exttbs02.DBF 파일만 사용되고 있음을 확인 할 수 있다.
SELECT *
FROM DBA_FREE_SPACE
WHERE TABLESPACE_NAME='EXTTBS';
65번 블록부터 448번 블록까지 사용할 수 있다는 의미이다.
이제 위 테이블 들 중 몇 몇 개를 무작위 순서로 삭제하게 되면, DISK 공간의 단편화가 발생하게 된다. 이를 조각모음해보자.
(기본적으로 연속적으로 빈 공간에 대해서는 하나로 모을 수 있다. 하지만 듬성듬성 빈 공간은 조각모음을 통해 논리적으로 하나의 큰 공간으로 인식시켜 PERFORMANCE를 향상시킬 수 있다.)
|
이제 TBLB(17), TBLD(33),TBLF(49),TBLG(57)를 삭제하여보자.
우선 TBLB를 삭제하고 EXTENT 정보와 FREE_SPACE 정보를 확인한다.
DROP TABLE TBLB;
SELECT *
FROM DBA_EXTENTS
WHERE TABLESPACE_NAME='EXTTBS';
SELECT *
FROM DBA_FREE_SPACE
WHERE TABLESPACE_NAME='EXTTBS';
위에서 살펴보듯이 TBLB가 삭제되어진 것과 TBLB가 삭제되어지면서 BLOCK_ID 17번부터 8개 BLOCK이 FREE_SPACE로 풀린 것을 확인할 수 있다.
이와 같은 방식으로 TBL(D와 E,F)를 삭제하여 보면, 아래와 같이 확인 가능하며, 설명은 생략한다.
DROP TABLE TBLD;
DROP TABLE TBLF;
DROP TABLE TBLG;
이제 목표했던 테이블들을 모두 삭제하였음으로 다시 사용 중인 BLOCK과 FREE_SPACE를 확인해보면 아래와 같다.
(TBL B,D가 삭제되면서 불연속적인 BLOCK 공간의 삭제와 TBL F,G가 삭제되면서 연속적인 BLOCK 공간의 삭제를 볼 수 있다.)
다시말해 현재 사용되어 지고 있는 공간은 아래와 같이 TBL (A/C/E)`
|
ALTER TABLESPACE EXTTBS COALESCE;
(coalesce의 경우 불연속적인 블록의 통합은 불가능하다.
Purge recyclebin;
두 가지 방법을 통해 통합이 가능한데..
첫번째 방법은
테이블을 삭제할 때, purge 옵션을 사용하여 휴지통으로 들어가지 않고 바로 삭제한 후, 남아있는 테이블들을 새로운 테이블스페이스로 옮긴다. 그리고 기존 테이블스페이스를 coalesce 시켜 block들을 하나로 묶는다. 그런 후, 새로운 테이블스페이스로 옮겼던 데이터들을 기존 테이블스페이스로 옮기면 차례대로 입력되어진다.
두번째 방법은
휴지통을 비운 후, 정보가 있는 테이블들을 새로운 테이블스페이스로 옮긴다. 그리고 기존 테이블스페이스에서 coalesce를 실행하여 기존 테이블스페이스의 block들을 묶어주고, 다시 테이블들을 옮겨주는 방법이 있다. (이 방법의 경우 안될 수도 있다.)
SELECT *
FROM DBA_FREE_SPACE
WHERE TABLESPACE_NAME='EXTTBS';
위 그림과 같이 8block씩 나뉘어져 있던 테이블 2개가 통합(Merge)되어 단일 block으로 묶인 것을 확인할 수 있다.
'Database' 카테고리의 다른 글
오라클 예약어 (0) | 2009.04.26 |
---|---|
CHAPTER25. BACKUP & RECOVERY (0) | 2009.04.21 |
CHAPTER18. Oracle Password Management (0) | 2009.04.21 |
Chapter16. Oracle OS authentication User create (0) | 2009.04.21 |
CHAPER 10 ORACLE TEMPORARY TABLE (0) | 2009.04.20 |
TABLESPACE의 생성 및 관리 (0) | 2009.04.20 |
테이블스페이스의 추가 및 변경 (0) | 2009.04.17 |
REDO LOG 파일의 관리 (0) | 2009.04.17 |
Undo TableSpace 관리(생성/제거) (0) | 2009.04.16 |
Control File의 추가 및 삭제 그리고 복구 (0) | 2009.04.16 |