반응형

안녕하세요...

오늘은 ASM으로 설치된 ORACLE DBMS 테이블스페이스 관리하는 방법에 대해 알아보겠습니다.

데이터파일 RESIZE는 기존 파일시스템 관리 방식과 동일합니다.

1. DATAFILE RESIZE

SELECT FILE_NAME, BYTES/1024/1024/1024||'GB' FROM DBA_DATA_FILES X 

WHERE TABLESPACE_NAME = 'SYSTEM' ORDER BY FILE_NAME;

ALTER DATABASE DATAFILE '+DATA/EPSDB/system01.dbf' RESIZE 3G;

테이블스페이스의 데이터파일 추가 방식이 약간 변경되었습니다.

DATAFILE 명령어 이후에 '+DATA'만 명시해주시면 DATAFILE이 자동 추가됩니다. 이름도 자동추가됩니다.

2. DATAFILE ADD


SELECT FILE_NAME, BYTES/1024/1024/1024||'GB' FROM DBA_DATA_FILES X 

WHERE TABLESPACE_NAME = 'TS_STAT' ORDER BY FILE_NAME;

ALTER TABLESPACE TS_STAT ADD DATAFILE '+DATA' SIZE 30G;

3. ASM 용량확인

반응형
반응형

1. DB 용량확인(MEGA)

/************************
DB 용량확인(MEGA)
************************/
select f.tname "TableSpace", round(sum(d.bytes)/1024/1024, 0) "Total(M)",round((sum(d.bytes) - sum(f.bytes))/1024/1024, 0) "UsedSpace(M)",
round((sum(d.bytes) - sum(f.bytes))/sum(d.bytes)*100, 0) "Used(%)", round(sum(f.bytes)/1024/1024, 0) "FreeSpace(M)"
from
(select sum(bytes) bytes,tablespace_name tname from dba_free_space group by tablespace_name) f,
(select sum(bytes) bytes,tablespace_name tname from dba_data_files group by tablespace_name) d
where f.tname = d.tname group by f.tname order by f.tname;

 

2. DB 용량확인(GIGA)

/************************
DB 용량확인(GIGA)
************************/
select f.tname "TableSpace", round(sum(d.bytes)/1024/1024/1024, 0) "Total(G)",round((sum(d.bytes) - sum(f.bytes))/1024/1024/1024, 0) "UsedSpace(G)",
round((sum(d.bytes) - sum(f.bytes))/sum(d.bytes)*100, 0) "Used(%)", round(sum(f.bytes)/1024/1024/1024, 0) "FreeSpace(G)" from
(select sum(bytes) bytes,tablespace_name tname from dba_free_space group by tablespace_name) f,
(select sum(bytes) bytes,tablespace_name tname from dba_data_files group by tablespace_name) d
where f.tname = d.tname group by f.tname order by f.tname;

반응형
반응형


-- 실전 오라클 백업과 복구(생능출판사, 서진수 지음), p.144~p.154
-- 일반 테이블 스페이스 관리


목록
1. 일반 테이블 스페이스 생성 및 조회하기
2. 각 데이터 파일의 실제 사용량 확인하는 방법
3. 테이블 스페이스 용량 관리하기
 1) 수동으로 테이블 스페이스에 데이터 파일 추가하기
 2) 데이터 파일 크기 수동 증가시키기
 3) 데이터 파일 크기 자동 증가시키기
 4) 각 데이터 파일들의 autoextend 유무 확인하기

4. Tablespace Offline
 1) normal mode
 2) temporary mode
 3) immediate mode


-- 1. 일반 테이블 스페이스 생성 및 조회하기

SQL> create tablespace haksa
datafile '/u01/app/oracle/oradata/orcl/haksa01.dbf' size 10M
segment space management auto;

SQL> select tablespace_name, status, contents, extent_management,
segment_space_management
from dba_tablespaces;

SQL> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;


-- 2. 각 데이터 파일의 실제 사용량 확인하는 방법
SQL> set line 200
SQL> col file# for 999
SQL> col ts_name for a10
SQL> col total_blocks for 9999999
SQL> col used_blocks for 9999999
SQL> col pct_used for a10

-- 아래 쿼리 오래 걸림
-- Production에서 운영 중에 하지 마시기 바랍니다.

