본문 바로가기

Programing/Oracle

Oracle -

향후에 들어온 테이블을 위한 공간 TABLESPACE


  1  CREATE TABLESPACE APP
  2  DATAFILE 'C:\ORACLE\ORADATA\ORCL1\APP01.DBF' SIZE 10M
  3  AUTOEXTEND ON NEXT 10M MAXSIZE 100M --자동증가하되 10메가씩 스스로 커지고100까지

                                                                      --AUTOEXTEND OFF(DEFAULT)        
  4  MINIMUM EXTENT 64K
  5  DEFAULT STORAGE --혹시들어올 SEGMENT가 설정이되어 있지 않다면

                                      TABLESPACE보다 TABLE이 더 우선순위가 있다.

                                      만약 MINIMUM EXTENTS가 있다면 이것의 배수로만 할당됨
  6     (INITIAL        64K
  7     NEXT    64K
  8     MINEXTENTS      1
  9     MAXEXTENTS      100
 10     PCTINCREASE     50)
 11  PERMANENT -- 영구적인 데이터가 온다.  | 임시적으로는 TEMPORARY 가 올수 있다.(9I이전)

                                                                  9I부터는 TEMPORARY말고 다른게 있다;ㄷㄷㄷ;;;
 12  ONLINE --장애가 일어나면 OFFLIINE으로 분해했다가 수리후

                     ONLINE으로 다시 결합...고가용성적용
 13* LOGGING -- 사용자에게서 명령이 오면 Redo log file에 잘 모아두겠다.

                         NOLOGGING : REDO LOG FILE을 쓰지 않겠다.
SQL> /


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


|-------------|------->

F               open

MTTR (mean time to Recovery)복구 기간은 작을 수록 좋다.

 

|-------------|------->

F                    F

MTBR(mean time between Fail)장애까지 기간은 무한대일수록 좋다

 

고가용성일수록 좋다.


SQL> CREATE TABLE V2
  2  NOLOGGING  - 다량의 테이블을 복사할때 사용하면 좋다.(DEFAULT)
  3  AS
  4  SELECT * FROM SCOTT.EMP;

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




P.G.A - SORT AREA


SQL> SHOW PARAMETER SORT_AREA_SIZE

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------
sort_area_size                       integer     524288


소트는 TEMPORARY TABLESPACE에 저장된다.

임시 DATA의 EXTENT 크기는 STORAGE MINIMUM EXTENT값에 영향을 받는다.

다음번의 크기를 얼마나 줄건지 읽어와서 할당을 하게 된다.

하지만 조금쓰고 지운다.ㄷㄷㄷ;

임시성 데이타를 저장할때 증가값 지정할 필요없이 다 똑같이 만들어버린다.

공간이 있는지 없는지를 FILE HEADER에 쓰고있다 아니다를 1과 0으로 표시한다.

그럼 지울필요 활당할 필요 EXTENT크기(DATA DICTORY접근) 를 결정할 필요가 없다

이렇게 SORT 처럼 자기가 스스로 관리하는것을 LOCALLY MANAGED TABLE SPACE방식이라한다.

아니면 DICICTIONARY MANAGED TABLE 방식이다.


생성을 한번 해볼까효~!

SQL> CREATE TABLESPACE APP02  
  2  DATAFILE 'C:\ORACLE\ORADATA\ORCL1\APP02.DBF' SIZE 10M
  3  EXTENT MANAGEMENT LOCAL

                             --DICTIONARY | LOCAL

                                    --LOCAL AUTOALLOCATE | UNIFORM 두가지형태
  4                             UNIFORM SIZE 64K
  5  ;

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


SQL> DESC DBA_TABLESPACES


SQL> SELECT TABLESPACE_NAME, CONTENTS, LOGGING, STATUS, EXTENT_MANAGEMENT
  2  FROM DBA_TABLESPACES
  3  WHERE TABLESPACE_NAME IN('USERS','APP','APP02');

TABLESPACE_NAME                CONTENTS  LOGGING   STATUS    EXTENT_MAN
------------------------------ --------- --------- --------- ----------
APP02                          PERMANENT LOGGING   ONLINE    LOCAL
APP                            PERMANENT LOGGING   ONLINE    LOCAL
USERS                          PERMANENT LOGGING   ONLINE    LOCAL

SQL>


SQL> SELECT TABLESPACE_NAME, CONTENTS, LOGGING, STATUS, EXTENT_MANAGEMENT
  2  FROM DBA_TABLESPACES
  3  WHERE TABLESPACE_NAME IN('TEMP','APP','APP02');

TABLESPACE_NAME                CONTENTS  LOGGING   STATUS    EXTENT_MAN
------------------------------ --------- --------- --------- ----------
APP02                          PERMANENT LOGGING   ONLINE    LOCAL
APP                            PERMANENT LOGGING   ONLINE    LOCAL
TEMP                           TEMPORARY NOLOGGING ONLINE    LOCAL




 OLTP / DSS.DW

 

동시에 여러개의 테이블 블락이 공종할수 있도록 블락의 크기가 여러가지가 될수 있게 만듬

MULTYFLE BLOCK SIZE를 지정하고 사용할수 있게...

2K,8K,16K 각각 올라갈 (DATA BUFFER CACHE)영역을 따로 가지고 있어야한다.

DB_CACHE_SIZE = 데이타 버퍼 캐시의 전체 영역

 

 

SHOWSQL> SHOW PARAMETER CACHE_SIZE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------
db_16k_cache_size                    big integer 0
db_2k_cache_size                     big integer 0
db_32k_cache_size                    big integer 0
db_4k_cache_size                     big integer 0
db_8k_cache_size                     big integer 0
db_cache_size                        big integer 25165824
db_keep_cache_size                   big integer 0
db_recycle_cache_size                big integer 0

 

