9.1 데이터베이스 구축을 위한 사전 준비
- 데이터베이스 환경 정의서
- 용량 산정서
- 각종 오브젝트 설계서
- 분산 환경 설계서(설치하고자 하는 데이터베이스가 분산을 고려하지 않으면 제외) |
산출물
- ERD
- 테이블 정의서
- 인덱스 정의서
- 뷰 정의서
- 테이블스페이스 용량 산정서
- 인덱스스페이스 용량 산정서
- 데이터파일 용량 산정서
- 분산 설계서
- 데이터베이스 환경 설계서
- 시스템파일 용량 산정서
- 데이터베이스 환경 설계서와 시스템파일 용량 산정서는 프로젝트를 진행할 경우 공식적인 산출물이라기보다 대상이 되는 데이터베이스의 특징과 버젼에 따라 구축하면서 정리하는 경우도 많다.
9.2 데이터베이스 생성
스크립트로 생성(Manually Creating).
orcl.sh
#!/bin/sh
mkdir /backup/archive/ORCL
mkdir /oracle/admin/ORCL/bdump
mkdir /oracle/admin/ORCL/cdump
mkdir /oracle/admin/ORCL/create
mkdir /oracle/admin/ORCL/pfile
mkdir /oracle/admin/ORCL/udump
mkdir /oradata/ORCL
setenv ORACLE_SID ORCL
echo Add this entry in the oratab: ORCL:/oracle/product/9.2.0:Y
/oracle/product/9.2.0/bin/orapwd file=/oracle/product/9.2.0/dbs/orapwORCL password=change_on_install
/oracle/product/9.2.0/bin/sqlplus /nolog @/oracle/admin/ORCL/scripts/CreateDB.sql
/oracle/product/9.2.0/bin/sqlplus /nolog @/oracle/admin/ORCL/scripts/CreateDBFiles.sql
/oracle/product/9.2.0/bin/sqlplus /nolog @/oracle/admin/ORCL/scripts/CreateDBCatalog.sql
/oracle/product/9.2.0/bin/sqlplus /nolog @/oracle/admin/ORCL/scripts/postDBCreation.sql |
CreateDB.sql
connect SYS/change_on_install as SYSDBA
set echo on
spool /oracle/product/9.2.0/assistants/dbca/logs/CreateDB.log
startup nomount pfile="/oracle/admin/ORCL/scripts/init.ora";
CREATE DATABASE ORCL
MAXINSTANCES 1
MAXLOGHISTORY 1
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 100
DATAFILE '/oradata/ORCL/system01.dbf' SIZE 500M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/oradata/ORCL/temp01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
UNDO TABLESPACE "UNDOTBS1" DATAFILE '/oradata/ORCL/undotbs01.dbf' SIZE 500M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
CHARACTER SET KO16KSC5601
NATIONAL CHARACTER SET UTF8
LOGFILE GROUP 1 ('/oradata/ORCL/redo01.log') SIZE 102400K,
GROUP 2 ('/oradata/ORCL/redo02.log') SIZE 102400K,
GROUP 3 ('/oradata/ORCL/redo03.log') SIZE 102400K;
spool off
exit;
CreateDBFiles.sql
connect SYS/change_on_install as SYSDBA
set echo on
spool /oracle/product/9.2.0/assistants/dbca/logs/CreateDBFiles.log
CREATE TABLESPACE "INDX" LOGGING DATAFILE '/oradata/ORCL/indx01.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;
CREATE TABLESPACE "TOOLS" LOGGING DATAFILE '/oradata/ORCL/tools01.dbf' SIZE 10M REUSE AUTOEXTEND ON NEXT 320K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;
CREATE TABLESPACE "USERS" LOGGING DATAFILE '/oradata/ORCL/users01.dbf' SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;
spool off
exit;
CreateDBCatalog.sql
connect SYS/change_on_install as SYSDBA
set echo on
spool /oracle/product/9.2.0/assistants/dbca/logs/CreateDBCatalog.log
@/oracle/product/9.2.0/rdbms/admin/catalog.sql;
@/oracle/product/9.2.0/rdbms/admin/catexp7.sql;
@/oracle/product/9.2.0/rdbms/admin/catblock.sql;
@/oracle/product/9.2.0/rdbms/admin/catproc.sql;
@/oracle/product/9.2.0/rdbms/admin/catoctk.sql;
@/oracle/product/9.2.0/rdbms/admin/owminst.plb;
connect SYSTEM/manager
@/oracle/product/9.2.0/sqlplus/admin/pupbld.sql;
connect SYSTEM/manager
set echo on
spool /oracle/product/9.2.0/assistants/dbca/logs/sqlPlusHelp.log
@/oracle/product/9.2.0/sqlplus/admin/help/hlpbld.sql helpus.sql;
spool off
spool off
exit;
postDBCreation.sql
connect SYS/change_on_install as SYSDBA
set echo on
spool /oracle/product/9.2.0/assistants/dbca/logs/postDBCreation.log
@/oracle/product/9.2.0/rdbms/admin/utlrp.sql;
shutdown ;
startup mount pfile="/oracle/admin/ORCL/scripts/init.ora";
alter database archivelog;
alter database open;
alter system archive log start;
shutdown ;
startup pfile="/oracle/admin/ORCL/scripts/init.ora";
exit;
- DBCA(Database Configuration Assistants) 그래픽 툴 이용.
9.3 테이블스페이스 생성
- 테이블 스페이스는 설계 단계에서 정의한 각종 오브젝트(테이블, 인덱스, 뷰등)가 실제 데이터파일에 저장되기 위한 공간을 정의하는 데이터베이스 오브젝트.
DDL 문장
CREATE TABLESAPCE TS001
DATAFILE 'D:\TEST\DB1\DF001.DBF' SIZE 55M
DEFAULT STORAGE ( INITIAL 1024K NEXT 512K MAXEXTENTS 128 PCTINCREASE 0);
CREATE TABLESAPCE IS001
DATAFILE 'D:\TEST\DB1\IF001.DBF' SIZE 30M
DEFAULT STORAGE ( INITIAL 512K NEXT 256K MAXEXTENTS 128 PCTINCREASE 0);
테이블 스페이스 생성 확인
SELECT TABLESPACE_NAME, FILE_NAME AS DATAFILE, (BYTES/1024) AS SZ_KB
FROM DBA_DATA_FILES;
9.4 사용자 및 역할과 권한 지정
- 데이터베이스를 사용할 수 있도록 사용자 계정을 생성하고 역할과 권한을 지정.
DDL 문장
CREATE USER BONSA01 IDENTIFIED BY BONSA01
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
사용자 생성 확인
SELECT USERNAME, DEFAULT_TABLESPACED, TEMPORARY_TABLESPACE, PROFILE
FROM DBA_USERS;
역할 생성 DDL 문장
CREATE ROLE BONSA_ROLE NOT IDENTIFIED;
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, ALTER ROLLBACK SEGMENT TO BONSA_ROLE;
역할 생성 확인
SELECT ROLE FROM DBA_ROLES;
권한 부여 DDL 문장
GRANT BONSA_ROLE TO BONSA01;
권한 부여 확인
SELECT GRANTEE, GRANTED_ROLE
FROM DBA_ROLE_PRIVS;
9.5 오브젝트 생성
테이블 생성 DDL 문장
CREATE TABLE DEPT (
DEPTNO NUMBER(2) NOT NULL,
DEPTNM VARCHAR2(14) NOT NULL,
LOC VARCHAR2(14) NULL,
CHARGE VARCHAR2(20) NULL
) TABLESPACE TS001
STORAGE ( INITIAL 1M NEXT 1M PCTINCREASE 0 );
ALTER TABLE DEPT ADD CONSTRAINT DEPT_PK PRIMARY KEY ( DEPTNO );
테이블 생성 확인
SELECT SEGMENT_NAME, ROUNT(INITIAL_EXTENT/1024, 0) INI_KB,
ROUND(NEXT_EXTENT/1024, 0) NXT_KB, ROUND(BYTES/1024, 0) TOT_KB,
PCT_INCREASE PCT, EXTENTS, TABLESPACE_NAME
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE = 'TABLE';
PK 확인
SELECT TABLE_NAME, CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'P';
FK 확인
SELECT CONSTRAINT_NAME, R_CONSTRAINT_NAME, STATUS
FROM USER_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'R';
인덱스 생성 DDL 문장
CREATE INDEX I_EMP01 ON EMP ( DEPTNO ASC ) TABLESPACE IS001;
인덱스 생성 확인
SELECT SEGMENT_NAME, ROUND(INITIAL_EXTENT/1024, 0) INI_KB,
ROUND(NEXT_EXTENT/1024, 0) NXT_KB, ROUND(BYTES/1024, 0) TOT_KB,
PCT_INCREASE PCT, EXTENTS, TABLESPACE_NAME
FROM USER_SEGMENTS
WHERE SGEMENT_TYPE = 'INDEX';
SELECT TABLE_NAME, INDEX_NAME
FROM USER_INDEXES;
뷰 생성 DDL 문장
CREATE VIEW V_EMP AS
SELECT EMPNO, EMPNM, DEPTNO
FROM EMP;
뷰 생성 확인
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'VIEW';
9.6 분산 환경 생성
- 연결 대상인 데이터베이스 쪽(Remote) 서버에 리스너가 기동되어야 한다.
- 연결하고자 하는 쪽에서는 Net8 클라이언트가 설치되어 있으면서 Tnsnames.ora 파일이 구성되어야 한다.
- 로컬 데이터베이스와 연결 데이터베이스간 데이터베이스 링크를 설정하면 분산 환경 구성이 완료된다.
원격 데이터베이스 리스너 기동
로컬 서버 Tnsnames.ora 파일 구성
$ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora
BONSA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = BONSA))
데이터베이스 링크 생성(DATABASE LINK)
- 데이터베이스 링크는 참조를 하려는 쪽인 로컬에서 데이터베이스 링크 생성 권한을 가진 사용자가 생성.
CREATE PUBLIC DATABASE LINK H2U1
CONNECT TO BONSA01 INDENTIFIED BY BONSA01
USING 'BONSA';
데이블 생성 DDL 문장
- 본사 테이블 생성 DDL 문장
- 분산 환경 설계서에서 각 테이블의 어느 위치에 생성되는지 확인
- 테이블 설계서와 테이블 스페이스 용량 산정서를 참조하여 DDL 문장을 생성
스냅샷 테이블 생성
CREATE SNAPSHOT LOG ON EMP
TABLESPACE TS001
STORAGE(INITIAL 1M NEXT 1M PCTINCREASE 0);
지사 환경 설정 ( 스냅샷 생성 )
CREATE SNAPSHOT EMP
TABLESPACE TS002 STORAGE(MINEXTENTS 1 PCTINCREASE 0)
USING INDEX TABLESPACE IS002 STORAGE (MINEXTENTS 1 PCTINCREASE 0)
REFRESH FAST
START WITH SYSDATE NEXT TRUNC(SYSDATE) + 1 + (20/24) <- REFRESH 주기
AS SELECT * FROM EMP@BONSA; <-- 데이터베이스 링크명