개요
테이블이 null 컬럼을 포함하고 있을 경우 null 컬럼의 위치에 따라 테이블 크기가 변경됩니다.
본 문서에서는 중간 컬럼이 Null인 테이블 크기 산정하는 방법에 대해 안내합니다. (공간 효율은 마지막 컬럼이 NULL인 경우 테이블 공간을 더 효율적으로 사용할 수 있습니다.)
방법
중간 컬럼이 Null인 테이블 크기 조회
1. 테스트 테이블 생성
중간 컬럼이 NULL인 테스트 테이블을 생성합니다.
CREATE TABLE TEST_MID_NULL
(COL1 VARCHAR2(3) NOT NULL,
COL2 VARCHAR2(4000) NULL,
COL3 VARCHAR2(4000) NULL,
COL4 VARCHAR2(4000) NULL,
COL5 VARCHAR2(4000) NULL,
COL6 VARCHAR2(4000) NULL,
COL7 VARCHAR2(4000) NULL,
COL8 VARCHAR2(4000) NULL,
COL9 VARCHAR2(4000) NULL,
COL10 VARCHAR2(4000) NOT NULL);
SQL
복사
2. 데이터 적재
INSERT INTO TEST_MID_NULL
SELECT LPAD(LEVEL,3,'0'),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'A' FROM DUAL
CONNECT BY LEVEL < 1000;
SQL
복사
3. Block Dump 대상 정보 조회
SELECT COUNT(*),
DBMS_ROWID.ROWID_TO_RELATIVE_FNO(ROWID) FILE_NO,
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK_NO
FROM TEST_MID_NULL
GROUP BY
DBMS_ROWID.ROWID_TO_RELATIVE_FNO(ROWID),
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID);
SQL
복사
4. Block Dump 수행
ALTER SYSTEM DUMP DATAFILE 0 BLOCK 69119
SQL
복사
•
조회되는 ROWID 정보는 환경마다 다르므로, 실제 환경에 맞게 블록 번호를 지정해야 합니다.
•
생성된 블록 덤프 파일은 다음 경로에서 확인할 수 있습니다.
$TB_HOME/instance/$TB_SID/dump/tracedump
SQL
복사
5. Dump 확인
생성된 덤프 파일을 열어 테이블 크기 및 NULL 컬럼 처리 방식을 확인합니다.
**Dump start at 2017-04-02 10:17:16
DUMP of BLOCK file #0 block #69119
**Dump start at 2017-04-02 10:17:16
data block Dump[dba=00_00069119(69119),tsn=0000.00e4421d,type=13,seqno =1]
--------------------------------------------------------------
sgmt_id=33066 cleanout_tsn=0000.00e4421d btxcnt=2
l1dba=00_00069111(69111), offset_in_l1=8
btx xid undo fl tsn/credit
00 0017.47.1454 01_00048404.00028.00001 E 0000.00e44192
01 0000.00.0000 00_00000000.00000.00000 I 0000.00000000
--------------------------------------------------------------
Data block dump:
dlhdr_size=774 freespace=819 freepos=1677 symtab_offset=0 rowcnt=383
Row piece dump:
rp 0 1677: [17] flag=--H-FL-- itlidx=0 colcnt=10
col 0: [4]
0000: 03 30 30 31 .001
col 1: [1]
0000: 00 .
col 2: [1]
0000: 00 .
col 3: [1]
0000: 00 .
col 4: [1]
0000: 00 .
col 5: [1]
0000: 00 .
col 6: [1]
0000: 00 .
col 7: [1]
0000: 00 .
col 8: [1]
0000: 00 .
col 9: [2]
0000: 01 41 .A
rp 1 1694: [17] flag=--H-FL-- itlidx=0 colcnt=10
col 0: [4]
0000: 03 30 30 32 .002
col 1: [1]
0000: 00 .
col 2: [1]
0000: 00 .
.
.
.
//중략
.
.
.
//null 컬럼이 중간에 위치하고 있어 null 컬럼에 대한 정보가 생략되지 않고 포함됨
SQL
복사