행위

"데이터 블럭"의 두 판 사이의 차이

DB CAFE

(새 문서: == 데이터 블럭 == https://misogain.wordpress.com/wp-content/uploads/2024/05/data_block_layer.png # Data Block Header #:* Cache Layer와 Transaction Layer 로 구성됨 ## Cache...)
 
(Data Header)
(같은 사용자의 중간 판 2개는 보이지 않습니다)
2번째 줄: 2번째 줄:
 
https://misogain.wordpress.com/wp-content/uploads/2024/05/data_block_layer.png
 
https://misogain.wordpress.com/wp-content/uploads/2024/05/data_block_layer.png
  
# Data Block Header
+
* 블럭 세부 항목별 사이즈 조회
#:* Cache Layer와 Transaction Layer 로 구성됨
 
## Cache Layer
 
### 데이터 블럭 주소
 
### 데이터베이스 버전
 
### 세그먼트 종류
 
## Transaction Layer
 
### DML 수행
 
# Data Header
 
## Table Directory
 
## Row Directory
 
## Free Space
 
## Row Data
 
 
=== 블럭 세부 사이즈 조회 ===
 
 
<source lang=sql>
 
<source lang=sql>
 
select component, type, description, type_size
 
select component, type, description, type_size
30번째 줄: 16번째 줄:
 
KTB      KTBBH_BS TRANSACTION BLOCK BITMAP SEGMENT          8
 
KTB      KTBBH_BS TRANSACTION BLOCK BITMAP SEGMENT          8
 
</source>
 
</source>
 +
 +
=== Data Block Header ===
 +
https://misogain.wordpress.com/wp-content/uploads/2024/05/block_header.png
 +
 +
* 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: 복구작업 등에 사용됨)
 +
 +
* 블럭 덤프로 확인
 +
<source lang=sql>
 +
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
 +
</source>
 +
 +
 +
==== Transaction Layer ====
 +
https://misogain.wordpress.com/wp-content/uploads/2024/05/block_header_transaction_layer.png
 +
 +
 +
* 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 관련 정보
 +
 +
{{틀:고지상자2
 +
|제목= ITL(Interested Transaction List):
 +
|내용 = # 간단히 말하면, 변경 대기자 명단 임.
 +
# 특정 Block에 데이터를 변경해야 할 경우 해당 Block의 사용자 명단에 자신의 정보를 적고 변경을 해야 함.
 +
# 만약 다른 사용자가 그 Block을 수정하고 있어서 진입하지 못하는 상황이라면 대기자 명단(ITL)에 자신의 정보를 적고 자신의 순서가 될 때까지 기다림.
 +
}}
 +
 +
=== Data Header ===
 +
# Table Directory
 +
# Row Directory
 +
## 첫 번째 빈 공간의 포인터 주소
 +
## 빈 공간의 시작과 끝의 offset 주소
 +
## 사용 가능한 빈 공간의 양
 +
# Free Space
 +
# Row Data
 +
 +
* Block 에 데이터가 insert 될 경우, 데이터가 우선 가운데(Free space)로 입력된 후 실제 데이터는 Row data로, 데이터의 정보는 Row Directory로 기록됨.
 +
* Block 에 데이터가 update될 경우, 일단 먼저 기존 공간을 재활용하려고 시도함.
 +
*: 만약 데이터의 용량이 기존 공간을 초과하고, 비어있는 공간이 연속적이지 않다면 kdbcps() 함수를 호출해서 공간을 압축함.

2024년 5월 22일 (수) 01:33 판

thumb_up 추천메뉴 바로가기


1 데이터 블럭[편집]

data_block_layer.png

  • 블럭 세부 항목별 사이즈 조회
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

1.1 Data Block Header[편집]

block_header.png

  • Cache Layer와 Transaction Layer 로 구성됨

1.1.1 Cache Layer[편집]

  • Cache Layer 저장 정보
  1. Data Block Address(DBA)
  2. Block Type(ex. Table, Index, Undo, ...)
  3. Block Format(ex. v6, v7, v8, ...)
  4. 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


1.1.2 Transaction Layer[편집]

block_header_transaction_layer.png


  • Transaction Layer 는 Fixed(고정) 와 Variable(가변) 영역으로 구성됨
  1. Fixed(고정) 영역
    • v$type_size에서 KTBBH
    1. Block Type
    2. 마지막 수행된 Block Cleanout 시간
    3. ITL Entry 정보
    4. Free List Link 정보
    5. Free Space Lock 정보
  2. Variable(가변) 영역
    • v$type_size에서 KTBIT
    1. 해당 Block에 있는 Row를 변경하길 원하는 ITL 관련 정보
notifications_active ITL(Interested Transaction List):
  1. 간단히 말하면, 변경 대기자 명단 임.
  2. 특정 Block에 데이터를 변경해야 할 경우 해당 Block의 사용자 명단에 자신의 정보를 적고 변경을 해야 함.
  3. 만약 다른 사용자가 그 Block을 수정하고 있어서 진입하지 못하는 상황이라면 대기자 명단(ITL)에 자신의 정보를 적고 자신의 순서가 될 때까지 기다림.

1.2 Data Header[편집]

  1. Table Directory
  2. Row Directory
    1. 첫 번째 빈 공간의 포인터 주소
    2. 빈 공간의 시작과 끝의 offset 주소
    3. 사용 가능한 빈 공간의 양
  3. Free Space
  4. Row Data
  • Block 에 데이터가 insert 될 경우, 데이터가 우선 가운데(Free space)로 입력된 후 실제 데이터는 Row data로, 데이터의 정보는 Row Directory로 기록됨.
  • Block 에 데이터가 update될 경우, 일단 먼저 기존 공간을 재활용하려고 시도함.
    만약 데이터의 용량이 기존 공간을 초과하고, 비어있는 공간이 연속적이지 않다면 kdbcps() 함수를 호출해서 공간을 압축함.