본문 바로가기

프로그래밍/데이터베이스

Oracle 11g 데이터베이스 생성에서 테이블 생성까지 - 1

서버 : 리눅스

DB : Oracle 11g


Oracle 11g가 설치가 되어 있는 상태에서 데이터베이스 생성에서 테이블 생성까지 해보겠다.


순서는 아래와 같이 진행 할 것이다.


1. DB생성

2. listener.ora구성

3. tnsnames.ora 구성

4. Table space 생성

5. DB user 생성 및 권한 부여

6. 클라이언트 접속하기

7. table 생성 및 data 추가


1. DB생성하기

Database 생성을 위해서는 두가지 방법이 있다.

- DBCA(Database Configuration Assistant )를 이용해서 GUI를 통해 생성하는 방법

- 두번째는 아래 그림에 있는 file들을 직접 생성해서 DB를 생성하는 방법이 있다.


오라클 데이터베이스의 구성요소는 다음과 같다.


- 데이터 파일 - 실제 데이터베이스의 데이터가 저장되는 공간

- 컨트롤 파일 - 데이터베이스의 내부적 변경을 제어하는 파일

- 리두 록 파일 - 데이터의 변경에 대한 로그를 기록하는 파일

- 기타 파일 - 동적/정적 파라메터 파일


여기서는 두번째 방법으로 DB를 생성하겠다.


data files, control files, redo log file 등이 저장될 폴더생성

$ORACLE_BASE/oradata 하위에 SID 명으로 폴더를 생성한다.

$ORACLE_BASE는 Oracle 설치 하면서 .bash_profile에 지정이 되어 있다.


 $> mkdir $ORACLE_BASE/oradata/idvdb2




오라클 parameter 파일 생성하기 

오라클 환경 설정 정보가 저장되는 파일이다.


SID - database의 instance 이름

ORACLE_HOME - 오라클 엔진이 설치되어 있는 위치


$> export ORACLE_SID=idvdb2

$> vi $ORACLE_HOME/dbs/initidvdb2.ora 


아래 정보를 입력 후 저장한다.

db_name       = idvdb2

instance_name = idvdb2

compatible    = 11.2.0

processes     = 300


undo_management = auto

undo_tablespace = undotbs01


db_cache_size    = 64m

shared_pool_size = 122m

db_block_size    = 8192


control_files = ('$ORACLE_BASE/oradata/idvdb2/control01.ctl',

                     '$ORACLE_BASE/oradata/idvdb2/control02.ctl')


remote_login_passwordfile = exclusive


데이터베이스 생성 

데이터베이스를 생성하기 위해서는 데이터베이스 오픈 상태에서는 안되며 NOMOUNT 상태여야한다.

데이터베이스를 생성하기 위해 노마운트 상태로 만들기 위해서는 파라메터 파일만 존재하면 가능하다.

또한 SYSDBA 권한으로 해당 데이터베이스를 접속해야한다.


$> sqlplus / as sysdba 

SQL> STARTUP NOMOUNT

SQL> ed createdb.sql


하기 내용 입력 후 저장

create database idvdb2

logfile group 1 ('$ORACLE_BASE/oradata/idvdb2/redo01_a.log', '$ORACLE_BASE/oradata/idvdb2/redo01_b.log') size 20m,
         group 2 ('$ORACLE_BASE/oradata/idvdb2/redo02_a.log', '$ORACLE_BASE/oradata/idvdb2/redo02_b.log') size 20m
datafile '$ORACLE_BASE/oradata/idvdb2/system01.dbf' size 200m autoextend on next 20m maxsize unlimited 
sysaux datafile '$ORACLE_BASE/oradata/idvdb2/sysaux01.dbf' size 200m autoextend on next 20m maxsize unlimited
undo tablespace undotbs01 datafile '$ORACLE_BASE/oradata/idvdb2/undotbs01.dbf' size 100m autoextend on next 20m maxsize 2G 

default temporary tablespace temp tempfile '$ORACLE_BASE/oradata/idvdb2/temp01.tmp' size 20m autoextend on next 20m maxsize 2G; 


sql실행하기

 SQL> @ createdb.sql


sys, system 유저의 패스워드를 변경한다

