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

AND

리눅스 - 자바에서 한글 깨질때
1. Test.java 소스

[root@image01 wsloader]# cat Test.java
import java.io.*;

public class Test {
        public static void main(String[] args) throws Exception {
                System.out.println("file.encoding="+System.getProperty("file.encoding"));
                System.out.println("테스트");
        }
}

2.테스트

[root@image01 wsloader]# env | grep LANG
LANG=ko_KR.eucKR
[root@image01 wsloader]# javac Test.java
[root@image01 wsloader]# java Test
file.encoding=EUC-KR
테스트
[root@image01 wsloader]# export LANG=c
[root@image01 wsloader]# java Test
file.encoding=ANSI_X3.4-1968
???
[root@image01 wsloader]# export LANG=ko_KR.eucKR
[root@image01 wsloader]# java Test
file.encoding=EUC-KR
테스트

AND

CString a;
char* b;
a="test";
b=a.getBuffer(a.getLength());
AND