테이블스페이스 운영 (상태 변경, 삭제, 조회)
테이블스페이스의 읽기 쓰기, 읽기 전용 및 오프라인 상태, 크기 조정과 데이터 파일을 포함한 삭제
#핵심 요약
테이블스페이스는 처음에 읽기, 쓰기 상태로 만들어짐ALTER TABLESPACE로 읽기 전용이나 오프라인으로 바꿈
오프라인 옵션은 NORMAL(기본값), TEMPORARY, IMMEDIATE임
IMMEDIATE로 내리면 다시 온라인으로 올리기 전에 매체 복구가 필요하고, NOARCHIVELOG 모드에서는 쓸 수 없음
DROP TABLESPACE는 기본적으로 컨트롤 파일의 파일 포인터만 지움
OMF가 아니면 INCLUDING CONTENTS AND DATAFILES를 붙여야 운영체제 파일까지 지워짐
V$TABLESPACE, V$DATAFILE, V$TEMPFILE은 컨트롤 파일 정보를 보여 줌
#개념과 동작 원리
#세 가지 상태
| 상태 | 의미 | 바꿀 수 없는 테이블스페이스 |
|---|---|---|
| 읽기, 쓰기(READ WRITE) | 온라인이며 읽기와 쓰기가 모두 가능한 기본 상태 | |
| 읽기 전용(READ ONLY) | 진행 중이던 트랜잭션은 마무리할 수 있지만 이후 DML은 허용되지 않음 여전히 온라인 |
공식 문서: SYSTEM, 활성 UNDO, 임시 테이블스페이스 온라인이어야 하고 온라인 백업 중이 아니어야 함 |
| 오프라인(OFFLINE) | 그 테이블스페이스만 쓸 수 없고 나머지 데이터베이스는 계속 열려 있음 | 공식 문서: SYSTEM, UNDO, 임시 테이블스페이스 |
실습에서는 읽기 전용으로 바꿀 수 없는 테이블스페이스에 SYSAUX를 넣었음
공식 문서의 조건 목록에는 SYSAUX가 없음
실습에서는 오프라인 제외 대상으로 SYSTEM만 적었음
공식 문서: 읽기 전용 전환 명령은 그 전에 시작된 미완료 트랜잭션이 커밋이나 롤백될 때까지 기다림
전환하려면 ALTER TABLESPACE 또는 MANAGE TABLESPACE 권한이 필요함
#오프라인 옵션
| 옵션 | 체크포인트 | 다시 온라인으로 올릴 때 |
|---|---|---|
| NORMAL(기본값) | 모든 데이터 파일에 수행 오류 난 데이터 파일이 없어야 함 |
복구 필요 없음 |
| TEMPORARY | 오프라인이 아닌 파일에만 수행 일부 파일에 오류가 있어도 가능 |
쓰기 오류로 이미 오프라인이던 파일이 있었다면 복구 필요 |
| IMMEDIATE | 수행하지 않음 | 매체 복구 필요 NOARCHIVELOG 모드에서는 사용 불가 |
공식 문서는 가능하면 NORMAL을 쓰고, TEMPORARY는 NORMAL이 안 될 때만, IMMEDIATE는 두 가지를 모두 시도한 뒤에만 쓰라고 권함
수업 자료도 같은 취지로 IMMEDIATE를 습관적으로 쓰지 말라고 적었음
#크기 조정
늘리려면 데이터 파일을 추가하거나 기존 파일 크기를 키움
빅파일에는 파일을 추가할 수 없음
줄일 수도 있지만 파일 안에서 이미 쓰는 공간보다 작게 줄이면 오류가 남
공식 문서: 빅파일 테이블스페이스는 ADD DATAFILE 밖에서 ALTER TABLESPACE ... AUTOEXTEND를 바로 쓸 수 있고, ADD DATAFILE을 지정하면 오류가 남
#삭제
DROP TABLESPACE 시스템 권한이 필요함
삭제하면 컨트롤 파일의 파일 포인터가 지워짐
OMF를 쓰면 운영체제 파일도 함께 지워짐
OMF가 아니면 INCLUDING CONTENTS AND DATAFILES로 지시하거나 나중에 운영체제 명령으로 직접 지워야 함
활성 세그먼트가 있으면 지울 수 없음
예를 들어 그 안의 테이블을 쓰는 중이거나, 커밋되지 않은 트랜잭션의 롤백에 필요한 UNDO를 담고 있으면 거부됨
지우기 전에 오프라인으로 바꿔 두는 것이 좋음
공식 문서: 삭제한 테이블스페이스의 데이터는 복구할 수 없으므로 삭제 직전과 직후에 데이터베이스 전체를 백업하라고 강하게 권함
공식 문서: 비어 있으면 INCLUDING CONTENTS가 필요 없음
운영체제 오류로 파일을 못 지워도 문장은 성공하고 경고 로그에 기록됨
#정보 조회 뷰
| 대상 | 데이터 딕셔너리 뷰 | 동적 성능 뷰 |
|---|---|---|
| 테이블스페이스 | CDB_TABLESPACES, DBA_TABLESPACES |
V$TABLESPACE |
| 데이터 파일 | CDB_DATA_FILES, DBA_DATA_FILES |
V$DATAFILE |
| 임시 파일 | CDB_TEMP_FILES, DBA_TEMP_FILES |
V$TEMPFILE |
| 테이블스페이스 안의 테이블 | ALL_TABLES |
실습 OCP 해설: V$ 뷰는 컨트롤 파일과 메모리에서 읽으므로 MOUNT 상태에서도 조회됨DBA_TABLESPACES와 V$TABLESPACE에는 여유 공간이 없고, 여유 공간은 DBA_FREE_SPACE나 DBA_TABLESPACE_USAGE_METRICS에서 봄
#필수 명령어 또는 SQL
#오프라인 전환과 상태 확인
CREATE TABLESPACE offline_test
DATAFILE '<DATAFILE_DIR>/offline_test01.dbf' SIZE 5M;
ALTER TABLESPACE offline_test OFFLINE NORMAL;SELECT tablespace_name, status
FROM dba_tablespaces
WHERE tablespace_name = 'OFFLINE_TEST';
SELECT file_name, bytes/1024/1024 AS mb
FROM dba_data_files
WHERE tablespace_name = 'OFFLINE_TEST';결과 해석:
실습 기록: STATUS가 OFFLINE으로 나왔고, 데이터 파일 크기는 5MB였음
ALTER TABLESPACE offline_test ONLINE;DROP TABLESPACE offline_test INCLUDING CONTENTS AND DATAFILES;결과 해석: 개별 실행 출력은 기재 없음
#데이터 파일을 남기는 삭제
CREATE TABLESPACE ts777
DATAFILE '<DATAFILE_DIR>/ts777.dbf' SIZE 10M;
DROP TABLESPACE ts777 INCLUDING CONTENTS;ls -l <DATAFILE_DIR>/ts777.dbf결과 해석:
실습 기록: AND DATAFILES 없이 지운 뒤에도 운영체제에 ts777.dbf 파일이 남아 있었음
실습에서는 데이터 파일 경로를 직접 지정해 만들었음(OMF 사용 여부 확인 불가)
남은 파일은 운영체제 명령으로 지워야 함
#읽기 전용 전환
수업 자료에는 읽기 전용 실습 명령이 없음
구문은 ALTER TABLESPACE <TABLESPACE_NAME> READ ONLY와 READ WRITE임
#사용 조건과 주의사항
IMMEDIATE 오프라인은 매체 복구가 따라오므로 NORMAL, TEMPORARY를 먼저 씀
기본 테이블스페이스로 배정된 사용자가 있는 테이블스페이스를 오프라인으로 바꾸기 전에 사용자 배정을 바꾸는 것을 검토하라고 공식 문서가 권함