본문 바로가기
OraclE

테이블스페이스(TABLESPACE)

by 타마마임팩트_쫀 2010. 10. 21.







테이블스페이스(TABLESPACE)

-------------------------
 - 오라클 서버가 데이터를 저장하는 논리적인 구조
 - 테이블스페이스는 1개 또는 여러 개의 데이터파일을 가진 논리적인 데이터 저장 구조

 - LMT(Locally Managed Tablespace)

 - DMT(Dictionary Managed Tablespace)

 - Next Extent크기는 64KB, 1MB, 8MB, 64MB 순으로 사용됨
 - AUTOALLOCATE의 경우

   처음 테이블의 EXTENT는 64KB부터 시작, 1MB가 될 때까지 64KB단위로 증가,

   1MB가 된 이후부터는 1MB단위로 증가, 이후부터는 64MB가 되었을 때 8MB,
   1GB가 되었을 때 64MB단위로 증가


--------------------------------------------

테이블스페이스 생성

--------------------------------------

 

1. 데이터파일 raw device인 경우(9i~)
    SQL> CREATE TABLESPACE       테이블스페이스명
         datafile  '/dev/vg_data01/rlvol_test' [size  99M]
         EXTENT MANAGEMENT LOCAL     -- Default is LOCAL

                                     -- (LOCAL/DICTIONARY Managed Tablespace)
         [AUTOALLOCATE] or [UNIFORM SIZE 1M]  -- Auto Extent Size or Uniform Extent Size

                                              -- (initial이 지정되었을 경우 initial Size)
         SEGMENT SPACE MANAGEMENT AUTO        -- freelist 및 pctused 등을 자동으로 관리

         ;                                    -- (AUTO/MANUAL)

 

2. 데이터파일 file system인 경우
    SQL> CREATE TABLESPACE 테이블스페이스명
         datafile   '/data01/데이터파일명'  size  100M
         AUTOEXTEND ON  NEXT 10M

         MAXSIZE 4000M MINIMUM EXTENT 1M -- datafile에 대한 option 임
         EXTENT MANAGEMENT LOCAL         -- Default is LOCAL (LOCAL or DICTIONARY)
         [AUTOALLOCATE] or [UNIFORM SIZE 1M] -- Auto Extent Size or Uniform Extent Size

                                             -- (initial이 지정되었을 경우 initial Size)
         SEGMENT SPACE MANAGEMENT AUTO       -- freelist 및 pctused 등을 자동으로 관리

                                             -- (AUTO/MANUAL)

 

--------------------------------------------

테이블스페이스 관리

--------------------------------------

 

1. COALESCE

    SQL> alter tablespace 테이블스페이스명 coalesce ;

         - ORACLE 7, 8, 8i, 9i DICTIONARY Management Tablespace일 경우 사용

           (Locally Managed Tablespace는 coalesce가 필요 없음)
         - For each datafile in the tablespace,
           this clause coalesces all contiguous free extents

           into larger contiguous extents.


 

2. RENAME

    SQL> ALTER TABLESPACE 구테이블스페이스명 RENAME TO 신규테이블스페이스명;

         - 9i이하에서는 지원하지 않음, 10g부터 지원
         - 사용자의 DEFAULT TABLESPACE 함께 변경됨
           SQL> SELECT * FROM DBA_USERS;
           SQL> ALTER USER 사용자명 DEFAULT TABLESPACE 테이블스페이스명;

 

3. Read/Write

    SQL> alter tablespace 테이블스페이스명 read only ;

         - read only 테이블스페이스는 온라인(HOT) 백업에서 제외됨


   SQL> alter tablespace 테이블스페이스명 read write ;

 

4. Online/Offline

   SQL> alter tablespace 테이블스페이스명 online;

   SQL> alter tablespace 테이블스페이스명 offline;

 

5. Drop

   SQL> drop tablespace 테이블스페이스명;

   SQL> drop tablespace 테이블스페이스명 including contents cascade;

   SQL> drop tablespace 테이블스페이스명 including contents cascade constraints;
   SQL> DROP TABLESPACE TBS1 INCLUDING CONTENTS AND DATAFILES;

        - (9i~) 데이타파일도 함께 삭제


 

6. LMT to DMT/DMT to LMT

   - 8.1.5는 LMT에서 DMT로 변환만이 가능
   - 8.1.6 이상부터 LMT와 DMT 상호변환 가능
   - 테이블스페이스의 Segment Management가 Auto로 되어 있거나 Compress되어 있으면
     테이블스페이스 마이그레이션이 되지 않음
   SQL> EXECUTE DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL('테이블스페이스명');

   SQL> EXEC DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL('테이블스페이스명');

 

7. 온라인(HOT) 백업

   SQL> ALTER TABLESPACE 테이블스페이스명 BEGIN BACKUP;
        테이블스페이스에 속하는 데이터파일들 cp 명령어 또는 dd 명령어로 복사
   SQL> ALTER TABLESPACE 테이블스페이스명 END   BACKUP;

 

8. 데이터파일이 손상되었을 때 데이터파일 offline drop 후 복구
   SQL> alter database datafile '/data01/데이터파일명' offline drop;

   - 해당 테이블스페이스 온라인 백업 불가

 

9. 데이터파일에 사용하는 세그먼트가 없을 경우 해당 데이터파일 DROP 가능
   SQL> alter tablespace drop datafile '/data01/데이터파일명';

 