SQL> select distinct d.file_id file#,
d.tablespace_name ts_name,
d.bytes/1024/1024 MB,
d.bytes/8192 total_blocks,
sum(e.blocks) used_blocks,
to_char(nvl(round(sum(e.blocks)/(d.bytes/8192),4),0)*100, '09.99')||' %' pct_used
from dba_extents e, dba_data_files d
where d.file_id = e.file_id(+)
group by d.file_id, d.tablespace_name, d.bytes
order by 1, 2;

FILE# TS_NAME            MB TOTAL_BLOCKS USED_BLOCKS PCT_USED
----- ---------- ---------- ------------ ----------- ----------
    1 SYSTEM            480        61440       60992  99.27 %
    2 UNDOTBS1           30         3840        3136  81.67 %
    3 SYSAUX            240        30720       30304  98.65 %
    4 USERS               5          640         376  58.75 %
    5 EXAMPLE           100        12800        8728  68.19 %
    6 UNDO01             10         1280         168  13.13 %
    7 HAKSA              10         1280              00.00 %

 

-- 3. 테이블 스페이스 용량 관리하기
SQL> col tablespace_name for a10
SQL> col file_name for a50
SQL> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;
SQL> create table scott.iphak(studno number) tablespace haksa;

SQL> begin
 for i in 1..50000 loop
  insert into scott.iphak values(i);
 end loop;
 commit;
end;
/


-- 1) 수동으로 테이블 스페이스에 데이터 파일 추가하기
SQL> alter tablespace haksa
add datafile '/u01/app/oracle/oradata/orcl/haksa02.dbf' size 20M;

SQL> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;


-- 2) 데이터 파일 크기 수동 증가시키기
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/haksa01.dbf' resize 20M;


-- 3) 데이터 파일 크기 자동 증가시키기
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/haksa01.dbf' autoextend on;


cf.'autoextend on' 옵션을 사용할 경우 데이터 파일은 자동으로 증가하게 되며 그 크기는 만약 오라클이 32bit일 경우에는 최대 파일 1개의 크기는 16GB까지 가능하며 오라클이 64bit용일 경우에는 최대 크기가 32GB까지 가능하게 된다.


-- 4) 각 데이터 파일들의 autoextend 유무 확인하기
SQL> set line 200
SQL> col tablespace_name for a10
SQL> col file_name for a50

SQL> select tablespace_name, bytes/1024/1024 MB, file_name, autoextensible "auto", online_status from dba_data_files;

SQL> alter database datafile '/u01/app/oracle/oradata/orcl/haksa02.dbf' autoextend on;

SQL> select tablespace_name, bytes/1024/1024 MB, file_name, autoextensible "auto", online_status from dba_data_files;


-- 4. Tablespace Offline
-- 1) normal mode

SQL> alter tablespace haksa offline;

cf. Tablespace를 offline하게 되면 그 파일들에는 새로운 정보가 저장되지 않는다. 그래서 offline한 후에 online을 한다면 반드시 checkpoint를 발생시켜야 한다.

SQL> select file#, name, status from v$datafile;

SQL> select a.file#, a.ts#, b.name, a.status, a.checkpoint_change#
from v$datafile a, v$tablespace b
where a.ts#=b.ts#;

SQL> alter tablespace haksa online;

SQL> select a.file#, a.ts#, b.name, a.status, a.checkpoint_change#
from v$datafile a, v$tablespace b
where a.ts#=b.ts#;

SQL> alter system checkpoint;

SQL> select a.file#, a.ts#, b.name, a.status, a.checkpoint_change#
from v$datafile a, v$tablespace b
where a.ts#=b.ts#;


-- 2) temporary mode

SQL> alter database datafile '/u01/app/oracle/oradata/orcl/haksa02.dbf' offline; -- immediate mode

SQL> alter tablespace haksa offline; -- 에러 발생, 이미 offline되어 있음

SQL> alter tablespace haksa offline temporary;

SQL> recover tablespace haksa;

SQL> alter tablespace haksa online;

SQL> select a.file#, a.ts#, b.name, a.status, a.checkpoint_change#
from v$datafile a, v$tablespace b
where a.ts#=b.ts#;

SQL> alter system checkpoint;

