향후에 들어온 테이블을 위한 공간 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 |