[Oracle] 데이터베이스의 논리적 구조2 (세그먼트)

·2025년 8월 22일

오라클 관리

목록 보기
31/163

🔸 이론1. 세그먼트(segment)란?

💡 테이블이나 인덱스와 같은 논리적 저장소


실습1. ts02 테이블 스페이스에 emp999 테이블을 생성하시오

SQL> connect scott/tiger
연결되었습니다.
SQL>
SQL> create table emp999
  2  tablespace ts02
  3  as
  4   select *
  5   from emp;

테이블이 생성되었습니다.

SQL> col segment_name for a10
SQL> select segment_name, extent_id, bytes/1024
      from user_extents
     where segment_name='EMP999';


SEGMENT_NA  EXTENT_ID BYTES/1024/1024
---------- ---------- ---------------
EMP999              0           .0625

SQL> !cat seg.sql
col segment_name for a10

select segment_name, extent_id, bytes/1024
      from user_extents
     where segment_name='EMP999';

SQL> insert into emp999
     select *
      from emp999;

224 행이 생성되었습니다.

SQL> /

448 행이 생성되었습니다.

SQL> /

896 행이 생성되었습니다.

SQL> /

1792 행이 생성되었습니다.

SQL> @seg

SEGMENT_NA  EXTENT_ID BYTES/1024
---------- ---------- ----------
EMP999              0         64
EMP999              1         64
EMP999              2         64
EMP999              3         64

SQL> /
insert into emp999
*
1행에 오류:
ORA-01653: SCOTT.EMP999 테이블을 128()로 TS02 테이블스페이스에서 확장할 수
없습니다

💡 tablespace가 data로 꽉차서 insert가 안되는 현상이 일어나지 않도록 dba가 신경을 쓰고 있어야합니다.


실습2. ts02 테이블 스페이스에 공간을 추가하시오

1. 테이블 스페이스 공간을 확인하는 쿼리문을 수행합니다.

select   t.tablespace_name, free_size,
                       round( ((t.total_size - f.free_size) / t.total_size) * 100) usedspace
                 from (select tablespace_name, sum(bytes)/1024/1024 total_size
                           from dba_data_files
                           group by tablespace_name) t,
                        (select tablespace_name, sum(bytes)/1024/1024 free_size
                           from dba_free_space
                           group by tablespace_name) f
           where t.tablespace_name = f.tablespace_name(+);

2. 테이블 스페이스에 공간을 추가합니다.

SQL> alter tablespace ts02
       add  datafile '/u01/app/oracle/oradata/ORA19/ts02b.dbf' size 20m;

테이블스페이스가 변경되었습니다.


문제1. ts01 테이블 스페이스에 30m 를 더 추가하시오

SQL> alter tablespace ts01
      add datafile '/u01/app/oracle/oradata/ORA19/ts01b.dbf' size 30m;

테이블스페이스가 변경되었습니다.

실습3. ts03 테이블 스페이스를 생성하시오

SQL> create tablespace ts03
      datafile '/u01/app/oracle/oradata/ORA19/ts03.dbf' size 10m;

테이블스페이스가 생성되었습니다.

SQL> @ts

TABLESPACE FILE_NAME                                               MB_SIZE
---------- ------------------------------------------------------- -------
SYSTEM     /u01/app/oracle/oradata/ORA19/system01.dbf                 1330
SYSAUX     /u01/app/oracle/oradata/ORA19/sysaux01.dbf                  640
TS01       /u01/app/oracle/oradata/ORA19/ts01.dbf                       10
USERS      /u01/app/oracle/oradata/ORA19/users01.dbf                   110
TS02       /u01/app/oracle/oradata/ORA19/ts02.dbf                       20
UNDOTBS1   /u01/app/oracle/oradata/ORA19/undotbs01.dbf                 410
TS02       /u01/app/oracle/oradata/ORA19/ts02b.dbf                      20
TS01       /u01/app/oracle/oradata/ORA19/ts01b.dbf                      30
TS03       /u01/app/oracle/oradata/ORA19/ts03.dbf                       10

실습4. ts03 테이블 스페이스의 사이즈를 20mb 로 늘리시오

SQL> alter database datafile
     '/u01/app/oracle/oradata/ORA19/ts03.dbf' resize 20m;

데이타베이스가 변경되었습니다.

실습5. data 블럭의 크기가 어떻게 되는지 확인하시오

SQL> show parameter db_block_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192
SQL>

0개의 댓글