SQL> select a.file#, a.ts#, b.name, a.status, a.checkpoint_change#
from v$datafile a, v$tablespace b
where a.ts#=b.ts#;

 

-- 3) immediate mode

반응형
반응형

 1. 테이블스페이스 크기 조절
  ---> 테이블스페이스 생성시 용량이 부족할 경우 자동으로 용량이 증가하는 옵션(autoextend)이 존재한다. 하지만, 이 옵션을 사용하지 않고 테이블스페이스를 생성했는데, 부득이하게 용량을 조절해야 할 경우가 발생할 수 있다. 대부분의 경우 데이터의 양이 급격히 늘어나서 발생하지만, 간혹 용량을 줄이기 위해 사용할 때가 있으므로 자동증가 옵션만 믿고 크기 조절에 대해서 잊어보리면 안될 것이다.

 alter database datafile '[데이터파일명]' resize [크기(예. 300M)];

 2. Table/Index의 테이블스페이스 변경
  ---> 사용자가 테이블을 생성하거나 인덱스 등을 생성할 때 별다른 옵션을 주지 않는다면 사용자에게 부여된 기본 테이블스페이스에 해당 객체를 생성하게 된다. 그러나, 상황에 따라 테이블이나 인덱스가 저장된 테이블스페이스를 다른 테이블스페이스로 변경할 수도 있다.

 alter table [테이블명] move tablespace [테이블스페이스명];
alter index [인덱스명] rebuild tablespace [테이블스페이스명];

반응형
반응형

 
 Tablespace란? DBMS에 저장되는 자료가 있는 물리적인 파일이다.
각 개체마다 테이블스페이스를 지정해줄 수 있고, 사용자에게 기본으로 사용할 테이블스페이스를 지정할 수도 있다. 또한 오라클에서는 작업을 위한 Temp 테이블스페이스도 존재하는데, 이 역시 별도로 사용자가 생성하고 지정할 수 있다. 테이블스페이스는 각각이 하나의 파일이기 때문에 생성시 물리적으로 저장될 공간을 지정할 수 있다. 이러한 특징 때문에 디스크 부하를 고려하여 여러 위치에 테이블스페이스를 생성하여 사용할 수 있다.

 보통 오라클에서는 /usr/local/oracle/oradata/[SID]/ 디렉토리에 기본 테이블스페이스를 생성하며, Oracle Express Edition에서는 /usr/lib/oracle/xe/oradata/XE/ 디렉토리에 기본 테이블스페이스를 저장한다.

 1. 테이블스페이스 생성
  ---> 테이블스페이를 생성할 경우 여러 옵션이 사용될 수 있으나 테이블스페이스의 기본 용량을 자동으로 늘려주는 옵션(autoextend) 등은 기본으로 사용하는 것이 편하나, 대부분의 회사에서는 사용하지 않는다.

create tablespace [테이블스페이스명]
datafile '[테이블스페이스경로(예. /usr/lib/oracle/xe/oradata/XE/)]/[테이블스페이스명].dbf'
size [용량(예. 1M)]
autoextend on
extent management local autoallocate;

 2. Temp 테이블스페이스 생성
  ---> Temp 테이블스페이스의 최소 용량은 1 M 이상이다. 그러므로 처음 생성시 2M로 생성한 뒤 자동증가 옵션을 사용해야 한다.
 

create temporary tablespace [테이블스페이스명]
tempfile '[Temp 테이블스페이스경로(예. /usr/lib/oracle/xe/oradata/XE/)]/[테이블스페이스명].dbf'
size [용량(예. 2M)]
autoextend on
extent management local;

3. 테이블스페이스 삭제
 ---> 특별한 경우가 아니면 테이블스페이스의 모든 내용을 자동으로 지우고 파일까지 깔끔하게 삭제할 수 있다. 이 옵션이 바로 "INCLUDING CONTENTS AND DATAFILES" 이다.

 drop tablespace [테이블스페이스명]
including contents and datafiles
cascade constraints;

4. 테이블스페이스 데이터파일 추가 및 RESIZE

SELECT FILE_NAME, BYTES/1024/1024/1024||' GB' FROM DBA_DATA_FILES X WHERE TABLESPACE_NAME='USERS' ORDER BY FILE_NAME;

ALTER TABLESPACE USERS ADD DATAFILES '/oradata/users02.df' SIZE 10G;

