datafile 관리하기

datafile 관리하기

datafile 저장영역 구조

  • 모든 Datafile은 Tablespace로 감싸져있어야한다
  • Tablespace : 논리적 저장 영역 구조
    • 논리적이기때문에 SIZE가 없다.
  • Tablespace 개수 ≤ Datafile 개수
    • Tablespace개수가 Datafile개수보다 더 많을 수 없다.
  • DB생성시 system데이터파일/system테이블스페이스와 undo데이터파일/undo테이블스페이스는 필수이다.
  • 두 용어의 차이. 헷갈리지말 것
    • extent : segment(객체)의 확장단위·할당단위
    • extend : datafile의 확장단위

http://ora-performance-tuning.blogspot.com/2014/02/logical-and-physical-database-structures.html




datafile 내용 보기

  • 데이터파일안의 구성은 v$datafile와 v$tempfile를 통해서 알 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_fwvn49fw_.dbf
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_fwvn5f1l_.dbf
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_fwvn66mp_.dbf
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_fwvn681o_.dbf

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_temp_fwvnbgvk_.tmp
  • system.dbf : Data dictionary
  • sysaux.dbf : 통계 데이터을 모아놓은 파일,
  • undo.dbf : undo데이터, DML작업은 COMMIT도 되지만 ROLLBACK도 되기때문에 오라클은 변경작업하기전에 이전 데이터의 복사본을 UNDO데이터 파일에 올려놓는다.
  • users.dbf : 일반 user 소유의 object를 보관하기 위한 파일
  • temp.tmp : 임시데이터. sub쿼리의 결과값을 저장하는 파일(메인쿼리실행할때 참조함), order by절이나 group by절을 실행하면 정렬을 해야하므로 임시데이터를 생성함. dist 중복된 값 제거를 위해서 정렬을 해야하기때문에 임시데이터를 생성함.
  • 일반적인 회사는 system.dbf, sysaux.dbf, undo.dbf,temp.tmp는 기본으로 있고 회사의 규모에 따라 users.dbf파일의 개수가 차이난다.




Tablespace이름과 datafile이름을 함께 보는 쿼리

  • tablespace의 개수와 tablespace이름, 데이터파일이름을 알아보는 쿼리이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  1  select d.ts#, t.name as "T/S name", d.name "Datafile name"
2 from v$datafile d
3 join v$tablespace t
4* on d.ts# = t.ts#
SQL> /

TS# T/S name Datafile name
---------- -------------------- ----------------------------------------
0 SYSTEM /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_system_fwvn49fw_.dbf

1 SYSAUX /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_sysaux_fwvn5f1l_.dbf

2 UNDOTBS1 /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_undotbs1_fwvn66mp_.dbf

4 USERS /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_users_fwvn681o_.dbf




DB공간관리, DB공간 늘리는 3가지 방법

  1. 새로운 Tablespace를 추가해서 DB공간을 늘릴 수 있다.
    • why? Tablespace를 추가하려면 반드시 하나이상의 데이터파일이 속해있어야한다.
    • 따라서 데이터파일의 물리적 크기만큼 DB공간을 늘릴 수 있다.
  2. 기존 Tablespace에 데이터파일을 추가하여 DB공간을 늘릴 수 있다.
  3. 기존 데이터파일의 크기를 늘려서 DB공간을 늘릴 수 있다.




EM을 이용하여 새로운 Tablespace를 추가해서 DB공간을 늘리기

  • EM접속 -> storage탭 -> Tablespace 클릭 -> create버튼 클릭 -> 속성 설정하고 OK





EM을 이용하여 기존 Tablespace에 데이터파일을 추가하여 DB공간 늘리기

  • EM접속 -> storage탭 -> Tablespace 클릭 -> 기존테이블스페이스 클릭 -> add datafile 버튼 클릭 -> 속성 설정하고 OK




EM을 이용하여 기존 데이터파일의 크기를 늘려서 DB공간을 늘리기

  • EM접속 -> storage탭 -> Tablespace 클릭 -> 기존 데이터파일의 클릭 -> action 버튼 클릭 -> resize 클릭 -> 속성 설정하고 OK




명령어로 새로운 Tablespace를 추가해서 DB공간을 늘리기

  • autoextend on : 자동확장기능 옵션, 기존사이즈 100M가 다 차면 10M씩 최대 500M까지 늘어난다
    • maxsize지정안하면 사이즈가 무한대다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