SQL> alter user sys identified by oracle;

SQL> alter user system identified by oracle; 



필요 스크립트수행

데이터베이스 생성 후 데이터 딕셔너리 뷰 또는 여러 패키지를 생성하기 위해 다음의 스크립트를 수행해야한다.


 SQL> ed after_db_create.sql


하기 내용 입력 후 저장

conn sys/oracle as sysdba
@?/rdbms/admin/catalog.sql            -- data dictionary 생성
@?/rdbms/admin/catproc.sql            -- pl/sql 환경 구성

conn system/oracle

@?/sqlplus/admin/pupbld.sql            -- product user profile테이블 및 관련 프로시져 생성 


sql 실행, 20분 가량 걸림.


 SQL> @ after_db_create.sql


 SQL> exit


database 생성이 끝남. 잘 생성 되었는지 테스트해보자.

$> export ORACLE_SID=idvdb2


$> sqlplus / as sysdba


SQL> select instance_name from v$instance;


SQL> shutdown abort


SQL> startup 


2.  listener.ora구성


클라이언트가 서버에 접속해서 작업 할 수있도록 설정을 해준다.

클라이언트가 접속하기 위해서는 이 설정 후에 DB User를 추가해 줘야한다.


리스너를 정지한다.

 $> lsnrctl stop


listener.ora 파일을 편집한다.

 $> vi $ORACLE_HOME/network/admin/listener.ora


하기 내용을 추가 후 저장한다.  

 # IDV2 DB 

(SID_DESC =

      (SID_NAME = idvdb2)

      (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1)

      (GLOBAL_DBNAME = idvdb2)

    )


리스너 시작

 $> lsnrctl start


3. tnsnames.ora 구성

tnsnames.ora파일 편집( DB 매니지먼트 툴에서 접속 할 수 있도록 설정) 

$>vi $ORACLE_HOME/network/admin/tnsnames.ora 


아래 내용을 추가해 준다.

idvdb2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = idvdb2)
    )

  ) 



패스워드 파일을 생성한다


$> ls $ORACLE_HOME/dbs

$> orapwd file=$ORACLE_HOME/dbs/orapwidvdb2 password=oracle entries=5 


여기까지해서 네트워크 세팅이 완료되었다.
잘 되었는지 테스트해보자.


$> tnsping idvdb2


4. Table space 생성

테이블 스페이스를 생성하기 전에 테이블 스페이스에 대한 간략한 개념을 정리하고 진행하자.




우선 테이블 스페이스의 종류에 대해 알아보자

테이블 스페이스는 용도, 익스텐트 관리 방법, 세그먼트 공간 관리에 따라 나뉜다.


4.1 용도 

- 시스템용 테이블 스페이스  : 오라클이 데이터베이스 운영을 위해 사용하는 영역

▣ 데이터베이스 운영에 필요한 데이터 저장

▣ 데이터베이스 생성시 반드시 생성해야 하며 생성 후 삭제 불가

▣ 테이블스페이스 상태 변경불가


● 시스템 테이블스페이스

▣ 데이터베이스 정보 및 유저 오브젝트 정보를 저장한다.

▣ 데이터베이스 정보와 오브젝트 정보의 변경에 대한 언두 데이터를 저장하는 시스템 언두 세그먼트를 포함한다.

▣ 시스템 테이블스페이스가 지역 관리 방식으로 생성되면 이후 모든 테이블스페이스는 지역 관리 방식으로만 생성 가능하다.


● SYSAUX 테이블스페이스 : 오라클 10g에서 새로 추가된 필수 테이블스페이스이며 10g 이전의 다양한 테이블스페이스들을 저장한다.

▣ 시스템 테이블스페이스의 사용량과 부하 감소

▣ 기능 추가 및 삭제에 따른 시스템 테이블스페이스 단편화 현상 감소



- 비시스템용 테이블 스페이스

● 일반 테이블스페이스 : 필요에 따라 하나 이상 생성하여 사용하며 생성, 수정 및 삭제에 대한 제약이 거의 없다.

● 임시 테이블스페이스 : 정력에 사용되는 임시 세그먼트를 저장하는 공간이다.

