본문 바로가기

DataBase/Oracle

[펌]테이블스페이스 만들기

출처 블로그>지구방위대 | 두둥
원문 http://blog.naver.com/wjdgksdud22/14350924

/* 테이블스페이스 만들기 */

[참고]dbf 파일 : 테이블스페이스의 데이타 파일

create tablespace test_data

datafile 'f:/oracle/oradata/orcl/test_data01.dbf' size 10m

default storage (initial 2m

                       next 1m

                       minextenets 1

                       maxextents 121

                       pctincrease 0);


/* test_data tablespace에 datafile 추가*/

alter tablespace test_data

add datafile 'f:/oracle/oradata/orcl/test_data02.dbf' size 10m


/* tablespace안에 테이블 만들기 */

create table test

(a char(1))

tablespace test_data


/*including contents와 cascade constraints*/

drop tablespace test_data


/* tablespace안에 object들도 함께 지워야 한다.*/

drop tablespace test_data including contents


/* 두 테이블스페이스에 서로 참조하는 테이블이 있을경우 테이블스페이스 삭제시 사용*/

drop tablespace test_data cascade constraints



Tablespace 내의 extent를 관리하는 방식을 지정할 수 있는
'extent_management_clause'가 Oracle8i의 CREATE TABLESPACE 문에 추가되었다.
이 clause에는 다음과 같은 parameter를 지정할 수가 있다.

- DICTIONARY :
tablespace 내의 extent들이 dictionary table에서 관리됨
이 값을 지정하면 기존의 방식과 동일하게 운용되며, 이 값이 default이다.

- LOCAL :
tablespace 내의 extent들이 각 구성 datafile내에서 bitmap으로 관리됨

* AUTOALLOCATE : tablespace 내의 각 extent size를 system이 관리함.
user가 extent의 size를 지정할 수 없음.
* UNIFORM : tablespace내의 각 extent size는 user가 지정한 일정한
size로만 생성됨. 이때 default size는 1MB임.

만약 LOCAL 절을 사용하면서 AUTOALLOCATE 또는 UNIFORM을 명시하지 않는다면
AUTOALLOCATE가 default로 이용됨.

UNIFORM SIZE를 지정할 경우, Oracle은 항상 SORT_AREA_SIZE에 지정된 크기의
배수를 이용하게 된다.

예를 들어,
SORT_AREA_SIZE가 64K로 설정되어 있고,
CREATE TABLESPACE 문의 UNIFORM SIZE절에 32K를 지정하였다면 Oracle은
자동적으로 64K extent들을 생성, 이용하게 된다. 만약 UNIFORM SIZE를 72K로
지정하였다면 128K(64K*2) extent들을 생성, 이용하게 된다.


LOCALLY MANAGED TABLESPACES
---------------------------

Locally managed tablespace는 자신이 보유, 관리하는 각 extent들에 대한
freed, used 여부를 bitmap형태로 각 구성 datafile들에 저장한다. Bitmap내의
각 bit들은 하나의 block 또는 block의 묶음에(extent) 대한 status를 표시한다.
만약 이들 extent들을 free하거나 할당받아서 사용하게 되면 각각의 extent에
해당하는 bitmap값들이 변경되게 된다. 이러한 변경사항들은 data dictionay
table들에 update작업을 수행하지 않는 관계로 rollback정보를 생성하지 않는다.

이렇게 local로 관리되는 경우 인접한 각 free extent들에 대한 정보가
자동적으로 추적가능하기 때문에 free extent를 coalesce할 필요성이 없어진다.

Locally managed tablespace는 동일한 size의 extent들을 가지도록 설정할 수도
있고, system이 알아서 그 extent의 size를 결정하도록 할 수도 있다.
Tablespace생성시의 UNIFORM 또는 AUTOALLOCATE option을 이용하여 이를
결정한다.

system tablespace는 locally managed tablespace로 생성할 수 없다.


사용 예제
---------

REM AUTOALLOCATE 는 해당 tablespace내의 extent size가 system에 의해서
REM 결정됨을 지정함.
REM 사용자가 extent의 size를 지정할 수 없다.

SQL> CREATE TABLESPACE local_auto DATAFILE
2 '/mnt3/rctest8i/server/local_auto.dbf' SIZE 1M
3 EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

Tablespace created.

