정보과학 IT

Oracle DBF : data file 즉, 물리적인 저장 구조

물곰탱이 2013. 10. 30. 23:48

Oracle DBF : data file 즉, 물리적인 저장 구조

 


 

 

 

data file은 Oracle이 실제 Data를 저장하는데 사용되는 파일이다. OS 수준에서 일반 file을 다루듯이 Oracle의 data file을 임의의 장소에 이동하거나, 삭제하게 되면 oracle DATABASE가 정상적으로 운영되지 않는다.

-- Data file의 가장 작은 단위는 Data BLOCK이며, 이러한 Data BLOCK이 몇개가 모여서 이루어지는 EXTENTS라는 단위로 데이터베이스의 저장공간이 관리된다.

-- Data BLOCK의 크기는 Oracle DATABASE 생성시 정해지며, parameter file에 설정된 크기가 명시되어 있다

-- 관계형 데이터베이스에서 모든 데이터는 TABLE이라는 2차원적 저장단위에 Row(행) 단위로 저장되며, 이 TABLE이 물리적 저장소인 Data file에 저장되는 것이다.

-- Data file은 DATABASE에 반드시 한 개 이상 존재해야 한다.

SQL> select tablespace_name,file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
--------------- -----------------------------------------------------------
USERS           /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
SYSAUX          /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
UNDOTBS1        /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
SYSTEM          /export/home/oracle/app/oracle/oradata/orcl/system01.dbf
SQL> select name,enabled from v$datafile;
NAME                                                         ENABLED
------------------------------------------------------------ ----------
/export/home/oracle/app/oracle/oradata/orcl/system01.dbf     READ WRITE
/export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf    READ WRITE
/export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf     READ WRITE
/export/home/oracle/app/oracle/oradata/orcl/users01.dbf      READ WRITE
SQL>
MAXDATAFILES와 DB_FILES의 차이점
datafile의 최대 개수는 MAXDATAFILES와 DB_FILES 파라미터에 의해서 제한 받는다. 1) MAXDATAFILES는 CREATE DATABASE 문으로 database 생성시 지정해 주며, database가 가질 수 있는 최대 datafile의 개수를 지정한다. 이때, 이 값은 control file에 기록이 되므로 이 값을 변경하기 위해서는 control file을 다시 생성해야 한다. 2) DB_FILES는 해당 INSTANCE에 대해서 지정된 datafile의 최대 개수 이며, 초기화 파일인 init<SID>.ora에서 설정된다. datafile의 개수가 DB_FILES에 도달하면 간단히 init<SID>.ora에서 값을 늘려 주면 된다. 이 때, MAXDATAFILES의 값을 넘으면 않된다. 그리고 datafile의 개수가 MAXDATAFILES에 도달하면 다음 두 가지 방법을 사용한다. 하나. control file을 다시 생성하면서 설정 값을 늘려 준다. 두울. 여러 개의 datafile로 이루어진 tablespace를 찾아서 이를 export받고 tablespace를 drop한 다음에 하나의 큰 datafile을 갖도록 tablespace를 생성한 후에 import한다.
Data file 확장하는 방법
방법1)Data file 추가ALTER TABLESPACE <tablespace명>
ADD DATAFILE '파일 경로' SIZE
방법2)AUTOEXTEND로 추가ALTER TABLESPACE <tablespace명>
ADD DATAFILE '파일 경로' SIZE AUTOEXTEND on
방법3)RESIZEALTER DATABASE [database명] DATAFILE '파일 이름'
RESIZE 크기 [K|M]
TABLESPACE에 DATA FILE 추가
TABLESPACE가 공간이 부족하여 TABLESPACE에 data file을 추가할 수 있다. 1) TABLESPACE에 data file 추가 【형식】 ALTER TABLESPACE <tablespace명> ADD DATAFILE 'filespec' [, 'filespec', ...] 2) TABLESPACE에 AUTOEXTEND 옵션으로 data file 추가 【형식】 ALTER TABLESPACE <tablespace명> ADD DATAFILE '경로와 이름' SIZE [AUTOEXTEND on] 【예제】 $ sqlplus '/as sysdba' SQL> select t.name, d.status, d.enabled 2 from v$datafile d, v$tablespace t 3 where t.ts# = d.ts#; NAME STATUS ENABLED ------------------------------ ------- ---------- SYSTEM SYSTEM READ WRITE UNDOTBS1 onLINE READ WRITE SYSAUX onLINE READ WRITE USERS onLINE READ WRITE SQL> select tablespace_name,file_name from dba_data_files; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf SQL> create tablespace users2 2 datafile '/export/home/oracle/app/oracle/oradata/orcl/users201.dbf' size 500k, 3 '/export/home/oracle/app/oracle/oradata/orcl/users202.dbf' size 500k 4 minimum extent 10k 5 default storage (initial 40k 6 next 40k 7 maxextents 50 8 pctincrease 0); Tablespace created. SQL> select tablespace_name,file_name from dba_data_files; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf USERS2 /export/home/oracle/app/oracle/oradata/orcl/users201.dbf USERS2 /export/home/oracle/app/oracle/oradata/orcl/users202.dbf 6 rows selected. SQL> select t.name, d.status, d.enabled 2 from v$datafile d, v$tablespace t 3 where t.ts# = d.ts#; NAME STATUS ENABLED ------------------------------ ------- ---------- SYSTEM SYSTEM READ WRITE UNDOTBS1 onLINE READ WRITE SYSAUX onLINE READ WRITE USERS onLINE READ WRITE USERS2 onLINE READ WRITE USERS2 onLINE READ WRITE 6 rows selected. SQL> ALTER TABLESPACE users2 2 ADD DATAFILE '/export/home/oracle/app/oracle/oradata/orcl/users203.dbf' SIZE 300k; Tablespace altered. SQL> select tablespace_name,file_name from dba_data_files; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf USERS2 /export/home/oracle/app/oracle/oradata/orcl/users201.dbf USERS2 /export/home/oracle/app/oracle/oradata/orcl/users202.dbf USERS2 /export/home/oracle/app/oracle/oradata/orcl/users203.dbf 7 rows selected. SQL> select t.name, d.status, d.enabled 2 from v$datafile d, v$tablespace t 3 where t.ts# = d.ts#; NAME STATUS ENABLED ------------------------------ ------- ---------- SYSTEM SYSTEM READ WRITE UNDOTBS1 onLINE READ WRITE SYSAUX onLINE READ WRITE USERS onLINE READ WRITE USERS2 onLINE READ WRITE USERS2 onLINE READ WRITE USERS2 onLINE READ WRITE 7 rows selected. SQL> ALTER TABLESPACE users2 2 ADD DATAFILE '/export/home/oracle/app/oracle/oradata/orcl/users204.dbf' size 200k 3 AUTOEXTEND on NEXT 10k MAXSIZE 400k; Tablespace altered. SQL> select tablespace_name,file_name from dba_data_files; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf USERS2 /export/home/oracle/app/oracle/oradata/orcl/users201.dbf USERS2 /export/home/oracle/app/oracle/oradata/orcl/users202.dbf USERS2 /export/home/oracle/app/oracle/oradata/orcl/users203.dbf USERS2 /export/home/oracle/app/oracle/oradata/orcl/users204.dbf 8 rows selected. SQL> select t.name, d.status, d.enabled 2 from v$datafile d, v$tablespace t 3 where t.ts# = d.ts#; NAME STATUS ENABLED ------------------------------ ------- ---------- SYSTEM SYSTEM READ WRITE UNDOTBS1 onLINE READ WRITE SYSAUX onLINE READ WRITE USERS onLINE READ WRITE USERS2 onLINE READ WRITE USERS2 onLINE READ WRITE USERS2 onLINE READ WRITE USERS2 onLINE READ WRITE 8 rows selected. SQL>
RESIZE로 TABLESPACE의 data file을 늘리는 방법
RESIZE 옵션을 사용하여 수동으로 data file의 크기를 변경할 수 있다. 【형식】 ALTER DATABASE <database명> DATAFILE 'filename' [, 'filename', ...] RESIZE 크기 [K|M]; 【예제】 SQL> column file_name format a60; SQL> column tablespace_name format a10; SQL> SELECT tablespace_name,file_name,bytes from DBA_DATA_FILES; TABLESPACE FILE_NAME BYTES ---------- ------------------------------------------------------------ ---------- USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf 5242880 SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf 335544320 UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf 26214400 SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf 471859200 SQL> ALTER DATABASE 2 DATAFILE '/export/home/oracle/app/oracle/oradata/orcl/users01.dbf' 3 RESIZE 10M; Database altered. SQL> SELECT tablespace_name,file_name,bytes from DBA_DATA_FILES; TABLESPACE FILE_NAME BYTES ---------- ------------------------------------------------------------ ---------- USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf 10485760 SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf 335544320 UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf 26214400 SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf 471859200 SQL>
data file의 이동 방법
data file의 위치나 이름을 변경하고자 할 경우에 대하여 살쳐보자
Data file 이동 방법 두 종류
ALTER TABLESPACE 문이동하고자 하는 tablespace를 offline으로 변경한 다음 복사 이동 후 tablespace를 online시킴
ALTER DEATABASE 문이동하고자 하는 file을 복사하기 전 반드시 DB 종료 후 복사 이동 후 DATABASE를 OPEN 시킴
1)ALTER TABLESPACE 문을 사용하여 이동하는 경우 【형식】 ALTER TABLESPACE <tablespace명> RENAME DATAFILE '기존 file경로와 이름' [,'file명',...] TO '이동하고자하는 file경로와 이름' [,'file명'...]; 이동 순서 a) TABLESPACE를 OFFLINE 상태로 전환한다. b) 운영체제 상에서 data file을 이동하거나 복사한다. c) ALTER TABLESPACE ... RENAME DATAFILE ... TO ...문을 실행한다. d) OFFLINE의 TABLESPACE를 onLINE 상태로 전환한다. 【예제】 SQL> sqlplus '/as sysdba' SQL> column tablespace_name format a10; SQL> column file_name format a60; SQL> select tablespace_name,file_name from dba_data_files; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf SQL> CREATE TABLESPACE users2 2 DATAFILE '/export/home/oracle/app/oracle/oradata/orcl/users201.dbf' SIZE 300k; Tablespace created. SQL> select tablespace_name,file_name from dba_data_files; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf USERS2 /export/home/oracle/app/oracle/oradata/orcl/users201.dbf SQL> ALTER TABLESPACE users2 OFFLINE; Tablespace altered. SQL> SELECT tablespace_name,status FROM DBA_TABLESPACES; TABLESPACE STATUS ---------- --------- SYSTEM onLINE UNDOTBS1 onLINE SYSAUX onLINE TEMP onLINE USERS onLINE USERS2 OFFLINE 6 rows selected. SQL> ! $ mv /export/home/oracle/app/oracle/oradata/orcl/users201.dbf \ > /export/home/oracle/app/oracle/oradata/user201.dbf $ exit SQL> ALTER TABLESPACE users2 2 RENAME DATAFILE '/export/home/oracle/app/oracle/oradata/orcl/users201.dbf' 3 TO '/export/home/oracle/app/oracle/oradata/user201.dbf'; Tablespace altered. SQL> select tablespace_name,file_name from dba_data_files; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf USERS2 /export/home/oracle/app/oracle/oradata/user201.dbf SQL> ALTER TABLESPACE users2 onLINE; Tablespace altered. SQL> SELECT tablespace_name,status FROM DBA_TABLESPACES; TABLESPACE STATUS ---------- --------- SYSTEM onLINE UNDOTBS1 onLINE SYSAUX onLINE TEMP onLINE USERS onLINE USERS2 onLINE 6 rows selected. SQL> 2)ALTER DATABASE 문을 사용하여 이동하는 경우 【형식】 ALTER DATABASE [database명] RENAME FILE '기존 file경로와 이름' [,'file명',...] TO '이동하고자하는 file경로와 이름' [,'file명'...]; 이동 순서 a) 반드시 DATABASE를 종료한다. b) 운영체제 상에서 data file을 이동하거나 복사한다. c) DATABASE를 MOUNT한다. d) ALTER DATABASE RENAME FILE...TO...문을 실행한다. e) DATABASE를 OPEN한다. 【예제】 SQL> sqlplus '/as sysdba' SQL> column tablespace_name format a10; SQL> column file_name format a60; SQL> SELECT tablespace_name,file_name FROM dba_data_files; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf SQL> CREATE TABLESPACE test 2 DATAFILE '/export/home/oracle/app/oracle/oradata/orcl/test01.dbf' SIZE 300K; Tablespace created. SQL> SELECT tablespace_name,file_name FROM dba_data_files; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf TEST /export/home/oracle/app/oracle/oradata/orcl/test01.dbf SQL> SHUTDOWN IMMEDIATE Database closed. Database dismounted. ORACLE instance shut down. SQL> ! $ mv /export/home/oracle/app/oracle/oradata/orcl/test01.dbf \ > /export/home/oracle/app/oracle/oradata/test02.dbf $ exit SQL> STARTUP MOUNT ORACLE instance started. Total System Global Area 289406976 bytes Fixed Size 778796 bytes Variable Size 99360212 bytes Database Buffers 188743680 bytes Redo Buffers 524288 bytes Database mounted. SQL> ALTER DATABASE RENAME FILE 2 '/export/home/oracle/app/oracle/oradata/orcl/test01.dbf' 3 TO '/export/home/oracle/app/oracle/oradata/test02.dbf'; Database altered. SQL> ALTER DATABASE OPEN; Database altered. SQL> SELECT tablespace_name,file_name FROM dba_data_files; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf TEST /export/home/oracle/app/oracle/oradata/test02.dbf SQL> SQL> select DF.TOTAL/1048576 "DataFile Size Mb", 2 LOG.TOTAL/1048576 "Redo Log Size Mb", 3 CONTROL.TOTAL/1048576 "Control File Size Mb", 4 (DF.TOTAL + LOG.TOTAL + CONTROL.TOTAL)/1048576 "Total Size Mb" from dual, 5 (select sum(a.bytes) TOTAL from dba_data_files a where tablespace_name in ('SYSTEM','UNDOTBS1', 'SYSAUX', 'USERS')) DF, 6 (select sum(b.bytes) TOTAL from v$log b) LOG, 7 (select sum((cffsz+1)*cfbsz) TOTAL from x$kcccf c) CONTROL; DataFile Size Mb Redo Log Size Mb Control File Size Mb Total Size Mb ---------------- ---------------- -------------------- ------------- 1560 150 18.59375 1728.59375 SQL>
data file에 대한 정보 조회

 

 

v$datafile data file에 대한 정보
v$tablespace테이블스페이스의 논리적인 정보
dba_data_filesdata file에 대한 물리적인 정보

 

 

http://radiocom.kunsan.ac.kr/lecture/oracle/what_is/data_file.html

'정보과학 IT' 카테고리의 다른 글

KMS 인증  (0) 2013.10.31
Oracle DBF : data file의 이동 방법  (0) 2013.10.30
윈도우 7 파티션 분할, 합치기  (0) 2013.10.30
Pro*C의 기초  (0) 2013.10.28
Pro*C 프로그램 개요  (0) 2013.10.28