Logical Database Structure - database - tablespace - segment - extent - block SYSTEM and NON-SYSTEM TABLESPACE - SYSTEM Tablespace : data dictionary 정보와 SYSTEM rollback segment을 가진다. - NON-SYSTEM Tablespace : Rollback segments, Temporary segments, data, index등을 가진다. CREATE TABLESPACE CREATE TABLESPACE tablespace DATAFILE filespec [autoextend_clause],filespec [autoextend_clause]]... [MINIMUM EXTENT integer [K|M]] [DEFAULT storage_clause] [PERMANENT|TEMPOARY] --> default PERMANENT [ONLINE|OFFLINE] --> default ONLINE 예) CREATE TABLESPACE data DATAFILE '/DISK4/app01.dbf' SIZE 100M, '/DISK5/app02.dbf' SIZE 100M MINIMUM EXTENT 500K DEFAULT STORAGE (INITIAL 500K NEXT 500K MAXEXTENTS 500 PCTINCREASE 0) ; - STORAGE PARAMETERS * INITIAL : 첫째 extent의 크기를 정한다. 최소 크기는 2 blocks ( 2 * DB_BLOCK_SIZE ) default는 5 bolcks ( 5 * DB_BLOCK_SIZE ) * NEXT : 다음 extent의 크기를 정한다. 최소 크기는 1 block default는 5 bolcks ( 5 * DB_BLOCK_SIZE ) * MINEXTENTS : segment가 생성되었을 때 할당되는 extent의 갯수. default는 1개 * PCTINCREASE n : 다음에 extent가 생성될 때 이전 extent보다 n% 증가된 크기 ( PCT: percent ) default는 50 * MAXEXTENTS : segment가 갖을 수 있는 extent의 최대 수 Temporary Tablespace CREATE TABLESPACE DATA DATAFILE '/DISK2/DATA01.dbf' SIZE 50M MINIMUM EXTENT 1M DEFAULT STORAGE (INITIAL 2M NEXT 2M MAXEXTENTS 500 PCTINCREASE 0) TEMPORARY ; TABLESPACE의 크기 설정 (data file을 추가) ALTER TABLESPACE DATA ADD DATAFILE '/DISK5/DATA02.dbf' SIZE 200M ; DATA FILE이 FULL되면 자동으로 DATAFILE을 증가한다. ALTER TABLESPACE DATA ADD DATAFILE '/DISK6/app04.dbf' SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE 500M ; * 3가지 방법이 있다. 1. CREATE DATABASE을 한다. 2. CREATE TABLESPACE DATAFILE을 한다. 3. ALTER TABLESPACE ADD DATAFILE을 한다. 현재 DATAFILE의 크기를 다시바꾸는(resize) 방법 ALTER DATABASE DATAFILE '/DISK5/app02.dbf' RESIZE 200M ; Changing the Storage Settings ALTER TABLESPACE DATA MINIMUM EXTENT 2M ; ALTER TABLESPACE DATA DEFAULT STORAGE (INITIAL 2M NEXT 2M MAXEXTENTS 999) ; Tablespace OFFLINE/ONLINE - tablespace가 만들어지면 초기값(default)이 ONLINE이다. - OFFLINE이 되면 다른 사용자의 access가 불가능하다. - SYSTEM tablespace는 OFFLINE이 불가능하다. - transaction이 끝나지 않은 tablespace는 OFFLINE 불가능하다. ALTER TABLESPACE tablespace { ONLINE | OFFLINE [NORMAL|TEMPORARY|IMMEDIATE] } - Normal : checkpoint를 적용시키고 offline한다. - Temporary : datafile 중에서 online datafile에만 checkpoint를 적용시키고 offline한다. - Immediate : checkpoint 없이 offline한다. 예) ALTER TABLESPACE DATA OFFLINE NORMAL; 특별한 경우가 아닌이상 이렇게 써라.NORMAL은 default이므로 생략가능 Moving Data File : ALTER TABLESPACE - 반드시 offline 한 상태에서 한다. - target data file이 반드시 존재해야 한다. ALTER TABLESPACE DATA RENAME DATAFILE '/DISK4/DATA01.dbf' TO '/DISK5/DATA01.dbf' ; Moving Data File : ALTER DATABASE - 반드시 database가 mount 상태이어야 한다. - target data file이 반드시 존재해야 한다. - shutdown하고 host상태에서 datafile을 제거해야 한다. ALTER DATABASE RENAME FILE '/DISK1/system01.dbf' TO '/DISK2/system01.dbf' ; READ-ONLY Tablespace 상태 - 오직 select만 할 수 있다. - CREATE는 안되고... DROP은 할 수 있다. - 사용자들이 data변경을 못함, backup과 recovery가 쉽다. ALTER TABLESPACE DATA READ ONLY; ALTER TABLESPACE DATA READ WRITE; -- read only 상태를 다시 read write상태로 바꿔준다. * 주의해야 하는점 - tablespace가 반드시 online상태여야 한다. - active transaction이 허용되지 않아야 한다. - tablespace가 active rollback segment를 갖고 있으면 안된다. - online backup중엔 못한다. DROP TABLESPACE - file 삭제는 host에 나가서 삭제를 해야 한다. DROP TABLESPACE DATA INCLUDING CONTENTS ; * including contents를 안썼을 때, tablespace가 비워져 있어야만 drop이 된다. including contents는 데이터가 들어 있어도 tablespace를 삭제하겠다는 뜻이다. DBA_TABLESPACES : tablespace 정보를 갖고 있음 - TABLESPACE_NAME, NEXT_EXTENT, MAX_EXTENTS, PCT_INCREASE, MIN_EXTLEN, STATUS, CONTENTS SVRMGR> SELECT tablespace_name, initial_extent, next_extent, 2 max_extents, pct_increase, min_extlen 3 FROM dba_tablespaces ; DBA_DATA_FILES : FILE에 관한 정보를 갖고 있다. - FILE_NAME, TABLESPACE_NAME, BYTES, AUTOEXTENSIBLE, MAXBYTES, INCREMENT_BY SVRMGR> SELECT file_name, tablespace_name, bytes, autextensible, maxbytes, increment_by 2 FROM dba_data_files ; Contol File 정보 - V$DATAFILE : ts#, name, file#, rfile#, status, enabled, bytes, create_bytes - V$TABLESPACE : ts#, name SVRMGR> SELECT d.file#, d.name, d.status, d.enabled, d.bytes, d.create_bytes, t.name 2 FROM v$datafile d, v$tablespace t 3 WHERE t.ts# = d.ts# ; 연습 1. 현재의 Tablespace와 Data file들을 확인 $ sqlplus system/manager SQL> select * from dba_tablespaces ; SQL> select file_name, tablespace_name, bytes 2 from dba_data_files ; 2. DATA01 tablespace의 size를 늘이기 위해, datafile을 하나 추가 SQL> alter tablespace data01 2 add datafile '$ORACLE_HOME/DATA/DISK6/data01b.dbf' size 500k ; SQL> select file_name, tablespace_nmae, bytes 2 from dba_data_files ; 3. 문제2 에서 추가한 datafil의 size를 1M 로 resize SQL> alter database datafile 2 '$ORACLE_HOME/DATA/DISK6/data01b.dbf' 3 resize 1M ; SQL> select file_name, tablespace_name, bytes 2 from dba_data_files ; 4. 문제2 에서 추가한 datafile의 size가 자동적으로 extend 될 수 있도록 하자 SQL> alter database datafile 2 '$ORACLE_HOME/DATA/DISK6/data01b.dbf' 3 autoextend on next 100k maxsize 2m ; SQL> select file_name, tablespace_name, bytes, autoextensible 2 from dba_data_files ; 5. INDX01 tablespace의 datafile을 DISK6으로 옮기기 SQL> alter tablespace indx01 offline ; SQL> select name, status from v$datafile ; SQL> host $ mv $ORACLE_HOME/DATA/DISK3/indx01.dbf $ORACLE_HOME/DATA/DISK6/indx01.dbf $ exit SQL> alter tablespace indx01 rename datafile 2 '$ORACLE_HOME/DATA/DISK3/indc01.dbf' 3 to '$ORACLE_HOME/DATA/DISK6/indx01.dbf' ; SQL> alter tablespace indx01 online ; SQL> select name, status from v$datafile ; 6. RONLY Tablespace를 read only로 바꾸고, 추가적인 테이블을 생성하고 무슨 일이 발생하며 이유는 무엇인가? SQL> create table t1(t1 number) tablespace ronly ; SQL> alter tablespace ronly read only ; SQL> select name, enabled, status from v$datafile ; SQL> create table t2(t2 number) tablespace ronly ; ==> error 발생 확인! 7. RONLY Tablespace를 삭제 SQL> drop tablespace ronly including contents ; SQL> select * from v$tablespace ; SQL> host $ rm $ORACLE_HOME/DATA/DISK1/ronly.dbf |