DB_3K_CATCH -SIZE = ().

DB_20K CACHE_SIZE

 

메모리의 크기를 수정하려면 반드시

SQL> SHOW PARAMETER SGA_MAX_SIZE

SQL> ALTER SYSTEM SET SGA_MAX_SIZE=200M SCPE = SPFILE;

SQL> STARTUP FORCE

SQL> SHOW PARAMETER SGA_MAX_SIZE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------
sga_max_size                         big integer 135338868
SQL> ALTER SYSTEM SET DB_CACHE_SIZE=64;

시스템이 변경되었습니다.

SQL> SHOW PARAMETER DB_CACHE_SIZE;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------
db_cache_size                        big integer 4194304
SQL> ALTER SYSTEM SET DB_2K_CACHE_SIZE = 12M;

시스템이 변경되었습니다.

SQL> SHOW PARAMETER DB_SK_CACHE_SIZE;

 

 

 

TABLEBLOCK SIZE

 

동적으로 메모리 할당할수 있다.

이것을 GRANULE이라고 하며 1 GRANULE은 꼭해야한다.

SGA MAX SIZE 128M이상이면 16 M GRANULE이고

                       128M이하면     4M GRANULE이다.

보통 128M 를 사용함으로 1그래뉼은 16M이다.

그래서 12M를 줘도 16M를 주게된다.

*데이타베이스 튜닝에 사용(서버 내리지 않고 가능)

 

SQL> CREATE TABLESPACE MBS
  2  DATAFILE 'C:\oracle\oradata\ORCL1\MBS01.DBF' SIZE 10M
  3  BLOCKSIZE 2048
  4  ;

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

 

SQL> CREATE TABLE EMP2
  2  TABLESPACE MBS
  3  AS
  4  SELECT * FROM SCOTT.EMP;

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

 

SQL> SELECT TABLESPACE_NAME, BLOCK_SIZE
  2  FROM DBA_TABLESPACES
  3  WHERE TABLESPACE_NAME IN('USERS','MBS');

 

TABLESPACE_NAME                BLOCK_SIZE
------------------------------ ----------
MBS                                  2048
USERS                                8192

 

SQL> SELECT * FROM EMP2;

 

EXTENT

0번지 SEGMENT 내 에  빈공간을 FREELIST로 관리한다.

해당공간에 빈 블락이 1,0으로 표기하는것 BIT로 되어 있는 BITMAP

FREELIST에서 찾아가는것보다 BIT가 훨신빠르다.

BITMAP - AUTO , FREELIST - MANUAL

 

명령어로 생성을 해보아효~!!

테이블 생성에 대한 공간 관리

SQL> CREATE TABLESPACE SSM
  2  DATAFILE 'C:\oracle\oradata\ORCL1\SSM01.DBF' SIZE 10M
  3  SEGMENT SPACE MANAGEMENT AUTO;

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

 

SQL> SELECT TABLESPACE_NAME , SEGMENT_SPACE_MANAGEMENT
  2  FROM DBA_TABLESPACES;

TABLESPACE_NAME                SEGMEN
------------------------------ ------
SYSTEM                         MANUAL
UNDOTBS1                       MANUAL

 

15 개의 행이 선택되었습니다.

 

SQL> SELECT TABLE_NAME, OWNER , TABLESPACE_NAME
  2  FROM DBA_TABLES
  3  WHERE OWNER='SCOTT';

TABLE_NAME                     OWNER
------------------------------ ------------------------------
TABLESPACE_NAME
------------------------------
BONUS                          SCOTT

 

SQL> CREATE TABLE SCOTT.V2
  2  TABLESPACE USERS
  3  AS
  4  SELECT * FROM SCOTT.EMP;

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

SQL> COL TABLESPACE_NAME FORMAT A15
SQL> COL TABLE_NAME FORMAT A10
SQL> SELECT TABLE_NAME, OWNER , TABLESPACE_NAME
  2  FROM DBA_TABLES
  3  WHERE OWNER='SCOTT';

 

분리를 시켜놓으면 완전히 별개라고 생각한다.

SQL> ALTER TABLESPACE USERS OFFLINE;

 

SQL> SELECT * FROM SCOTT.V2;   -사용안됨

SQL> SELECT * FROM SCOTT.EMP;

 

SQL> ALTER TABLESPACE USERS ONLINE;

이제 모두 사용 가능

테이블 영역이 변경되었습니다.

 

 

 

SQL> ALTER TABLESPACE USERS READ ONLY;

읽기전용이지만 수정이 안된다. INSERT , DELETE ,UPDATE 다 안됨.

하지만 ** DROP은 가능;;

 

READ ONLY <---> READ WRITE

SQL> ALTER TABLESPACE USERS READ WRITE;

 

SQL> DROP TABLESPACE APP;

테이블 영역이 삭제되었습니다.

 

하지만 테이블이 있는 것을 지울려고 한다.

SQL> DROP TABLESPACE APP_DATA;

테이블까지 지울려면 DROP TABLESPACE APP_DATA INCLUDING CONTENTS;

 

테이블 영역이 변경되었습니다

 

'Programing > Oracle' 카테고리의 다른 글

Oracle - network  (0) 2008.07.29
Oracle - TABLE 재구성  (0) 2008.07.29
Oracle - USER TABLE  (0) 2008.07.29
Oracle - Group  (0) 2008.07.29
Oracle - LGWR  (0) 2008.07.29