DBDBDEEP
Oracle 데이터베이스 저장 영역 구조 본문
Data Block (데이터 블록)
- 데이터를 저장하는 가장 최소의 논리적인 단위이다.
블록 헤더
- 블록 헤더에는 세그먼트 유형, 데이터 블록 주소, 테이블 디렉토리, 행 디렉토리, 블록의 행을 수정할 때 사용되는 각각 약 23바이트인 트랙잭션 슬롯이 포함된다. 블록 헤더는 맨 위부터 아래쪽으로 확장된다.
행데이터
- 블록에 있는 행의 실제 데이터. 행 데이터 공간은 맨 아래부터 위쪽으로 확장된다.
사용 가능 영역
- 필요한 경우 헤더 및 행 데이터의 공간이 늘어날 수 있도록 한다. 헤더 확장이 일어나는 경우는 다음과 같다.
1. 행 디렉토리에 행 항목이 추가로 필요한 경우
2. 처음에 구성한 것보다 더 많은 트랜잭션 슬롯이 필요한 경우
Extents (익스텐트) : 데이터 블록이 모여서 된다
- 단일 할당으로 얻은 일정 수의 연속적인 오라클 데이터 블록
- 특정 유형의 정보를 저장하는데 사용한다.
- 연속적으로 비어있는 블록들을 사용하여 공간을 할당받는다.
Segment (세그먼트) : 익스텐트가 모여서 된다
- 특정 논리적 구조에 할당된 일련의 Extent이다 (Extent 모음)
- 데이터 세그먼트, 인덱스 세그먼트, 언두 세그먼트, 임시 세그먼트 등이 존재한다.
- 세그먼트가 모이면 테이블 스페이스가 된다.
SYSTEM 및 SYSAUX 테이블스페이스
-데이터베이스 생성 시에 생성되는 필수 테이블스페이스
-항상 online 상태여야 한다.
-응용 프로그램 데이터에 사용해서는 안 된다.
-읽기 전용으로 설정할 수 없다.
① SYSTEM 테이블스페이스
Control File 및 데이터 딕셔너리 테이블과 같은 핵심 기능을 위해 사용된다.
손상될 경우 DB 접근이 불가능해지므로 중요하다.
② SYSAUX 테이블스페이스
추가 데이터베이스 구성 요소에 사용된다.
10g 버전에서 추가, 주로 Oracle 서버의 성능 튜닝을 위한 데이터들이 저장된다.
테이블 스페이스
- 오라클이 사용하는 논리적 storage이다. 테이블이 저장될 공간을 먼저 만든 후 테이블을 생성한다.
- 테이블 생성시 미리 정의된 용량만큼 테이블 스페이스가 생성되고 거기에 데이터를 저장한다.
- 논리적 구조 또는 데이터 파일을 함께 그룹화 한다.
- 한 개 이상의 데이터 파일이 있어야 한다.
테이블 데이터 저장 방식
- 테이블이 생성될 때 해당 테이블의 데이터를 보관하는 세그먼트가 생성된다.
- 테이블 스페이스는 세그먼트 모음을 포함한다.
ㄴ-> 생성 시 users 테이블 스페이스에 공간을 할당하게 된다.
ㄴ-> tablespace ts2 는 users가 아닌 ts2를 테이블 스페이스로 사용하고자 할때 지정한다.
ㄴ-> 미리 ts2 를 생성시켜 놔야한다. 생성시킨 테이블스페이스에 적용하는 것.
┗━> values(1,‘Jone’,‘Seoul’)
길이/값으로 저장 : 1/1, 4/Jone, 5/Seoul
┗━> values(3,NULL,NULL)
null값은 db block에 저장하지 않는다.
Extent에 값이 전부 채워지게 되면 데이터 파일은 새로운 Extent를 할당 받을 수 있다.
테이블 스페이스 생성
1) create (smallfile) tablespace new_ts // ts 생성,이름 정의
2) datafile ‘/home/oracle/new_ts01.dbf’ size 100m // 물리적 데이터파일,사이즈
--밑에는 default 로 만들어짐--
3) EXTENT MANAGEMENT local // 공간할당 방식
4) autoallocate // 시스템에서 테이블스페이스를 관리함을 지정.사용자는 확장영역 크기 지정 불가
5) SEGEMENT SPACE MANAGEMENT AUTO // 세그먼트 사용 공간 관리
6) online // 읽기,쓰기 작업권한
7) nocompress // 압축옵션
8) logging // log 기록할 것인지
9) BLOCKSIZE 8k; // db_block_size 지정
1) File 구분
Small File
- 한 테이블 스페이스가 여러 데이터 파일 (1022개) 을 가질 수 있다.
- 하나의 데이터 파일이 가질 수 있는 블록의 개수가 4M(4000000) 개이다.
- db_block_size*8k) * 4000000
Big File
- 한 테이블 스페이스가 1 데이터 파일을 가질 수 있음
- 하나의 데이터 파일이 가질 수 있는 블록 개수가 40억개이다.
- 8k block * 40 억 = 32TB
2) datafile ‘/home/oracle/new_ts01.dbf’ size 100m
- /home/oracle 아래에 new_ts01.dbf 을 만들고, 사이즈는 100으로 지정한다.
------ 이 곳 부터는 모두 Default 값이 존재한다 ----------
3 )EXTENT MANAGEMENT local
> local : 공간 할당에 대한 정보를 각 데이터 파일의 헤드에 비트맵으로 표시
> dictionary : 공간 할당에 대한 정보를 딕셔너리 테이블에 저장
4) autoallocate - extent 지정
> Autoallocate : 테이블스페이스 내의 Extent 크기가 시스템에 의해 관리된다.
┗━> 임시 테이블스페이스에서는 Automatic으로 지정할 수 없다.
> Uniform : 유저가 지정한 동일 Extent 크기로 테이블스페이스가 관리된다. 기본1MB
┗━> 임시 테이블스페이스의 모든 Extent는 균일, undo는 uniform으로 지정 불가
5) Segment Space Management – 세그먼트 지정
> Automatic : 비트맵을 사용하여 세그먼트의 사용 가능 공간을 관리
(default) : 데이터 블록에서 사용 가능한 공간의 크기가 바뀌면 비트맵에 새로운
상태가 반영되어 자동으로 공간을 관리한다.
┗━> ASSM : Automatic Segment Space Management
> Manual : Free List를 사용하여 세그먼트의 사용 가능 공간을 관리
: 테이블스페이스에 생성된 스키마 객체에 대한 저장 영역 파라미터들을 지정 및 튜닝해야 하므로 수동 세그먼트 공간 관리라고 부른다.
┗━> 역호환성을 위해 지원되므로 ASSM(Automatic) 사용 권장
6) online
> 테이블 스페이스 생성 후 유저가 테이블 스페이스에 대한 읽기 및 쓰기 작업을 수행할 수 있음을 의미한다.
7) Compression 옵션 (default = 비활성화, nocompress)
- 데이터 세그먼트 압축을 활성화하면 디스크 공간 사용을 저장하고, 버퍼 캐시의 메모리
사용을 줄이고, 읽기 작업 중 query 실행 속도를 높일 수 있다.
- 그러나 데이터 로딩 및 DML에 대한 CPU 오버헤드 비용이 발생한다.
8) Logging (logging, nologging)
- 테이블 스페이스의 객체에 대한 변경 log를 redo log buffer에 기록할 것인지
- 비활성화시 로그 정보가 기록되지 않으므로 데이터 손실 시 recovery가 불가능하다.
9) Blocksize
- 1 데이터 블록의 크기를 지정한다.
- 2k, 4k, 8k, 16k, 32k 크기 중 지정이 가능하다.
- 블록 크기에 맞는 크기의 db buffer cache를 준비해야 함. ex)db_16k_cache_size = 40m
테이블 스페이스 변경
ALTER TABLESPACE new_ts
READ ONLY;
READ WRITE;
OFFLINE; (NORMAL | TEMPORARY | IMMEDIATE)
ONLINE;
ADD DATAFILE ‘/home/oracle/new_ts2.dbf’ size 100m;
RENAME TO ts_new;
▶ Read Wirte
DBWR가 데이터파일로 내릴때는 checkPoint 되는 시점이다.
Alter TableSpace new_ts offline <-- 하면 Read/Wirte 못하게 하는 것이다
그러면 CheckPoint가 일어난다. 그때 DBWR 이 내리게 된다.
▶ OFFLINE 옵션
alter tablespace new_ts offline
(system 테이블스페이스는 offline할 수 없음)
- 테이블스페이스를 offline하면 checkpoint가 일어난다.
- DBWR는 테이블스페이스와 연관된 dirty buffer들을 빠르게 data file로 내린다.
┗━> checkpoint
- normal : 모든 dirty buffer에 대해 checkpoint 수행
- immediate : checkpoint를 진행하지 않고 바로 offline (장애 발생 시 사용)
- temporary : checkpoint 가능한 버퍼들만 진행
▶ ADD DATAFILE
add datafile : ‘/home/oracle/new_ts02.dbf’ size 1g --> 1기가만큼 증가
add datafile ‘/home/oracle/new_ts02.dbf’ size 1g autoextend on
ㄴ--> 다음에 생성한 것이 다 찼을 때 자동으로 생성시켜 주겠다.
ex) add datafile ‘/home/oracle/new_ts02.dbf’ size 1g autoextend on next 10m maxsize 2g;
⦁ autoextensible : 꽉 차면 자동으로 늘려주기
select tablespace_name,file_name,AUTOEXTENSIBLE
from dba_data_files;
테이블 스페이스 삭제
SQL> drop tablespace new_ts;
1) INCLUDING CONTENTS
- 안에 있는 세그먼트까지 삭제 한다음에 테이블 스페이스 삭제한다
SQL> DROP TABLESPACE new_ts INCLUDING CONTENTS;
2) INCLUDING CONTENTS CASCADE CONSTRAINTS
- 외래키로 연관된 것 까지 전부 삭제
DROP TABLESPACE new_ts INCLUDING CONTENTS CASCADE CONSTRAINTS;
3) INCLUDING CONTENTS AND DATAFILES
- storage에있는 데이터 파일까지 다 삭제
테이블 스페이스 3가지
1. permanert TableSpace (System, Sysaux)
- permanent object를 생성할 수 있음.
ㄴ-> 생성한 사람이 삭제할 때까지 영원히 남아있는 것을 permanent object 라고 한다.
2.Undo Tablespace
SQL> create undo tablespace undo1
datafile '/home/oracle/undo1.dbf' size 100m
- 언두 정보를 저장할 목적으로 생성한다.
- AUTOALLOCATE만 가능하며, logging을 지정할 수 없다.
3.temporary tablespace
- temporary object를 생성할 목적으로 테이블을 쓴다.
ㄴ-> 자동으로 사라지는 것들을 위한 테이블 스페이스.
- 자동으로 free 상태되는 것들이 temporary object 이다. 이런 것들은 SMON이 free 상태로 만든다.
- offline 상태로 변경 불가
- standard block size만 가능하다
- uniform size로만 지정 가능하다.
- logging 지정할 수 없다.
테이블 스페이스 정보를 확인해보도록 한다.
SQL> select tablespace_name, block_size, status,
contents, logging, extent_management, allocation_type
from dba_tablespaces;
세그먼트 정보를 확인해보도록 한다.
SQL> select owner, segment_name, sum(extents), sum(bytes) /1024 kb
from dba_segments
where tablespace_name = 'EXAMPLE'
group by owner, segment_name;
익스텐트 정보 확인하기
SQL> desc dba_extents;
'Oracle ADMIN' 카테고리의 다른 글
Oracle 공간관리 2 (0) | 2022.07.21 |
---|---|
Oracle 공간 관리 (0) | 2022.07.03 |
Oracle 프로파일 생성 및 관리 (0) | 2022.07.03 |
Oracle 권한 / Role (0) | 2022.07.03 |
Oracle 유저 보안 관리 (계정 종류 및 유저 인증) (0) | 2022.06.30 |