▣ ORDER BY 및 GROUP BY 등 SQL문의 요구 조건에 의해 정령이 필요한 경우에 사용.

▣ 인덱스 생성시 사용.

▣ 데이터베이스는 최소한 하나의 기본 임시 테이블스페이스를 가져야함.

▣ 임시 세그먼트만 저장할 수 있음.

▣ 기본 임시 테이블스페이스는 데이터베이스 생성시 지정된다.

▣ 기본 임시 테이블스페이스는 DROP 또는 Offline 상태로 변경할 수 없다.


● 언두 테이블스페이스 : 롤백을 위한 이전 이미지를 저장하는 공간이다.

▣ 언두 세그먼트만 저장할 수 있음.

 자동 관리 언두 세그먼트를 사용하기 위해서는 지역 관리 테이블스페이스르로 생성해야함.


익스텐트 관리 방법

- 딕셔너리 관리 테이블스페이스 : 사용 가능한 또는 할당된 익스텐트 정보를 시스템 테이블스페이스에 저장된 데이터 딕셔너리 테이블에서 관리

▣ 해당 테이블스페이스에 존재하는 세그먼트가 사용하는 익스텐트의 정보가 변경될 때마다 관련 데이터 딕셔너리 테이블에 해당 익스텐트 정보를 갱신

▣ 세그먼트마다 각기 다른 익스텐트 크기 설정 가능

▣ 데이터 딕셔너리 데이블에 대한 언두 정보 발생


- 지역 관리 테이블스페이스 : 지역관리 테이블스페이스에 존재하는 모든 세그먼트 SYSTEM 테이블 스페이스의 데이터 딕셔너리 테이블에 익스텐트 정보를

기록하지 않음.

▣ 데이터 딕셔너리 테이블을 갱신하거나 참조하지 않음

▣ 데이터 딕셔너리 테이블 갱신에 따른 언두 정보 불필요.



세그먼트 공간 관리

- 자동 세그먼트 공간 관리 테이블스페이스 : 세그먼트를 구성하는 각 익스텐트의 첫 번째 데이터 블록인 익스텐트 헤더에서 비트맵으로 영유 공간을 가지는 데이터 블록을 관리하는 방식.


- 수동 세그먼트 공간 관리 테이블스페이스 : 세그먼트를 구성하는 익스텐트 중 첫 번째 익스텐트의 첫 번째 데이터 블록인 세그먼트 헤더에서 프리리스트로 여유 공간을 가지는 데이터 블록을 관리하는 방식이다.


4.2 테이블 스페이스 생성


일반 테이블스페이스 생성

SQL> CREATE TABLESPACE tablespace_name

         [DATAFILE datafile_clause]     - 테이블스페이스가 사용할 데이터 파일 설정

         [BLOCKSIZE n[K]]              - 테이블스페이스에 저장될 세
         [LOGGING | NOLOGGING]     - 테이블 스페이스에 저장될 세그먼트의 로그 저장 방식 설정.
         [DEFAULT storage_clause]     - 테이블스페이스에 저장될 세그먼트들의 기본 스토리지 옵션을 설정
         [extent_management_clause]  - 테이블스페이스의 익스텐트 관리 방식을 설정
         [segment_management_clause]; - 테이블스페이스에 저장될 세그먼트의 공간 관리 방식을 설정


ex)CREATE TABLESPACE TS_IDVDB DATAFILE

'TS_IDVDB' SIZE 2048M AUTOEXTEND ON NEXT 4M MAXSIZE UNLIMITED LOGGING PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL FLASHBACK ON;


언두 테이블 스페이스 생성

 SQL> CREATE UNDO TABLESPACE TS_IDVDB
           [DATAFILE clause]
           [extent_management_clause];


임시 테이블스페이스 생성

SQL> CREATE TEMPORARY TABLESPACE TS_IDVDB
          [TEMPFILE clause]

          [extent_management_clause]; 




5. DB user 생성 및 권한 부여


CREATE USER user_id IDENTIFIED BY user_pw
DEFAULT TABLESPACE idvdb2
PROFILE DEFAULT
QUOTA UNLIMITED ON idvdb2 
	


6. 클라이언트 접속하기



7. table 생성 및 data 추가