SQL> create tablespace ts1
  2  datafile '/home/oracle/ts1.dbf' size 10M;

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

10M 할당된 테이블스페이스가 생성되었다

 

 SQL> create table t1
  2  (id number)
  3  tablespace ts1;

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

※ 참고로 테이블스페이스는 관리자가 생성하고 t1테이블은 유저가 만든것이다

(다시 말해 유저가 테이블을 만들수있게 관리자가 테이블스페이스를 할당했다고 생각하면 된다)

 

 SQL> select TABLE_NAME, TABLESPACE_NAME from user_tables;

TABLE_NAME      TABLESPACE_NAME
---------------    ---------------
T1                                TS1
DEPT                        USERS
EMP                         USERS
BONUS                     USERS
SALGRADE                USERS

 

T1 테이블에 데이터를 꽉 채워 본다

 SQL> insert into t1 select * from t1;

28 개의 행이 만들어졌습니다.

...

SQL> insert into t1 select * from t1;

114688 개의 행이 만들어졌습니다.

SQL> insert into t1 select * from t1;

229376 개의 행이 만들어졌습니다.

SQL> insert into t1 select * from t1;
insert into t1 select * from t1
*
1행에 오류:
ORA-01653: unable to extend table SCOTT.T1 by 128 in tablespace TS1

 

 이제 테이블스페이스를 확장시켜본다

  

 SQL> alter tablespace ts1 add
  2  datafile '/home/oracle/ts1_2.dbf' size 20M;

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

 

20M를 추가하여 기존의 10M와 함께 전체 30M가 되었다

 

 SQL> insert into t1 select * from t1;

458752 개의 행이 만들어졌습니다.

 데이터가 더 들어가진다!!

다시 계속 집어넣는다

 

SQL> ALTER DATABASE DATAFILE '/home/oracle/ts1.dbf' RESIZE 30M;

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

SQL> ALTER DATABASE DATAFILE '/home/oracle/ts1.dbf'

2 AUTOEXTEND ON NEXT 10M MAXSIZE 100M;

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

 

 SQL> insert into t1 select * from t1;

1835008 개의 행이 만들어졌습니다.

 계속 들어간다...

 

 테이블 t1의 크기는

SQL> show parameter db_block_size

NAME                                 TYPE               VALUE
---------------------- ----------------- ---------------
db_block_size                        integer               8192


SQL> desc dba_extents
 이름                                               널?      유형
 -------------------------------- -------- ------------
 OWNER                                                    VARCHAR2(30)
 SEGMENT_NAME                                     VARCHAR2(81)
 PARTITION_NAME                                     VARCHAR2(30)
 SEGMENT_TYPE                                       VARCHAR2(18)
 TABLESPACE_NAME                                 VARCHAR2(30)
 EXTENT_ID                                                   NUMBER
 FILE_ID                                                         NUMBER
 BLOCK_ID                                                     NUMBER
 BYTES                                                         NUMBER
 BLOCKS                                                       NUMBER
 RELATIVE_FNO                                             NUMBER

 

SQL> select sum(blocks) from dba_extents
  2  where segment_name = 'T1';

SUM(BLOCKS)
-----------
      14336

 

SQL> select 14336 * 8192 from dual;

14336*8192
----------
 117440512

 대략..120메가 정도 된다...

+ Recent posts