오라클 DB - Tablespace와 data file
2022. 11. 10. 17:30ㆍ데이터베이스
Tablespace와 data file
실습 5.1 Tablespace와 Data file 상태 조회 (필)
사용 명령어
SQL> SELECT tablespace_name, status, contents,
2 extent_management, segment_space_management
3 FROM dba_tablespaces;
- Tablespace의 상태를 조회한다.
- STATUS : 사용 가능여부
- CONTENTS : 저장 Segment의 종류
- EXTENT_MANAGEMENT : Extent의 할당 및 관리 방식
- SEGMENT_SPACE_MANAGEMENT : Block내의 공간 관리 방식
SQL> SELECT tablespace_name, bytes, file_name
2 FROM dba_data_files;
- Tablespace별 data file의 상태를 조회 한다.
- BYTES : Data file의 크기
- FILE_NAME : Data file의 경로명을 포함한 이름
SQL> SELECT t.name tablespace_name, d.bytes, d.name file_name
2 FROM v$tablespace t, v$datafile d
3 WHERE t.ts#=d.ts#;
- Tablespace별 data file의 상태를 조회 한다.
- Dictionary가 아니라 dynamic performance view를 조회하는 것이므로
MOUNT 상태에서도 조회 가능하다.
SQL> SELECT tablespace_name, status, contents, ← tablespace의 상태를 조회한다.
2 extent_management, segment_space_management
3 FROM dba_tablespaces
4 ORDER BY 1;
TABLESPACE_NAME STATUS CONTENTS EXTENT_MAN SEGMEN
---------------- ------ -------- ---------- ------
SYSAUX ONLINE PERMANENT LOCAL AUTO
SYSTEM ONLINE PERMANENT LOCAL MANUAL
TEMP ONLINE TEMPORARY LOCAL MANUAL
UNDOTBS1 ONLINE UNDO LOCAL MANUAL
USERS ONLINE PERMANENT LOCAL AUTO
SQL> SELECT tablespace_name, bytes, file_name FROM dba_data_files ← data file의 상태를 조회한다.
2 ORDER BY 1;
TABLESPACE_NAME BYTES FILE_NAME
---------------- ---------- ----------------------------------------
SYSAUX 482344960 /app/ora19c/oradata/DB19/sysaux01.dbf
SYSTEM 838860800 /app/ora19c/oradata/DB19/system01.dbf
UNDOTBS1 68157440 /app/ora19c/oradata/DB19/undotbs01.dbf
USERS 5242880 /app/ora19c/oradata/DB19/users01.dbf
문제. dba_data_files 와 dba_temp_files를 합쳐서 temp파일내용이 나오게하라.
SQL> SELECT tablespace_name, bytes, file_name FROM dba_data_files
2 UNION
3 SELECT tablespace_name, bytes, file_name FROM dba_temp_files;
TABLESPACE_NAME BYTES FILE_NAME
-------------------- ---------- --------------------------------------------------
SYSAUX 597688320 /app/ora19c/oradata/DB19/sysaux01.dbf
SYSTEM 943718400 /app/ora19c/oradata/DB19/system01.dbf
TEMP 135266304 /app/ora19c/oradata/DB19/temp01.dbf
UNDOTBS1 361758720 /app/ora19c/oradata/DB19/undotbs01.dbf
USERS 5242880 /app/ora19c/oradata/DB19/users01.dbf
SQL> SELECT tablespace_name, bytes, file_name FROM dba_temp_files; ← temp file의 상태를 조회 한다.
TABLESPACE_NAME BYTES FILE_NAME
--------------- ---------- ---------------------------------------------
TEMP 33554432 /app/ora19c/oradata/DB19/temp01.dbf
SQL> SELECT ts#, file#, name FROM v$datafile;
TS# FILE# NAME
---------- ---------- ----------------------------------------
0 1 /app/ora19c/oradata/DB19/system01.dbf
1 3 /app/ora19c/oradata/DB19/sysaux01.dbf
2 4 /app/ora19c/oradata/DB19/undotbs01.dbf
4 7 /app/ora19c/oradata/DB19/users01.dbf
SQL> SELECT ts#, name FROM v$tablespace;
TS# NAME
---------- ----------------------------------------
1 SYSAUX
0 SYSTEM
2 UNDOTBS1
4 USERS
3 TEMP
SQL> SELECT t.name tablespace_name, d.bytes, d.name file_name ← 검색 환경이 MOUNT 이상에서 모두 조회가 가능하다.
2 FROM v$tablespace t, v$datafile d
3 WHERE t.ts#=d.ts#
4 ORDER BY 1;
TABLESPACE_NAME BYTES FILE_NAME
---------------- ---------- ----------------------------------------
SYSAUX 482344960 /app/ora19c/oradata/DB19/sysaux01.dbf
SYSTEM 838860800 /app/ora19c/oradata/DB19/system01.dbf
UNDOTBS1 68157440 /app/ora19c/oradata/DB19/undotbs01.dbf
USERS 5242880 /app/ora19c/oradata/DB19/users01.dbf
실습 5.2 Tablespace 생성 (필)
사용 명령어
SQL> CREATE TABLESPACE <tablespace명>
2 DATAFILE '<data file>' SIZE <크기>;
- 오라클 10g 이후 버전에서 사용자용 tablespace생성
- Extent management 는 locally 방식으로, segment space management는 AUTO 방식으로 생성된다.
SQL> CREATE TABLESPACE <tablespace명>
2 DATAFILE '<data file>' SIZE <크기>
3 SEGMENT SPACE MANAGEMENT AUTO;
- 오라클 9i 버전에서 사용자용 tablespace생성
- Default로 Extent management는 locally방식으로 정의되지만 segment space management는
defalt가 manual이므로 반드시 정의해주어야 한다.
SQL> CREATE TABLESPACE insa ← 사용중인 버전이 10g, 12c인 경우
2 DATAFILE '/app/ora19c/oradata/DB19/insa01.dbf' SIZE 1M; tablespace생성 명령
tablespace created.
SQL> SELECT tablespace_name, bytes, file_name FROM dba_data_files; ← 생성된 tablespace의 설정과 data file을 확인한다.
TABLESPACE_NAME BYTES FILE_NAME
---------------- ---------- ----------------------------------------
USERS 5242880 /app/ora19c/oradata/DB19/users01.dbf
UNDOTBS1 68157440 /app/ora19c/oradata/DB19/undotbs01.dbf
SYSTEM 838860800 /app/ora19c/oradata/DB19/system01.dbf
SYSAUX 482344960 /app/ora19c/oradata/DB19/sysaux01.dbf
INSA 1048576 /app/ora19c/oradata/DB19/insa01.dbf
SQL> SELECT tablespace_name, status, contents,
2 extent_management, segment_space_management
3 FROM dba_tablespaces
4 ORDER BY 1;
TABLESPACE_NAME STATUS CONTENTS EXTENT_MAN SEGMEN
---------------- --------- --------- ---------- ------
INSA ONLINE PERMANENT LOCAL AUTO
SYSAUX ONLINE PERMANENT LOCAL AUTO
........
실습 5.3 Tablespace 확장 1 - 수동(필)
사용 명령어
SQL> ALTER DATABASE DATAFILE
2 '<data file>' RESIZE <크기>;
- 지정된 파일의 크기를 늘린다.
SQL> ALTER TABLESPACE <tablespace명>
2 ADD DATAFILE '<추가될 data file>' SIZE <크기>;
- Data file을 추가한다.
SQL> SELECT tablespace_name, bytes, file_name FROM dba_data_files;
TABLESPACE_NAME BYTES FILE_NAME
---------------- ---------- ----------------------------------------
USERS 5242880 /app/ora19c/oradata/DB19/users01.dbf
UNDOTBS1 8157440 /app/ora19c/oradata/DB19/undotbs01.dbf
SYSTEM 838860800 /app/ora19c/oradata/DB19/system01.dbf
SYSAUX 482344960 /app/ora19c/oradata/DB19/sysaux01.dbf
INSA 1048576 /app/ora19c/oradata/DB19/insa01.dbf
SQL> ALTER DATABASE DATAFILE ← 원래 크기가 1M인 data file의 크기를 2M로 늘린다.
2 '/app/ora19c/oradata/DB19/insa01.dbf' RESIZE 2M;
Database altered.
SQL> SELECT tablespace_name, bytes, file_name FROM dba_data_files;
TABLESPACE_NAME BYTES FILE_NAME
---------------- ---------- ----------------------------------------
USERS 5242880 /app/ora19c/oradata/DB19/users01.dbf
UNDOTBS1 68157440 /app/ora19c/oradata/DB19/undotbs01.dbf
SYSTEM 838860800 /app/ora19c/oradata/DB19/system01.dbf
SYSAUX 482344960 /app/ora19c/oradata/DB19/sysaux01.dbf
INSA 2097152 /app/ora19c/oradata/DB19/insa01.dbf
SQL> ALTER TABLESPACE insa ← tablespace에 2M 크기의 data file을 추가 한다.
2 ADD DATAFILE '/app/ora19c/oradata/DB19/insa02.dbf' SIZE 2M;
tablespace altered.
SQL> SELECT tablespace_name, bytes, file_name FROM dba_data_files;
TABLESPACE_NAME BYTES FILE_NAME
---------------- ---------- ----------------------------------------
USERS 5242880 /app/ora19c/oradata/DB19/users01.dbf
UNDOTBS1 68157440 /app/ora19c/oradata/DB19/undotbs01.dbf
SYSTEM 838860800 /app/ora19c/oradata/DB19/system01.dbf
SYSAUX 482344960 /app/ora19c/oradata/DB19/sysaux01.dbf
INSA 2097152 /app/ora19c/oradata/DB19/insa01.dbf
INSA 2097152 /app/ora19c/oradata/DB19/insa02.dbf
6 rows selected.
실습 5.4 Tablespace 확장 2 - 자동(필)
사용 명령어
SQL> CREATE TABLESPACE <tablespace명>
2 DATAFILE '<data file명>' SIZE <크기>
3 AUTOEXTEND ON NEXT <크기> MAX SIZE <크기>;
- 자동으로 커지는 data file을 갖는 tablespace를 생성한다.
- NEXT : 증가치
- MAX SIZE : 최대 크기
SQL> ALTER TABLESPACE <tablespace명>
2 ADD DATAFILE '<추가될 data file명>' SIZE <크기>
3 AUTOEXTEND ON NEXT <크기> MAX SIZE <크기>;
- tablespace에 자동으로 커지는 data file을 추가 한다.
SQL> ALTER DATABASE
2 DATAFILE '<변경할 data file명>
3 AUTOEXTEND [ON | OFF] NEXT <크기> MAX SIZE <크기>;
- 지정한 data file을 자동증가를 설정한다.
SQL> CREATE TABLESPACE usr ← 각각 설정이 서로 다른 세 개의 data file을 추가 한다. 크기가 자동으로
2 DATAFILE 증가하는 autoextend 설정은 data file 별로 따로 설정한다.
3 '/app/ora19c/oradata/DB19/usr01.dbf' SIZE 2M AUTOEXTEND ON,
4 '/app/ora19c/oradata/DB19/usr02.dbf' SIZE 2M AUTOEXTEND ON NEXT 5M,
5 '/app/ora19c/oradata/DB19/usr03.dbf' SIZE 2M AUTOEXTEND ON NEXT 5M MAXSIZE 20M;
tablespace created.
SQL> SELECT tablespace_name, bytes, file_name FROM dba_data_files;
TABLESPACE_NAME BYTES FILE_NAME
---------------- ---------- ----------------------------------------
USERS 5242880 /app/ora19c/oradata/DB19/users01.dbf
UNDOTBS1 68157440 /app/ora19c/oradata/DB19/undotbs01.dbf
SYSTEM 838860800 /app/ora19c/oradata/DB19/system01.dbf
SYSAUX 482344960 /app/ora19c/oradata/DB19/sysaux01.dbf
INSA 2097152 /app/ora19c/oradata/DB19/insa01.dbf
INSA 2097152 /app/ora19c/oradata/DB19/insa02.dbf
USR 2097152 /app/ora19c/oradata/DB19/usr01.dbf
USR 2097152 /app/ora19c/oradata/DB19/usr02.dbf
USR 2097152 /app/ora19c/oradata/DB19/usr03.dbf
9 rows selected.
SQL> SELECT tablespace_name, file_name, autoextensible, increment_by, maxbytes
2 FROM dba_data_files
3 WHERE tablespace_name = 'USR';
TABLESPACE_NAME FILE_NAME AUT INCREMENT_BY MAXBYTES
---------------- ----------------------------------- --- ------------ ----------
USR /app/ora19c/oradata/DB19/usr01.dbf YES 1 3.4360E+10
USR /app/ora19c/oradata/DB19/usr02.dbf YES 640 3.4360E+10
USR /app/ora19c/oradata/DB19/usr03.dbf YES 640 20971520
SQL> ALTER TABLESPACE insa
2 ADD DATAFILE '/app/ora19c/oradata/DB19/insa03.dbf' SIZE 2M
3 AUTOEXTEND ON NEXT 5M MAXSIZE 20M; ← data file의 자동 증가는 data file 각각의
설정이므로 기존 tablespace에 자유롭게 추가할 수 있다.
Tablespace altered.
SQL> SELECT tablespace_name, file_name, autoextensible, increment_by, maxbytes
2 FROM dba_data_files
3 WHERE lower(tablespace_name) = 'insa';
TABLESPACE_NAME FILE_NAME AUT INCREMENT_BY MAXBYTES
---------------- ---------------------------------------- --- ------------ ----------
INSA /app/ora19c/oradata/DB19/insa01.dbf NO 0 0
INSA /app/ora19c/oradata/DB19/insa02.dbf NO 0 0
INSA /app/ora19c/oradata/DB19/insa03.dbf YES 640 20971520
SQL> ALTER DATABASE DATAFILE '/app/ora19c/oradata/DB19/insa01.dbf'
2 AUTOEXTEND ON;
Database altered.
SQL> SELECT tablespace_name, file_name, autoextensible, increment_by, maxbytes
2 FROM dba_data_files
3 WHERE lower(tablespace_name) = 'insa';
TABLESPACE_NAME FILE_NAME AUTOEX INCREMENT_BY MAXBYTES
---------------- ---------------------------------------- ------ ------------ ----------
INSA /app/ora19c/oradata/DB19/insa01.dbf YES 1 3.4360E+10
INSA /app/ora19c/oradata/DB19/insa02.dbf NO 0 0
INSA /app/ora19c/oradata/DB19/insa03.dbf YES 640 20971520
실습 5.5 Tablespace 삭제 (필)
사용 명령어
SQL> DROP TABLESPACE <tablespace 명>
2 [INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS];
- 지정된 tablespace를 삭제한다.
- INCLUDING CONTENT : Tablespace에 segment가 존재할 때 segment를 같이 삭제한다.
- CASCADE CONSTRAINTS : 삭제되는 tablespace의 table을 다른 tablespace의
table이 참조하는 경우에 해당 constraint를 같이 삭제한다.
- AND DATAFILES : Tablespace에 포함된 data file을 같이 지운다. 이 옵션을
쓰지 않으면 데이터파일은 OS상에서 직접 지워야한다.
SQL> DROP TABLESPACE users; ← 10g 버전에 추가된 defaule permanent tablespace로
DROP TABLESPACE users 지정된 tablespace는삭제되지 않는다.
*
ERROR at line 1:
ORA-12919: Can not drop the default permanent tablespace
SQL> SELECT * FROM database_properties WHERE property_name LIKE '%DEFAULT_PERMAN%';
PROPERTY_NAME PROPERTY_V DESCRIPTION
------------------------------ ---------- ----------------------------------------
DEFAULT_PERMANENT_TABLESPACE USERS Name of default permanent tablespace
SQL> DROP TABLESPACE insa; ← 비어있는 tablespace만 삭제가 가능하다.
tablespace dropped.
SQL> !ls /app/ora19c/oradata/DB19/ ← tablespace를 삭제해도 data file이 OS상에서 지워지지 않는다.
insa01.dbf insa03.dbf system01.dbf undotbs01.dbf usr01.dbf usr03.dbf
insa02.dbf sysaux01.dbf temp01.dbf users01.dbf usr02.dbf
SQL> !rm /app/ora19c/oradata/DB19/insa01.dbf ← data file은 OS명령을 통해 직접 지워준다.
SQL> !rm /app/ora19c/oradata/DB19/insa02.dbf
SQL> !rm /app/ora19c/oradata/DB19/insa03.dbf
SQL> SELECT tablespace_name, bytes, file_name FROM dba_data_files;
TABLESPACE_NAME BYTES FILE_NAME
---------------- ---------- ----------------------------------------
SYSAUX 482344960 /app/ora19c/oradata/DB19/sysaux01.dbf
SYSTEM 838860800 /app/ora19c/oradata/DB19/system01.dbf
UNDOTBS1 68157440 /app/ora19c/oradata/DB19/undotbs01.dbf
USERS 5242880 /app/ora19c/oradata/DB19/users01.dbf
USR 2097152 /app/ora19c/oradata/DB19/usr03.dbf
USR 2097152 /app/ora19c/oradata/DB19/usr01.dbf
USR 2097152 /app/ora19c/oradata/DB19/usr02.dbf
7 rows selected.
SQL> DROP TABLESPACE usr;
Tablespace dropped.
SQL> !rm /app/ora19c/oradata/DB19/usr*
SQL> !ls /app/ora19c/oradata/DB19/
sysaux01.dbf system01.dbf temp01.dbf undotbs01.dbf users01.dbf
실습 5.6 Tablespace READ ONLY
사용 명령어
SQL> ALTER TABLESPACE <tablespace명> [ READ ONLY / READ WRITE ]
- 지정한 tablespace를 읽기 전용(읽기 쓰기)으로 변경한다.
SQL> ALTER TABLESPACE <tablespace명> [ READ ONLY / READ WRITE ]
- 지정한 tablespace를 읽기 전용(읽기 쓰기)으로 변경한다.
SQL> SELECT username, account_status, default_tablespace
2 FROM dba_users
3 WHERE username = 'ST';
USERNAME ACCOUNT_STATUS DEFAULT_TA ← 만일 account_status가 EXPIRED & LOCKED 라면
---------------- ---------------------------- ------------------- 계정의 lock을 풀어줘야 된다.
ST OPEN USERS
SQL> CREATE TABLE st.test (no NUMBER);
Table created.
SQL> SELECT owner, table_name, tablespace_name FROM dba_tables
2 WHERE owner = 'ST' AND table_name = 'TEST';
OWNER TABLE_NAME TABLESPACE_NAME
---------------- ---------- ----------------
ST TEST USERS
SQL> INSERT INTO st.test VALUES (10);
1 row created.
SQL> COMMIT;
commit complete.
SQL> SELECT * FROM st.test;
NO
----------
10
SQL> ALTER TABLESPACE users READ ONLY; ← Users tablespace를 읽기 전용으로 변경한다.
Tablespace altered.
SQL> SELECT tablespace_name, status, contents,
2 extent_management, segment_space_management
3 FROM dba_tablespaces
4 ORDER BY 1;
TABLESPACE_NAME STATUS CONTENTS EXTENT_MAN SEGMEN
---------------- --------- --------- ---------- ------
SYSAUX ONLINE PERMANENT LOCAL AUTO
SYSTEM ONLINE PERMANENT LOCAL MANUAL
TEMP ONLINE TEMPORARY LOCAL MANUAL
UNDOTBS1 ONLINE UNDO LOCAL MANUAL
USERS READ ONLY PERMANENT LOCAL AUTO
SQL> CONN st/st
Connected.
SQL> INSERT INTO test VALUES (20); ← 읽기 전용 tablespace의 table에 대한 작업은 불가능하다.
INSERT INTO test VALUES (20)
*
ERROR at line 1:
ORA-00372: file 7 cannot be modified at this time
ORA-01110: data file 7: '/app/ora19c/oradata/disk3/users01.dbf'
SQL> DELETE FROM test;
DELETE FROM st.test
*
ERROR at line 1:
ORA-00372: file 7 cannot be modified at this time
ORA-01110: data file 4: '/app/ora19c/oradata/disk3/users01.dbf'
SQL> SELECT * FROM test;
NO
----------
10
SQL> DROP TABLE test; ← 읽기 전용 tablespace의 table은 삭제가능하다.
Table dropped.
SQL> SELECT * FROM tab WHERE tname = 'TEST';
no rows selected
SQL> CONN / AS sysdba
Connected.
SQL> ALTER TABLESPACE users READ WRITE; ← Ttablespace를 정상으로 되돌린다.
tablespace altered.
SQL> SELECT tablespace_name, status, contents,
2 extent_management, segment_space_management
3 FROM dba_tablespaces
4 ORDER BY 1;
TABLESPACE_NAME STATUS CONTENTS EXTENT_MAN SEGMEN
---------------- --------- --------- ---------- ------
SYSAUX ONLINE PERMANENT LOCAL AUTO
SYSTEM ONLINE PERMANENT LOCAL MANUAL
TEMP ONLINE TEMPORARY LOCAL MANUAL
UNDOTBS1 ONLINE UNDO LOCAL MANUAL
USERS ONLINE PERMANENT LOCAL AUTO
'데이터베이스' 카테고리의 다른 글
데이터베이스 - 모델링(정규화) (0) | 2022.11.15 |
---|---|
오라클DB - 읽기전용 테이블스페이스 (0) | 2022.11.14 |
오라클 DB - 테이블 스페이스 (0) | 2022.11.10 |
오라클 DB - 오라클 instance client 설치 (0) | 2022.11.10 |
오라클 DB - REDO LOG FILE (0) | 2022.11.09 |