강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

데이터베이스 생성

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

먼저 기존 DB를 백업한다.
먼저 /usr/local/Oracle/oradata의 kang이라는 DB를 백업해둔다.
이것은 물리적백업의 예로 데이터베이스가 실행상태라면 백업전에 데이터베이스를 shutdown해야 한다.


[oracle@localhost kang]$ tar cvzf kang_data.tgz *
control01.ctl
control02.ctl
control03.ctl
rbs01.dbf
redokang01.log
redokang02.log
redokang03.log
system01.dbf
temp01.dbf
tools01.dbf
users01.dbf

이제 설정화일(패러미터화일, 패러미터화일, 기타등등..)을 복사해둔다.
아래의 예는 디폴트로 설치되는 DB의 설정이고 일반적으로 $ORACLE_HOME/dbs에
설정화일(보통 패러미터화일만 의미)이 존재한다.

[oracle@localhost admin]$ tar cvf kang_set.tar kang
kang/
kang/pfile/
kang/pfile/configkang.ora
kang/pfile/initkang.ora
kang/pfile/initkang_0.ora
kang/create/
kang/create/crdbkang.sql
kang/create/crdb2kang.sql
kang/create/crdbkang.lst
kang/bdump/
kang/bdump/alert_kang.log
kang/cdump/
kang/udump/

kang이라는 DB의 데이터들을 다른 곳(/backup)으로 복사해둔다.
[oracle@localhost admin]$ l /backup/
total 11753
-rw-r--r--   1 root     root     11893746 Nov  4 22:19 kang_data.tgz
-rw-r--r--   1 oracle   dba         92160 Nov  4 22:20 kang_set.tar

/////////////////////////////////////////////////////////////////////
사실 위의 과정은 형식적이다.
일반 사용자는 테스트하고자 할때 위의 과정은 넘어가도 상관없다.
DB에 별로 중요한것이 없다면..
////////////////////////////////////////////////////////////////////

대충 DB를 백업해 두었으니 DB를 만들어 보자.
우리는 test라는 DB를 만들 것이다.
$ORACLE_HOME/dbs/init.ora를 inittest.ora로 복사해서 대충 수정한다.

(참고)
파일이름을 자기맘대로 지워버리면 svrmgrl에서 인스턴스시작시 항상
pfile로 패러미터파일을 지정해야 한다. 고로 init[dbname].ora로 이름을
지어 놓는 것이 좋다. 그리고 ORACLE_SID를 test로 변경해두어야 svrmgrl에서
startup nomount만으로 인스턴스를 시작할 수 있다. 그렇지 않으면 pfile로
패러미터파일(inittest.ora)를 지정해야 한다.
서버 매니저를 시작하기전에 DB의 데이터파일들이 저장될 디렉토리
(/usr/local/Oracle/oradata/test)를 미리 만들어야 한다.
svrmgrl를 실행한다. 인스턴스 시작시 nomount옵션에 주의하라.


[oracle@localhost dbs]$ cat inittest.ora

db_name=test
control_files = /usr/local/Oracle/oradata/test/control01.ctl
rollback_segments = (r01, r02)
db_block_size = 8192

db_domain = ulsan.co.kr
db_files = 80                                                         # SMALL
db_file_multiblock_read_count = 8                                     # SMALL
db_block_buffers = 200                                                 # SMALL
shared_pool_size = 3500000                                            # SMALL
log_checkpoint_interval = 10000
processes = 50                                                        # SMALL
dml_locks = 100
log_buffer = 8192                                                     # SMALL
sequence_cache_entries = 10                                           # SMALL
sequence_cache_hash_buckets = 10                                      # SMALL
max_dump_file_size = 10240      # limit trace file size to 5 Meg each
global_names = TRUE



[oracle@localhost dbs]$ echo $ORACLE_SID
kang
[oracle@localhost dbs]$ export ORACLE_SID=test
[oracle@localhost dbs]$ echo $ORACLE_SID
test
[oracle@localhost dbs]$ mkdir /usr/local/Oracle/oradata/test
[oracle@localhost dbs]$ svrmgrl

Oracle Server Manager Release 3.0.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

Oracle8 Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Production

SVRMGR> connect internal
연결되었습니다
SVRMGR> startup nomount
ORACLE 인스턴스가 시작되었습니다
시스템 글로벌 영역                          4554000 바이트 합계
Fixed Size                                          48400 바이트
Variable Size                                     4227072 바이트
Database Buffers                                   204800 바이트
Redo Buffers                                        73728 바이트
테이터베이스생성
SVRMGR> create database test
2> maxinstances 8
3> maxlogfiles 32
4> character set "KO16KSC5601"
5> national character set "KO16KSC5601"
6> datafile
7> '/usr/local/Oracle/oradata/test/system01.dbf' size 80m
8> logfile
9> '/usr/local/Oracle/oradata/test/redotest01.log' size 500k,
10> '/usr/local/Oracle/oradata/test/redotest02.log' size 500k,
11> '/usr/local/Oracle/oradata/test/redotest03.log' size 500k;

명령문이 처리되었습니다



[수정일: 2001-12-11]
Database를 OPEN한다.
SVRMGR> alter database mount;
Statement processed.
SVRMGR> alter database open;
Statement processed.



시스템(system01.dbf)에 데이터사전뷰을 만든다
SVRMGR> @?/rdbms/admin/catalog.sql
결과화면생략..



시스템에 롤백세그먼트를 만든다
SVRMGR> create rollback segment r0 tablespace system
2> storage (initial 16k next 16k minextents 2 maxextents 20);
명령문이 처리되었습니다