SQL> CREATE TABLESPACE local_uniform DATAFILE
2 '/mnt3/rctest8i/server/local_u.dbf' SIZE 1M
3 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

Tablespace created.

SQL> select TABLESPACE_NAME,
2 INITIAL_EXTENT,
3 NEXT_EXTENT,
4 MIN_EXTENTS,
5 MAX_EXTENTS,
6 MIN_EXTLEN,
7 EXTENT_MANAGEMENT,
8 ALLOCATION_TYPE
9 from dba_tablespaces
10 where tablespace_name like 'LOCAL%';

TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
MIN_EXTLEN EXTENT_MAN ALLOCATION
--------------- -------------- ----------- ----------- ----------------
---------- ---------- ----------

LOCAL_AUTO 65,536 1 2,147,483,645
65,536 LOCAL SYSTEM

LOCAL_UNIFORM 131,072 131,072 1 2,147,483,645
131,072 LOCAL UNIFORM


각 tablespace에 table을 생성

SQL> CREATE TABLE local_table1 (
2 DEPTNO NUMBER(3) NOT NULL,
3 DNAME VARCHAR2(14),
4 LOC VARCHAR2(13))
5 storage (initial 10k next 10k)
6 tablespace local_uniform;

Table created.

SQL> CREATE TABLE local_table2 (
2 DEPTNO NUMBER(3) NOT NULL,
3 DNAME VARCHAR2(14),
4 LOC VARCHAR2(13))
5 storage (initial 10k next 10k)
6 tablespace local_auto;

Table created.


USER_TABLES에서 INITIAL과 NEXT를 확인

SQL> select table_name,
2 tablespace_name,
3 INITIAL_EXTENT,
4 NEXT_EXTENT
5 from user_tables
6 where table_name like 'LOCAL%';

TABLE_NAME TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT
------------------- --------------- -------------- ------------
LOCAL_TABLE1 LOCAL_UNIFORM 10,240 131,072
LOCAL_TABLE2 LOCAL_AUTO 10,240


각 table에 실제적으로 할당된 extent들의 size를 확인

SQL> select SEGMENT_NAME,
2 SEGMENT_TYPE,
3 TABLESPACE_NAME,
4 EXTENT_ID,
5 BYTES,
6 BLOCKS
7 from user_extents
8 where segment_name like 'LOCAL%';

SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID BYTES BLOCKS
--------------- ------------- --------------- --------- -------- ------
LOCAL_TABLE1 TABLE LOCAL_UNIFORM 0 131,072 64
LOCAL_TABLE2 TABLE LOCAL_AUTO 0 65,536 32


각 table에 하나 씩의 extent를 더 할당

SQL> alter table local_table1 allocate extent;

Table altered.

SQL> alter table local_table2 allocate extent;

Table altered.


SQL> select SEGMENT_NAME,
2 SEGMENT_TYPE,
3 TABLESPACE_NAME,
4 EXTENT_ID,
5 BYTES,
6 BLOCKS
7 from user_extents
8 where segment_name like 'LOCAL%';

SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID BYTES BLOCKS
--------------- ------------- --------------- --------- -------- ------
LOCAL_TABLE1 TABLE LOCAL_UNIFORM 0 131,072 64
LOCAL_TABLE1 TABLE LOCAL_UNIFORM 1 131,072 64
LOCAL_TABLE2 TABLE LOCAL_AUTO 0 65,536 32
LOCAL_TABLE2 TABLE LOCAL_AUTO 1 65,536 32


Locally Managed Tablespaces의 장점
----------------------------------

1. 다음과 같은 factor로 인해 space 관리 상 이점이 있음
- 동일한 size의 extent들
- data dictionary에 대한 access를 줄임

2. fragment를 줄일 수 있음.

3. temporary tablespace를 locally managed tablespace로 할 경우 관리 상의 이점이 있음.

// 테이블 스페이스 삭제
drop tablespace "TABLESPACE_NAME" including contents ;


// user 삭제
drop user "USER_NAME" cascade ;


// 테이블 스페이스 만들기
create tablespace "TABLESPACE_DAT"
datafile 'C:\oracle\oradata\TB\TABLESPACE.DBF'
size 1024M ;


// 권한주기
grant resource,connect to "USERNAME";
grant dba to "USERNAME";