SQL> create tablespace appuser                                                            
2 datafile '/u01/app/oracle/oradata/ORCL/datafile/appuser01.dbf' size 100M
3 autoextend on next 10M maxsize 500M;

Tablespace created.

//생성한 테이블스페이스 확인하기
SQL> select d.ts#, t.name as "T/S name", d.name "Datafile name"
2 from v$datafile d
3 join v$tablespace t
4 on d.ts# = t.ts#;

TS# T/S name Datafile name
---------- -------------------- ----------------------------------------
0 SYSTEM /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_system_fwvn49fw_.dbf

4 USERS /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_users_hp871s7n_.dbf

1 SYSAUX /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_sysaux_fwvn5f1l_.dbf

2 UNDOTBS1 /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_undotbs1_fwvn66mp_.dbf

TS# T/S name Datafile name
---------- -------------------- ----------------------------------------

6 EXAMPLE /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_example_hp86s7s0_.dbf

4 USERS /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_users_fwvn681o_.dbf

7 APPUSER /u01/app/oracle/oradata/ORCL/datafile/ap
puser01.dbf
7 rows selected.




명령어로 기존 Tablespace에 데이터파일을 추가하여 DB공간 늘리기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
SQL> alter tablespace appuser
2 add datafile '/u01/app/oracle/oradata/ORCL/datafile/appuser02.dbf' size 50M;

Tablespace altered.


//기존 테이블스페이스에 새로 셍성한 데이터파일 확인하기
SQL> @/home/oracle/checkTablespaceNname.sql

TS# T/S name Datafile name
---------- -------------------- ----------------------------------------
0 SYSTEM /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_system_fwvn49fw_.dbf

4 USERS /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_users_hp871s7n_.dbf

1 SYSAUX /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_sysaux_fwvn5f1l_.dbf

2 UNDOTBS1 /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_undotbs1_fwvn66mp_.dbf

6 EXAMPLE /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_example_hp86s7s0_.dbf

4 USERS /u01/app/oracle/oradata/ORCL/datafile/o1
_mf_users_fwvn681o_.dbf

7 APPUSER /u01/app/oracle/oradata/ORCL/datafile/ap
puser01.dbf

7 APPUSER /u01/app/oracle/oradata/ORCL/datafile/ap
puser02.dbf
8 rows selected.




명령어로 기존 데이터파일의 크기를 늘려서 DB공간을 늘리기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
SQL> alter database datafile '/u01/app/oracle/oradata/ORCL/datafile/appuser01.dbf'
SQL> resize 200M;
Database altered.

//변경사항 확인하기
SQL>
1 select d.ts#, t.name as "T/S name", d.name "Datafile name", d.bytes "Size"
2 from v$datafile d
3 join v$tablespace t
4* on d.ts# = t.ts#
SQL> /

TS# T/S name Datafile name Size
---------- --------------- ---------------------------------------- ----------
0 SYSTEM /u01/app/oracle/oradata/ORCL/datafile/o1 838860800
_mf_system_fwvn49fw_.dbf

4 USERS /u01/app/oracle/oradata/ORCL/datafile/o1 31457280
_mf_users_hp871s7n_.dbf

1 SYSAUX /u01/app/oracle/oradata/ORCL/datafile/o1 555745280
_mf_sysaux_fwvn5f1l_.dbf

2 UNDOTBS1 /u01/app/oracle/oradata/ORCL/datafile/o1 73400320
_mf_undotbs1_fwvn66mp_.dbf

TS# T/S name Datafile name Size
---------- --------------- ---------------------------------------- ----------

6 EXAMPLE /u01/app/oracle/oradata/ORCL/datafile/o1 52428800
_mf_example_hp86s7s0_.dbf

4 USERS /u01/app/oracle/oradata/ORCL/datafile/o1 5242880
_mf_users_fwvn681o_.dbf

7 APPUSER /u01/app/oracle/oradata/ORCL/datafile/ap 209715200
puser01.dbf

7 APPUSER /u01/app/oracle/oradata/ORCL/datafile/ap 52428800
puser02.dbf




Tablespace 삭제

1
2
3
drop tablespace appuser including contents
[and datafiles]
[cascade constraints];

Comments