만든 롤백세그먼트를 온라인으로 변경한다.(즉, 사용가능하게 만든다)
이는 임시로 사용하기 위한 롤백세그먼트로 나중에 지우게 된다.
tablespace, 롤백세그먼트는 offline, online상태에 따라 사용불가능, 사용가능하게 된다.

SVRMGR> alter rollback segment r0 online;
명령문이 처리되었습니다




실제 DB가 사용하게될 롤백세그먼트(r01, r02)들의 tablespace를 생성한다
tablespace생성시 storage에 대한 옵션이 있는데,

initial은 첫째 extent의 크기를,
next는 2번째 extent의 크기를,
pctincrease는 3번째 이후로의 extent의 증가percentage를,
minextents는 사용할 최소 extent를 나타낸다.

(extent는 data block들의 집합이다. default로 1개의 extent는 5개의 datablock를 갖는다)
pctincrease가 0이면 1번째 extent이후의 모든 extent의 크기는 동일하다


*storage clause는 페이지 하단참조
SVRMGR> create tablespace rbs datafile
2> '/usr/local/Oracle/oradata/test/rbs01.dbf' size 15m
3> default storage(
4> initial 128k
5> next 128k
6> pctincrease 0
7> minextents 2);
명령문이 처리되었습니다


임시 tablespace를 생성한다
SVRMGR> create tablespace temp temporary datafile
2> '/usr/local/Oracle/oradata/test/temp01.dbf' size 1m
3> default storage (
4> initial 256k
5> next 256k
6> pctincrease 0);

명령문이 처리되었습니다


system사용자가 사용할 영역을 만들어 준다.
SVRMGR> create tablespace tools datafile
2> '/usr/local/Oracle/oradata/test/tools01.dbf' size 25m;
명령문이 처리되었습니다


일반사용자가 사용할 영역을 만들어 준다.
SVRMGR> create tablespace users datafile
2> '/usr/local/Oracle/oradata/test/users01.dbf' size 1m;
명령문이 처리되었습니다


롤백세그먼트(r01, r02)를 생성한다
주의: 롤백세그먼트의 생성시에는 pctincrease를 사용할 수 없다.
SVRMGR> create rollback segment r01 tablespace rbs;
명령문이 처리되었습니다
SVRMGR> create rollback segment r02 tablespace rbs;
명령문이 처리되었습니다


롤백세그먼트r01을 온라인으로 변경(즉, 사용가능하게 한다)

SVRMGR> alter rollback segment r01 online;

명령문이 처리되었습니다


이전에 만든 롤백세그먼트r0를 offline으로 변경(즉, 사용불가능하게 한다)
SVRMGR> alter rollback segment r0 offline;
명령문이 처리되었습니다


롤백세그먼트r0를 drop시킨다(이유는 위에서 설명했다.)
SVRMGR> drop rollback segment r0;
명령문이 처리되었습니다


sys사용자의 임시 tablespace를 temp로 변경한다(디폴트는 system이다)
SVRMGR> alter user sys temporary tablespace temp;
명령문이 처리되었습니다


system사용자의 default tablespace를 tools로, 임시 tablespace는 temp로 한다.
SVRMGR> alter user system default tablespace tools temporary tablespace temp;
명령문이 처리되었습니다
SVRMGR> shutdown
데이터베이스가 닫혔습니다
데이터베이스가 분리되었습니다
ORACLE 인스턴스가 종료되었습니다
SVRMGR> startup
ORACLE 인스턴스가 시작되었습니다
시스템 글로벌 영역                          4554000 바이트 합계
Fixed Size                                          48400 바이트
Variable Size                                     4227072 바이트
Database Buffers                                   204800 바이트
Redo Buffers                                        73728 바이트
데이터베이스가 올려졌습니다
데이터베이스가 열려졌습니다
SVRMGR> @?/rdbms/admin/catproc.sql
결과화면생략..
SVRMGR> exit
Server Manager 완료


참고:
ORACLE_SID가 test가 아니라면 다음과 같이 오라클인스턴스를 시작할 수 있다.
startup pfile=?/dbs/inittest.ora nomount;
데이터베이스를 drop하고자 할때:
datafile, redo log file, control file, parameter file, archived log file을
삭제하면 된다.



간단히 storage clause에 대해 예제를 통해 알아보자(SQL Ref참조)

create table dept
(deptno number(2),
dname varchar2(14),
loc varchar2(13) )
storage ( initial 100k next 50k minextents 1
maxextents50 pctincrease 5 )


위와 같이 테이블을 생성했다고 하자.
minextents가 1이므로 dept테이블에는 1개의 extent가 할당된다
initial이 100k이므로 1번째 extent에는 100Kbytes가 할당된다.
테이블의 데이터가 1번째 extent를 초과한다면 2번째 extent가 할당되어야 하는데
next가 50k이므로 2번째 extent는 50Kbytes가 할당된다.

데이터가 2번째 extent를 초과한다면 3번째 extent를 할당해야 하는데 pctincrease가
5이므로 3번째 extent의 크기는 2번째 extent의 크기보다 5%크다.
즉, 52.5Kbytes이다.
만일 datablock크기가 2Kbytes라면 오라클은 이 값을 52Kbytes로 round한다.
이후 extent들의 증가치는 바로 이전의 extent의 5%만큼 증가하게 된다
maxintents가 50개이므로 50개까지 extent가 늘어날 수 있다.


Copyleft(C) 명규의 오라클OCP All rights free

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,039 명
  • 현재 강좌수 :  35,845 개
  • 현재 접속자 :  91 명