ALTER DATAFILE '/oradata/users02.df' RESIZE 30G;

반응형
반응형

아래의 구문들은 본인이 참고하기 위한 것입니다. 만약 Test를 위한 것이라면 아래의 구문으로 Test하시기 바랍니다.
1. Test 테이블 스페이스 생성하기
CREATE TABLESPACE "DATA_TEST"
LOGGING
DATAFILE
'D:\DATABASE\SLXO2P\DATAFILES\DATA_TEST01.DBF' SIZE 4M,
'D:\DATABASE\SLXO2P\DATAFILES\DATA_TEST01.DBF' SIZE 4M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

 ---> AUTO 옵션을 주면 할당된 용량이 다 차면, 자동으로 용량을 늘려준다.

2. 본인이 참고하기 위해 만든 것들
1) 데이타가 들어갈 테이블 스페이스 생성하기
CREATE TABLESPACE "DATA_XOSL2_D_P"
LOGGING
DATAFILE
'D:\DATABASE\SLXO2P\DATAFILES\DATA_XOSL2_D_P01.ORA' SIZE 4000M REUSE,
'D:\DATABASE\SLXO2P\DATAFILES\DATA_XOSL2_D_P02.ORA' SIZE 4000M REUSE,
'D:\DATABASE\SLXO2P\DATAFILES\DATA_XOSL2_D_P03.ORA' SIZE 4000M REUSE,
'D:\DATABASE\SLXO2P\DATAFILES\DATA_XOSL2_D_P04.ORA' SIZE 4000M REUSE,
'D:\DATABASE\SLXO2P\DATAFILES\DATA_XOSL2_D_P05.ORA' SIZE 4000M REUSE,
'D:\DATABASE\SLXO2P\DATAFILES\DATA_XOSL2_D_P06.ORA' SIZE 4000M REUSE,
'D:\DATABASE\SLXO2P\DATAFILES\DATA_XOSL2_D_P07.ORA' SIZE 4000M REUSE,
'D:\DATABASE\SLXO2P\DATAFILES\DATA_XOSL2_D_P08.ORA' SIZE 4000M REUSE
DEFAULT STORAGE ( INITIAL 2048K NEXT 2048K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 10);

2) 위의 데이타 테이블 스페이스에 대한 인덱스 테이블 스페이스 생성하기
CREATE TABLESPACE "INDX_XOSL2_D_P"
LOGGING
DATAFILE
'E:\DATABASE\SLXO2P\DATAFILES\INDX_XOSL2_D_P01.ORA' SIZE 4000M REUSE,
'E:\DATABASE\SLXO2P\DATAFILES\INDX_XOSL2_D_P02.ORA' SIZE 4000M REUSE,
'E:\DATABASE\SLXO2P\DATAFILES\INDX_XOSL2_D_P03.ORA' SIZE 4000M REUSE,
'E:\DATABASE\SLXO2P\DATAFILES\INDX_XOSL2_D_P04.ORA' SIZE 4000M REUSE,
'E:\DATABASE\SLXO2P\DATAFILES\INDX_XOSL2_D_P05.ORA' SIZE 4000M REUSE,
'E:\DATABASE\SLXO2P\DATAFILES\INDX_XOSL2_D_P06.ORA' SIZE 4000M REUSE,
'E:\DATABASE\SLXO2P\DATAFILES\INDX_XOSL2_D_P07.ORA' SIZE 4000M REUSE,
'E:\DATABASE\SLXO2P\DATAFILES\INDX_XOSL2_D_P08.ORA' SIZE 4000M REUSE,
'E:\DATABASE\SLXO2P\DATAFILES\INDX_XOSL2_D_P09.ORA' SIZE 4000M REUSE,
'E:\DATABASE\SLXO2P\DATAFILES\INDX_XOSL2_D_P10.ORA' SIZE 4000M REUSE
DEFAULT STORAGE ( INITIAL 2048K NEXT 2048K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 10);

3) 위의 임시 테이블 스페이스 생성하기
CREATE TEMPORARY
TABLESPACE "DATA_TEMP" TEMPFILE
'D:\DATABASE\SLXO2P\DATAFILES\DATA_TEMP01.ORA' SIZE 4096M REUSE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024K;

반응형