본문 바로가기
Infra & Security Eng/Database Engineering

non standard block size를 사용하는 tablespace 생성과 삭제 실습

by 엔지니어 E 2026. 4. 10.
반응형

non standard block size를 사용하는 tablespace 생성과 삭제

사용 명령어 
1. database buffer cache나 redo log buffer 의 크기를 확인함
SQL> SELECT NAME, BYTES FROM V$SGASTAT
  2  WHERE NAME LIKE '%buffer%' AND POOL IS NULL

2. Shared pool, large pool, java pool 의 크기를 확인함

SQL> SELECT POOL, SUM(BYTES) FROM V$SGASTAT
  2  WHERE POOL IS NOT NULL
  3  GROUP BY POOL;


3. 다양한 database buffer cache의 상태를 확인함
SQL> SELECT NAME, BLOCK_SIZE, BUFFERS, BUFFERS*BLOCK_SIZE AS "SIZE"
  2  FROM V$BUFFER_POOL; 

4. BLOCKSIZE에 지정된 크기의 block size를 갖는 tablespace를 생성함
SQL> CREATE TABLESPACE <tablespace명>                                         
  2  DATAFILE '<data file>' SIZE <크기>
  3  BLOCKSIZE <크기>; 
[Standard block size 확인]

SHOW PARAMETER db_block_size

* db_block_size: Oracle DB의 기본 블록 크기(보통 8KB). DB가 데이터를 읽고 쓰는 최소 단위이며 한 번에 8KB씩 읽고 씀

[각 tablespace별 block 크기를 확인]

SELECT tablespace_name, block_size FROM dba_tablespaces;

[SGA 전체 메모리 크기 요약 조회]

SHOW SGA;


[SGA 관련 파라미터 전체 조회]

SHOW PARAMETER sga_

* SGA영역은 자동으로 관리 됨


[cache 관련 크기 파라미터 전체 조회]

SHOW PARAMETER cache_size

* db_cache_size, buffer cache 등 조회

[SGA에서 pool별 메모리 크기 합계 조회]


SELECT pool, sum(bytes)
FROM v$sgastat
WHERE pool IS NOT NULL
GROUP BY pool;

[SGA에서 buffer 관련 메모리 크기 조회 (pool 미소속)]

SELECT name, bytes

FROM v$sgastat
WHERE name LIKE '%buffer%'
AND pool IS NULL;

* log_buffer=Redo log buffer 크기


[buffer pool의 블록 크기, 버퍼 수, 전체 크기 조회]

SELECT name, block_size, buffers, buffers*block_size as "SIZE" FROM v$buffer_pool;


* buffers*block_size → 버퍼 수 × 블록 크기 = 전체 buffer pool 크기

[에러 발생]


CREATE TABLESPACE imsy
DATAFILE '/app/ora19c/oradata/disk1/imsy01.dbf' SIZE 5M
BLOCKSIZE 16K;

* 16K 블록 크기용 buffer cache가 없어서 에러 발생, 16K 블록 크기 tablespace를 만들려면 먼저 db_16k_cache_size 파라미터로 buffer cache를 설정해야함

[16K 블록 크기용 buffer cache를 16M로 설정]

ALTER SYSTEM SET db_16k_cache_size = 16M;

[현재 설정된 cache 크기 파라미터 전체 조회]

SHOW PARAMETER cache_size

[16K 블록 크기 pool이 추가됐는지 Buffer cache 크기 확인]

SELECT name, block_size, buffers, buffers*block_size as "SIZE"
FROM v$buffer_pool;


* Buffer cache의 크기는 parameter 보다 v$buffer_pool을 통해서 확인 하는 것이 좋다

[buffer cache 설정 후 16K 블록 크기 tablespace 생성]


CREATE TABLESPACE imsy
DATAFILE '/app/ora19c/oradata/disk1/imsy01.dbf' SIZE 5M
BLOCKSIZE 16K;

[tablespace별 블록 크기 조회]

SELECT tablespace_name, block_size FROM dba_tablespaces ORDER BY 1;

[tablespace별 data file 이름, 크기, 경로 조회]


SELECT tablespace_name, bytes, file_name FROM dba_data_files;

[캐시 사이즈 0M로 줄여보기]

ALTER SYSTEM SET db_16k_cache_size = 0M;

* 에러가 나지 않지만 16K block 크기를 사용하는 tablespace가 사용할 수 없게 된다

[에러 발생]

SELECT tablespace_name, bytes, file_name FROM dba_data_files;

* imsy tablespace가 16K 블록인데 16K buffer cache를 0으로 줄여버려서 읽을 공간이 없어서 에러가 남


[MOUNT 상태에서도 조회 가능한 tablespace별 data file 크기, 경로 조회]

SELECT t.name tablespace_name, d.bytes, d.name file_name FROM v$tablespace t, v$datafile d WHERE t.ts#=d.ts# ORDER BY 1;


* 장애 상황에서도 dynamyc performance view는 조회 가능

[에러 발생]


CREATE TABLE imsy (no NUMBER) TABLESPACE imsy;
* NUMBER 타입의 no 컬럼 생성하는 명령어


* 아까 db_16k_cache_size = 0M으로 줄여서 16K buffer cache가 없어서 imsy tablespace를 사용할 수 없는 것

[imsy 테이블 삭제]

DROP TABLESPACE imsy;


* 16K buffer cache를 0으로 줄이려면 imsy tablespace를 먼저 삭제해야하므로 테이블스페이스 삭제

[명령어로 확인하기]

!ls /app/ora19c/oradata/disk1/


* DROP TABLESPACE만 하면 data file이 디스크에 남아 있기 때문에 파일이 남아있는지 확인해보는 절차

[imsy 파일 완전히 삭제하기]

!rm /app/ora19c/oradata/disk1/imsy01.dbf

[명령어로 최종 확인하기]


!ls /app/ora19c/oradata/disk1

[dba_data_files 에서도 사라졌는지 확인하기]


SELECT tablespace_name, bytes, file_name FROM dba_data_files;

* imsy 파일이 말끔히 사라졌음을 확인함