10. 사용량/사용율 조회

    SQL> SELECT A.TABLESPACE_NAME,
                SUM(A.BYTES)/1024                                       AS "TOTAL(KB)",
                SUM(A.BYTES)/1024 - NVL(SUM(SZ_KB),0)                   AS "USED(KB)",
                NVL(SUM(SZ_KB),0)                                       AS "FREE(KB)",
                NVL(( 1. - SUM(SZ_KB)/(SUM(A.BYTES)/1024.) ) * 100,100) AS "USED RATIO(%)"
           FROM DBA_DATA_FILES A,
                ( SELECT FILE_ID  ,
                         SUM(BYTES)/1024. AS SZ_KB
                    FROM DBA_FREE_SPACE
                   GROUP BY FILE_ID
                ) B
          WHERE A.FILE_ID = B.FILE_ID(+)
          GROUP BY A.TABLESPACE_NAME;

 

 

 

 

 

 

 

create tablespace

 

 

/* datafile 생성시 size 는 반드시 지정해야 함 */
/* option 을 주지 않으면 extent_management: local, allocation_type: system, segment_space_management: auto  로 생성됨 */


create tablespace ts_flm01 datafile 'C:\ORACLE\ORADATA\ORCL\flm01.DBF' SIZE 10M AUTOEXTEND ON;

 

/* segment space management manual option 을 주면 segment_space_management: manual  로 생성됨 */
create tablespace ts_flm02 datafile 'C:\ORACLE\ORADATA\ORCL\flm02.DBF' SIZE 10M AUTOEXTEND ON segment space management manual;

 

/* uniform size 를 주면 initial_extent 와 next_extent 동일하게 잡히고, allocation_type 이 uniform 으로 설정됨 */
create tablespace ts_flm03 datafile 'C:\ORACLE\ORADATA\ORCL\flm03.DBF' SIZE 10M extent management local uniform size 1m segment space management auto;

 

/* size 설정: 처음 size는 file size 이고, uniform size는 initial/next extent size 임 */
create tablespace ts_flm04 datafile 'C:\ORACLE\ORADATA\ORCL\flm04.DBF' SIZE 50M extent management local uniform size 5m segment space management auto;

 

/* db block_size를 변경하기 위해서는 DB_CACHE_SIZE와 적어도 하나의 DB_2/4/8/16/32K_CACHE_SIZE 를 설정하고 해야 함 */
alter system set db_cache_size = 8k;

alter system set db_16k_cache_size = 32M;

create tablespace ts_flm05 datafile 'C:\ORACLE\ORADATA\ORCL\flm05.DBF' size 10M blocksize 16384 ;

 

/* autoextend on next size 지정 */
create tablespace ts_flm06 datafile 'C:\ORACLE\ORADATA\ORCL\flm06.DBF' size 10M autoextend on next 10M    blocksize 16384 ;

 

/* autoextend on uniform size 지정 */
create tablespace ts_flm07 datafile 'C:\ORACLE\ORADATA\ORCL\flm07.DBF' size 10M autoextend on uniform size 5M    blocksize 16384 ;

 

/* autoextend off : 바뀐게 없네 ... */
create tablespace ts_flm08 datafile 'C:\ORACLE\ORADATA\ORCL\flm08.DBF' size 10M autoextend off uniform size 5M    blocksize 16384 ;


create tablespace ts_flm09 datafile 'C:\ORACLE\ORADATA\ORCL\flm09.DBF' size 10M autoextend off;

 

/* tablespace 조회 */
select tablespace_name, block_size, initial_extent, next_extent, pct_increase, min_extlen
    , extent_management, allocation_type, SEGMENT_SPACE_MANAGEMENT
from dba_tablespaces where tablespace_name like 'TS_%';

 

/* tablespace & datafile 삭제 */
drop tablespace ts_flm05 including contents and datafiles;

 

 

 

 

======================
SQL> /* tablespace 조회 */
SQL> select tablespace_name, block_size, initial_extent, next_extent, pct_increase

    , min_extlen, extent_management, allocation_type

    , SEGMENT_SPACE_MANAGEMENT
from dba_tablespaces where tablespace_name like 'TS_%';

 

TABLESPACE_NAME                BLOCK_SIZE  INITIAL_EXT NEXT_EXTENT PCT_INCREAS MIN_EXTLEN  EXTENT_MAN ALLOCATIO SEGMEN
------------------------------ ----------- ----------- ----------- ----------- ----------- ---------- --------- ------
TS_FLM01                              8192       65536                               65536 LOCAL      SYSTEM    AUTO 
TS_FLM02                              8192       65536                               65536 LOCAL      SYSTEM    MANUAL
TS_FLM03                              8192     1048576     1048576           0     1048576 LOCAL      UNIFORM   AUTO 
TS_FLM04                              8192     5242880     5242880           0     5242880 LOCAL      UNIFORM   AUTO 
TS_FLM05                             16384       65536                               65536 LOCAL      SYSTEM    AUTO 
TS_FLM06                             16384       65536                               65536 LOCAL      SYSTEM    AUTO 
TS_FLM07                             16384     5242880     5242880           0     5242880 LOCAL      UNIFORM   AUTO 
TS_FLM08                             16384     5242880     5242880           0     5242880 LOCAL      UNIFORM   AUTO 
TS_FLM09                              8192       65536                               65536 LOCAL      SYSTEM    AUTO 
 

'OraclE' 카테고리의 다른 글

[펌] INBOUND_CONNECT_TIMEOUT  (0) 2011.09.15
Resumable Space Allocation  (0) 2011.01.27
Automatic Undo Retention 개요 [펌]  (0) 2010.10.12
10G RAC Fail-Over test중 CRS가 listener down을 늦게 감지  (0) 2010.09.01
Managing Job Queues  (0) 2010.07.11