다른 명령
데이터 블럭
데이터 블럭 전체 레이아웃
- 블럭 세부 항목별 사이즈 조회
select component, type, description, type_size from v$type_size where component in ('KCB', 'KTB');
COMPONEN TYPE DESCRIPTION TYPE_SIZE -------- -------- -------------------------------- ---------- KCB KCBH BLOCK COMMON HEADER 20 KTB KTBIT TRANSACTION VARIABLE HEADER 24 KTB KTBBH TRANSACTION FIXED HEADER 48 KTB KTBBH_BS TRANSACTION BLOCK BITMAP SEGMENT 8
Data Block Header
- Cache Layer와 Transaction Layer 로 구성됨
Cache Layer
- Cache Layer 저장 정보
- Data Block Address(DBA)
- Block Type(ex. Table, Index, Undo, ...)
- Block Format(ex. v6, v7, v8, ...)
- System Change Number(SCN: 복구작업 등에 사용됨)
- 블럭 덤프로 확인
SQL> alter session set tracefile_identifier='DBCAFE'; Session altered. SQL> alter system dump 2 datafile '/ORA19/app/oracle/oradata/ORACLE19/system01.dbf' block 2; System altered. SQL> ! $ cd /ORA19/app/oracle/diag/rdbms/oracle19/oracle19/trace $ ls *DBCAFE* oracle19_ora_14320_DBCAFE.trc oracle19_ora_14320_DBCAFE.trm $ vi oracle19_ora_14320_DBCAFE.trc
Transaction Layer
- Transaction Layer 는 Fixed(고정) 와 Variable(가변) 영역으로 구성됨
- Fixed(고정) 영역
- v$type_size에서 KTBBH
- Block Type
- 마지막 수행된 Block Cleanout 시간
- ITL Entry 정보
- Free List Link 정보
- Free Space Lock 정보
- Variable(가변) 영역
- v$type_size에서 KTBIT
- 해당 Block에 있는 Row를 변경하길 원하는 ITL 관련 정보
Data Header
- Table Directory
- Row Directory
- 첫 번째 빈 공간의 포인터 주소
- 빈 공간의 시작과 끝의 offset 주소
- 사용 가능한 빈 공간의 양
- Free Space
- Row Data
- Block 에 데이터가 insert 될 경우, 데이터가 우선 가운데(Free space)로 입력된 후 실제 데이터는 Row data로, 데이터의 정보는 Row Directory로 기록됨.
- Block 에 데이터가 update될 경우, 일단 먼저 기존 공간을 재활용하려고 시도함.
- 만약 데이터의 용량이 기존 공간을 초과하고, 비어있는 공간이 연속적이지 않다면 kdbcps() 함수를 호출해서 공간을 압축함.