// user 만들기
create user "USERNAME"
identified by "PASSWORD"
default tablespace "TABLESPACE_DAT";


// 복원 (CMD 실행)
C:\Documents and Settings\Administrator>imp userid=system/system fromuser="USERNAE" touser="USERNAE" file=C:\FILENAE.DMP


오라클(8i) 설치 하기


oracle 계정만들기
먼저 oracle계정을 dba그룹으로 만든다.


groupadd -g 5000 dba
useradd -g dba oracle
passwd oracle
cd /etc/
vi group
dba:!:5000: -> dba:!:5000:oracle,root


oracle user 환경조정
oracle유저의 .bash_profile에 아래를 추가한다.

export USERNAME BASH_ENV PATH
export ORACLE_OWNER=oracle;
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=/oracle/app/oracle/products/8.1.5
export ORACLE_SID=WNI
export ORACLE_TERM=vt100
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=$PATH:$ORACLE_HOME/bin:/usr/local/jre/bin:/bin:
$ORACLE_HOME:/usr/local:/usr/local/jdk/bin:/usr/local/jdk/bin

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/jdbc/lib
export CLASSPATH=/usr/local/jre/bin:$ORACLE_HOME/jlib:$ORACLE_HOME/product/jlib:
/usr/local/jre:/usr/local/jdk/lib/:/usr/local/jre/bin

umask 022
mesg n


root user 환경조정
root 계정의 .bash_profile에도 아래를 추가


export ORACLE_HOME=/oracle/app/oracle/products/8.1.5
export ORACLE_SID=WNI
export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
export TNS_ADMIN=$ORACLE_HOME/network/admin
mesg n


JDK && JRE 설치
아래의 경로에 설치한다.


/usr/local/jdk
/usr/local/jre


오라클 설치
/mnt/cdrom/install/linux/run~.sh를 실행한다.

화면이 안보일 경우 --> display를 설정한다.

xhost + [현재의컴퓨터IP]
DISPLAY=[현재의컴퓨터IP]:0.0


NET8 설정
/oracle/app/oracle/products/8.1.5/network/admin/listener.ora

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.210.225)(PORT = 1521))
)
)
(DESCRIPTION =
(PROTOCOL_STACK =
(PRESENTATION = GIOP)
(SESSION = RAW)
)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.210.225)(PORT = 2481))
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/app/oracle/products/8.1.5)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = WNI)
(ORACLE_HOME = /oracle/app/oracle/products/8.1.5)
(SID_NAME = WNI)
)
)

/oracle/app/oracle/products/8.1.5/network/admin/tnsnames.ora

WNI.LOCALDOMAIN =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.210.225)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = WNI)
)
)

EXTPROC_CONNECTION_DATA.LOCALDOMAIN =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)



테이블 스페이스 잡기 && 계정만들기
sqlplus system/manager 으로 접속해서...


DATA라는 테이블 스페이스 만들기

create tablespace DATA
datafile
'/data/oradata/WNI/data01.dbf' size 500M,
'/data/oradata/WNI/data02.dbf' size 500M
default storage ( initial 1M next 100k pctincrease 30)
permanent;


wnk계정 만들기

create user userid
identified by ''password''
default tablespace DATA
temporary tablespace SYSTEM;


wnk계정에 dba권한주기

grant dba to wnk


문자셋 변경

select * from nls_database_parameters where parameter like '%CHARACTERSET%';

PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_CHARACTERSET
KO16KSC5601

NLS_NCHAR_CHARACTERSET
US7ASCII

---> 위와 같지 않을 경우 srvmrgl로 접속해서 아래와 같이 해준다.


shutdown immediate;
starup mount;
alter system enable restricted session;
alter database open;
alter database character set AMERICA.KO16KSC5601;
shutdown immediate;
startup;


데이터 백업 & 복구
exp userid/pass file=data.dump ## 백업
imp userid/pass file=data.dump FULL=y ##복구

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

[펌]오라클튜닝  (0) 2009.09.03
[펌]COMMENT 컬럼이나 테이블에 코멘트 달기  (0) 2009.09.02
[펌]테이블스페이스 관리  (0) 2009.09.02
[펌] 달력 SQL  (0) 2009.08.13
특정일자의 하루전일자 구하기  (0) 2009.04.17