행위

"오라클 수동설치"의 두 판 사이의 차이

DB CAFE

(pfile 생성)
1번째 줄: 1번째 줄:
== 오라클 수동설치 ==
 
* 테스트 완료 버전 (11g,12c,..)
 
 
* CREATE DATABASE 명령어를 사용해서 DB 생성(dbca 사용하지 않고)
 
* 신규 SID 생성 하여 개별 업무 관리
 
 
=== OS 환경변수 설정 ===
 
 
# ORACLE_SID, ORACLE_HOME 환경변수 설정(Oracle Instance를 기동시 연결할 데이터베이스 정보)
 
# oraenv를 사용하여 다중 DB 접속 환경변수 변경작업
 
 
* 오라클 설치 위치 : /u01/app (사용자별로 다름)
 
 
<source lang=shell>
 
[oracle@host ~]$ . oraenv
 
ORACLE_SID = [orcl] ? prod
 
ORACLE_HOME = [/u01/app/oracle] ? /u01/app/oracle/product/11.2.0/dbhome_1
 
 
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle
 
 
[oracle@6host ~]$ echo $ORACLE_SID
 
prod
 
 
[oracle@host ~]$ echo $ORACLE_HOME
 
/u01/app/oracle/product/11.2.0/dbhome_1
 
 
</source>
 
 
1. oratab 파일 수정
 
oraenv를 사용해서 환경변수 변경작업이 가능하지만, ORACLE_HOME 경로같은 경우는 오타 문제 때문에 
 
/etc/oratab 파일을 열어 변수를 정의하듯 미리 변경할 정보를 저장해두면 더 간편하게 환경변수 수정 가능.
 
 
<source lang=shell>
 
[oracle@host ~]$ vi /etc/oratab
 
</source>
 
 
<source lang=shell>
 
# This file is used by ORACLE utilities.  It is created by root.sh
 
# and updated by the Database Configuration Assistant when creating
 
# a database.
 
# A colon, ':', is used as the field terminator.  A new line terminates
 
# the entry.  Lines beginning with a pound sign, '#', are comments.
 
#
 
# Entries are of the form:
 
#  $ORACLE_SID:$ORACLE_HOME:<N|Y>:
 
#
 
# The first and second fields are the system identifier and home
 
# directory of the database respectively.  The third filed indicates
 
# to the dbstart utility that the database should , "Y", or should not,
 
# "N", be brought up at system boot time.
 
#
 
# Multiple entries with the same $ORACLE_SID are not allowed.
 
#
 
#
 
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N
 
</source>
 
 
* orcl는 기존 생성한 SID
 
* ORACLE_SID=prod (추가 생성할 데이터베이스)
 
 
<source lang=shell>
 
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N
 
prod:/u01/app/oracle/product/11.2.0/dbhome_1:N
 
</source>
 
 
oratab 파일 수정 후 oraenv 명령으로 prod로 변경.
 
 
<source lang=shell>
 
[oracle@host ~]$ . oraenv
 
ORACLE_SID = [prod] ? prod
 
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle
 
 
ORACLE_SID 값만 입력하면 ORACLE_HOME에 대한 정보를 자동 인식하여 변경 완료.
 
 
 
=== 오라클 PFILE/SPFILE 생성 ===
 
 
1. pfile 생성
 
* 파라미터 파일에 DB명,컨트롤파일,SGA_TARGET,... 추가
 
 
<source lang=shell>
 
[oracle@host ~]$ cd $ORACLE_HOME/dbs
 
 
[oracle@host dbs]$ ls
 
hc_DBUA0.dat  hc_orcl.dat  init.ora  initorcl.ora  lkORCL  orapworcl  spfileorcl.ora
 
</source>
 
 
<source lang=shell>
 
[oracle@host dbs]$ vi initprod.ora
 
 
db_name=prod
 
control_files='/u01/app/oracle/oradata/prod/control01.ctl'
 
sga_target=400M
 
remote_login_passwordfile='EXCLUSIVE'
 
</source>
 
 
* Database Create는 nomount 상태에서 가능.
 
* 파라미터 파일을 읽을 수 있는 상태까지 Database를 올리는 작업이 필요하여 pfile을 직접 생성하여 최소로 필요한 내용 작성.
 
* pfile은 $ORACLE_HOME/dbs 경로에 init<ORACLE_SID>.ora 형태로 파일이 존재해야함.
 
* 기본적으로 Parameter file을 열기 위해서는 db_name, control_files, shared_pool_size 그리고 db_cache_size 이 4개지 파라미터가 정의되어 있어야함.
 
*: (하지만 sga_target 파라미터를 정의한다면 sga 메모리를 자동으로 할당하기 때문에 shared_pool_size와 db_cache_size의 정보를 제외.
 
* remote_login_passwordfile은 Password fie이 하나의 데이터베이스에서 사용할 수 있도록 설정.(필수요소는 아님)
 
 
 
2. spfile 생성
 
<source lang=shell>
 
[oracle@host ~]$ sqlplus / as sysdba
 
 
SQL> create spfile from pfile;
 
 
File created.
 
 
SQL> !ls $ORACLE_HOME/dbs
 
hc_DBUA0.dat  hc_orcl.dat  init.ora  initorcl.ora  initprod.ora  lkORCL  orapworcl  spfileorcl.ora  spfileprod.ora
 
</source>
 
 
pfile을 사용해서 실행할 수 있지만, 편의상 작성한 pfile로 spfile을 생성하고 Database를 실행.
 
 
spfile 생성 작업은 DB가 내려가있는 상태에서 만들 수 있고 생성 이후 spfile<ORACLE_SID>.ora 형태의 파일이 생성된것 확인 필요.
 
 
 
=== DB nomount 실행 ===
 
<source lang=shell>
 
SQL> startup nomount
 
ORACLE instance started.
 
 
Total System Global Area  417546240 bytes
 
Fixed Size     2213936 bytes
 
Variable Size   134219728 bytes
 
Database Buffers   272629760 bytes
 
Redo Buffers     8482816 bytes
 
</source>
 
 
* Database 생성을 위해 nomount 상태로 DB 실행.
 
  (정상적으로 올라왔다면 생성한 pfile에 문제 없다는 뜻)
 
 
 
=== DB 생성 ===
 
1. 오라클 데이터 저장 경로 생성 (T/S,REDO로그,등.. )
 
 
<source lang=shell>
 
$ mkdir  /u01/app/oracle/oradata/prod
 
</source>
 
 
DB 생성하면서 만들어질 datafile, redologfile들의 경로  생성
 
 
<source lang=shell>
 
$ sqlplus / as sysdba
 
 
CREATE DATABASE prod
 
USER SYS IDENTIFIED BY oracle
 
USER SYSTEM IDENTIFIED BY oracle
 
CONTROLFILE REUSE
 
LOGFILE GROUP 1 ( '/u01/app/oracle/oradata/prod/redo01a.log'
 
                , '/u01/app/oracle/oradata/prod/redo01b.log' ) SIZE 100M REUSE,
 
        GROUP 2 ( '/u01/app/oracle/oradata/prod/redo02a.log'
 
                , '/u01/app/oracle/oradata/prod/redo02b.log' ) SIZE 100M REUSE
 
      DATAFILE '/u01/app/oracle/oradata/prod/system01.dbf' SIZE 400M REUSE AUTOEXTEND EXTENT MANAGEMENT LOCAL
 
            ON SYSAUX DATAFILE '/u01/app/oracle/oradata/prod/sysaux01.dbf' SIZE 200M REUSE AUTOEXTEND
 
            ON DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u01/app/oracle/oradata/prod/temp01.dbf' SIZE 100M REUSE AUTOEXTEND
 
            ON UNDO TABLESPACE UNDOTBS1 DATAFILE '/u01/app/oracle/oradata/prod/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND \
 
            ON CHARACTER SET KO16MSWIN949;
 
 
-- CHARACTER SET AL32UTF8
 
-- NATIONAL CHARACTER SET AL16UTF16;
 
 
Database created.
 
</source>
 
* USER SYS IDENTIFIED ... : SYS 유저 비밀번호 지정
 
* USER SYSTEM IDENTIFIED ... : SYSTEM  유저 비밀번호 지정
 
* CONTROLFILE :REUSE 명령을 사용하기 위해 명시. LOGFILE GROUP 이나 DATAFILE들에서도 REUSE(파일이 이미 존재한다면 해당 파일 이름 그대로 사용하여 덮어써서 DB를 생성) 옵션
 
* LOGFILE GROUP : 로그 파일은 최소 2개의 그룹으로 지정 해야함 .
 
* EXTENET MANAGEMENT LOCAL : LOCAL 방식은 Tablespace에 대한 free space 공간을 datafile 자체에서 bitmap을 이용해서 관리하는 방법.
 
* 다른방법으로 Tablespace의 free space 공간에 대한 정보를 data dictionary에서 관리하는 DICTIONARY 방식이 있지만
 
* data dictionary에 대한 경합이 발생하고 성능저하의 원인으로 Oracle 8i부터 LOCAL 방식이 처음 소개되면서 이 방식으로 관리하도록 권장.
 
 
 
리두로그 3개 그룹으로 추가 예) 
 
<source lang=shell>
 
CREATE DATABASE "prod"
 
        LOGFILE
 
    GROUP 1 ('/u01/app/oracle/oradata/prod/redo01.log') SIZE 20M,
 
    GROUP 2 ('/u01/app/oracle/oradata/prod/redo02.log') SIZE 20M,
 
    GROUP 3 ('/u01/app/oracle/oradata/prod/redo03.log') SIZE 20M
 
  DATAFILE '/u01/app/oracle/oradata/prod/system01.dbf' SIZE 700M  EXTENT MANAGEMENT LOCAL
 
SYSAUX DATAFILE '/u01/app/oracle/oradata/prod/sysaux01.dbf' SIZE 500M
 
    DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u01/app/oracle/oradata/prod/temp01.dbf' SIZE 2000M
 
          UNDO TABLESPACE "UNDOTBS1" DATAFILE '/u01/app/oracle/oradata/prod/undotbs01.dbf' SIZE 300M AUTOEXTEND ON NEXT  100M MAXSIZE 1000M
 
  CHARACTER SET KO16MSWIN949;
 
</source>
 
 
 
=== DB Open 확인 ===
 
 
1. DB 오픈 상태 확인
 
<source lang=shell>
 
SQL> select instance_name, status from v$instance;
 
 
 
INSTANCE_NAME    STATUS                                                                                                                                   
 
---------------- ------------                                                                                                                             
 
prod            OPEN   
 
 
</source>
 
 
Instance가 Open 상태인지 확인
 
 
 
=== 오라클 설치 후 후속작업 ===
 
* 하지만 수동 생성했을 때 Data Dictionary 조회작업이나, Oracle에서 제공하는 패키지들이 실행되지 않음.
 
* 이런 문제들을 해결하기 위해 몇 가지 후속작업 진행 해야함.
 
 
 
1. 딕셔너리,패키지(catalog.sql, catproc.sql) 실행
 
<source lang=shell>
 
cd $ORACLE_HOME/rdbms/admin/
 
 
sqlplus "/as sysdba"
 
 
SQL> @catalog.sql
 
=>데이터 딕셔너리 뷰와 다이나믹 퍼포먼스 뷰를 생성
 
 
SQL> @catproc.sql
 
 
=>PL/SQL을 사용하는데 필요한 패키지 및 프로시져를 생성
 
</source>
 
 
 
2. invalid 상태인 오브젝트가 있는지 확인
 
<source lang=sql>
 
sql>  select object_name  from dba_objects where status='INVALID' and owner='SYS';
 
</source>
 
3. password 파일 생성
 
<source lang=shell>
 
cd $ORACLE_HOME/dbs
 
 
orapwd file=orapwnewdb password=oracle
 
</source>
 
 
4. tnsnames.ora, listener.ora 파일 수정
 
<source lang=shell>
 
cd $ORACLE_HOME/network/admin
 
 
vi tnsnames.ora
 
 
vi listener.ora
 
</source>
 
 
 
※ PUPBLD.SQL
 
 
유저 생성후 로그인 할때 아래 메세지 발생시.
 
 
-----------------------------------------------------
 
PRODUCT_USER_PROFILE를 액세스하는데 오류입니다
 
 
경고:  사용자 프로파일 정보가 적재되지 않았습니다.
 
 
SYSTEM으로 PUPBLD.SQL 실행이 필요합니다
 
-----------------------------------------------------
 
<source lang=shell>
 
cd $ORACLE_HOME/sqlplus/admin
 
 
sqlplus system/******
 
 
SQL> @pupbld
 
</source>
 
=>pupbld.sql 스크립트는 Product User Profile 테이블 및 관련 프로시져를 생성.
 
 
 
 
=== 멀티 SID 사용 확인 ===
 
 
1.환경변수 변경
 
<source lang=shell>
 
[oracle@host ~]$ . oraenv
 
ORACLE_SID = [prod] ? orcl
 
 
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle
 
</source>
 
 
<source lang=shell>
 
[oracle@host ~]$ sqlplus / as sysdba
 
</source>
 
 
2.prod에 붙어서 작업하다가 orcl로 변경해서 작업하기 위해서 oraenv로 환경변수의 정보 변경 후 로그인.
 
 
1) orcl instance startup
 
<source lang=shell>
 
SQL> startup
 
</source>
 
 
2) orcl instance 기동
 
 
<source lang=shell>
 
SQL> select instance_name, status from v$instance;
 
</source>
 
 
orcl에서도 마찬가지로 instance의 open 상태를 확인.
 
 
<source lang=shell>
 
$ ps -ef | grep smon
 
</source>
 
 
* 주요 프로세스중 하나인 smon의 프로세스가 기동중인지 확인.
 
* prod와 orcl모두 올라와 있다면 각각 데이터베이스에 연결된 인스턴스 확인.
 
 
  
 
== 오라클 수동설치 ==
 
== 오라클 수동설치 ==
560번째 줄: 253번째 줄:
 
유저 생성후 로그인 할때 아래 메세지 발생시.
 
유저 생성후 로그인 할때 아래 메세지 발생시.
  
=================================================
+
-------------------------------------------------
 
 
 
PRODUCT_USER_PROFILE를 액세스하는데 오류입니다
 
PRODUCT_USER_PROFILE를 액세스하는데 오류입니다
 
 
경고:  사용자 프로파일 정보가 적재되지 않았습니다.
 
경고:  사용자 프로파일 정보가 적재되지 않았습니다.
 
 
SYSTEM으로 PUPBLD.SQL 실행이 필요합니다
 
SYSTEM으로 PUPBLD.SQL 실행이 필요합니다
 +
-------------------------------------------------
  
=================================================
 
  
  
616번째 줄: 306번째 줄:
 
* 주요 프로세스중 하나인 smon의 프로세스가 기동중인지 확인.  
 
* 주요 프로세스중 하나인 smon의 프로세스가 기동중인지 확인.  
 
* prod와 orcl모두 올라와 있다면 각각 데이터베이스에 연결된 인스턴스 확인.
 
* prod와 orcl모두 올라와 있다면 각각 데이터베이스에 연결된 인스턴스 확인.
 
=== spfile 생성 ===
 
copy sql
 
[oracle@host ~]$ sqlplus / as sysdba
 
copy sql
 
SQL> create spfile from pfile;
 
 
File created.
 
 
SQL> !ls $ORACLE_HOME/dbs
 
hc_DBUA0.dat  hc_orcl.dat  init.ora  initorcl.ora  initprod.ora  lkORCL  orapworcl  spfileorcl.ora  spfileprod.ora
 
 
 
 
 
pfile을 사용해서 실행할 수 있지만, 편의상 작성한 pfile로 spfile을 생성하고 Database를 실행할 계획입니다. spfile 생성 작업은 DB가 내려가있는 상태에서 만들 수 있고 생성 이후 spfile<ORACLE_SID>.ora 형태의 파일이 만들어진 것을 확인할 수 있습니다.
 
 
 
 
 
 
DB nomount 실행
 
copy sql
 
SQL> startup nomount
 
ORACLE instance started.
 
 
Total System Global Area  417546240 bytes
 
Fixed Size     2213936 bytes
 
Variable Size   134219728 bytes
 
Database Buffers   272629760 bytes
 
Redo Buffers     8482816 bytes
 
Database 생성을 위해 nomount 상태로 DB를 실행합니다. 정상적으로 올라왔다면 생성한 pfile에 문제가 없다는 뜻입니다.
 
 
 
 
 
 
=== DB 생성 ===
 
copy sql
 
[oracle@host ~]$ mkdir  /opt/oracle/app/oradata/prod
 
DB 생성하면서 만들어질 datafile, redologfile들의 경로를 만들어줍니다.
 
 
 
 
copy sql
 
[oracle@host ~]$ sqlplus / as sysdba
 
copy sql
 
CREATE DATABASE prod
 
USER SYS IDENTIFIED BY oracle
 
USER SYSTEM IDENTIFIED BY oracle
 
CONTROLFILE REUSE
 
LOGFILE GROUP 1 ('/opt/oracle/app/oradata/prod/redo01a.log'
 
                ,'/opt/oracle/app/oradata/prod/redo01b.log') SIZE 100M REUSE,
 
        GROUP 2 ('/opt/oracle/app/oradata/prod/redo02a.log'
 
                ,'/opt/oracle/app/oradata/prod/redo02b.log') SIZE 100M REUSE
 
EXTENT MANAGEMENT LOCAL
 
DATAFILE '/opt/oracle/app/oradata/prod/system01.dbf' SIZE 400M REUSE AUTOEXTEND ON
 
SYSAUX
 
DATAFILE '/opt/oracle/app/oradata/prod/sysaux01.dbf' SIZE 200M REUSE AUTOEXTEND ON
 
DEFAULT TEMPORARY TABLESPACE TEMP
 
TEMPFILE '/opt/oracle/app/oradata/prod/temp01.dbf' SIZE 100M REUSE AUTOEXTEND ON
 
UNDO TABLESPACE UNDOTBS1
 
DATAFILE '/opt/oracle/app/oradata/prod/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON
 
CHARACTER SET AL32UTF8
 
NATIONAL CHARACTER SET AL16UTF16;
 
 
Database created.
 
 
 
USER SYS IDENTIFIED ... : SYS 유저 비밀번호 지정
 
 
 
 
USER SYSTEM IDENTIFIED ... : SYSTEM  유저 비밀번호 지정
 
 
 
 
CONTROLFILE :
 
 
REUSE 명령을 사용하기 위해 명시. LOGFILE GROUP 이나 DATAFILE들에서도 REUSE 옵션이 붙어 있습니다. 이 옵션은 만약 해당 파일이 이미 존재한다면 해당 파일 이름 그대로 사용하여 덮어써서 DB를 생성합니다.
 
 
 
 
LOGFILE GROUP : 로그 파일은 최소 2개의 그룹으로 지정해야합니다.
 
 
 
 
EXTENET MANAGEMENT LOCAL :
 
 
LOCAL 방식은 Tablespace에 대한 free space 공간을 datafile 자체에서 bitmap을 이용해서 관리하는 방법입니다. 다른방법으로 Tablespace의 free space 공간에 대한 정보를 data dictionary에서 관리하는 DICTIONARY 방식이 있지만 data dictionary에 대한 경합이 심해지고 성능저하의 원인으로 Oracle 8i부터 LOCAL 방식이 처음 소개되면서 이 방식으로 관리하도록 권장합니다.
 
 
 
 
DATAFILE :
 
 
        지정 없음 : SYSTEM Tablespace
 
 
        SYSAUX : SYSTEM Auxilary(보조)
 
 
        UNDO : 언두 Tablespace 지정
 
 
 
 
TEMPFILE : TEMPORARY Tablespace는 DEFAULT TEMPORARY TABLESPACE를 꼭 지정해줘야합니다.
 
 
 
 
CHARACTER SET, NATIONAL CHARACTER SET : 문자 인코딩 지정
 
 
 
 
 
 
 
 
DB Open 확인
 
copy sql
 
SQL> select instance_name, status from v$instance;
 
 
Instance가 Open 상태까지 올라왔는지 확인합니다.
 
 
 
 
여러 SID 사용 확인
 
환경변수 변경
 
copy sql
 
[oracle@host ~]$ . oraenv
 
ORACLE_SID = [prod] ? orcl
 
The Oracle base for ORACLE_HOME=/opt/oracle/app/product/11.2.0/dbhome_1 is /opt/oracle/app
 
[oracle@host ~]$ sqlplus / as sysdba
 
prod에 붙어서 작업하다가 orcl로 변경해서 작업하기 위해서 oraenv로 환경변수의 정보를 변경하고 로그인해줍니다.
 
 
 
 
 
 
orcl instance startup
 
copy sql
 
SQL> startup
 
 
orcl instance를 기동해줍니다.
 
 
 
 
copy sql
 
SQL> select instance_name, status from v$instance;
 
 
orcl에서도 마찬가지로 instance의 open 상태를 확인합니다.
 
 
 
 
copy sql
 
[oracle@host ~]$ ps -ef | grep smon
 
 
주요 프로세스중 하나인 smon의 프로세스가 기동중인지 확인합니다. prod와 orcl모두 올라와 있다면 각각 데이터베이스에 연결된 인스턴스를 올려준 것을 확인할 수 있습니다.
 
 
 
 
 
 
=== 후속작업 ===
 
데이터베이스의 생성은 완료되었고 이상없이 돌아갑니다. 하지만 수동 생성했을 때 Data Dictionary 조회작업이나, Oracle에서 제공하는 패키지들이 실행되지 않습니다. 이런 문제들을 해결하기 위해 몇 가지 후속작업을 해줘야합니다. 후속작업에 대한 내용은 아래 링크를 통해 진행할 수 있습니다.
 

2020년 9월 18일 (금) 14:13 판

thumb_up 추천메뉴 바로가기


1 오라클 수동설치[편집]

  • 테스트 완료 버전 (11g,12c,..)
  • CREATE DATABASE 명령어를 사용해서 DB 생성(dbca 사용하지 않고)
  • 신규 SID 생성 하여 개별 업무 관리

1.1 OS 환경변수 설정[편집]

  1. ORACLE_SID, ORACLE_HOME 환경변수 설정(Oracle Instance를 기동시 연결할 데이터베이스 정보)
  2. oraenv를 사용하여 다중 DB 접속 환경변수 변경작업
  • 오라클 설치 위치 : /u01/app (사용자별로 다름)
$ . oraenv
ORACLE_SID = [orcl] ? prod
ORACLE_HOME = [/u01/app/oracle] ? /u01/app/oracle/product/11.2.0/dbhome_1

The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle

[oracle@6host ~]$ echo $ORACLE_SID
prod

$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/dbhome_1

1. oratab 파일 수정 oraenv를 사용해서 환경변수 변경작업이 가능하지만, ORACLE_HOME 경로같은 경우는 오타 문제 때문에 /etc/oratab 파일을 열어 변수를 정의하듯 미리 변경할 정보를 저장해두면 더 간편하게 환경변수 수정 가능.

$ vi /etc/oratab
# This file is used by ORACLE utilities.  It is created by root.sh
# and updated by the Database Configuration Assistant when creating
# a database.
# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N
  • orcl는 기존 생성한 SID
  • ORACLE_SID=prod (추가 생성할 데이터베이스)
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N
prod:/u01/app/oracle/product/11.2.0/dbhome_1:N

oratab 파일 수정 후 oraenv 명령으로 prod로 변경.

$ . oraenv 
ORACLE_SID = [prod] ? prod
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle

ORACLE_SID 값만 입력하면 ORACLE_HOME에 대한 정보를 자동 인식하여 변경 완료.
 

=== 오라클 PFILE/SPFILE 생성 ===

1. pfile 생성
* 파라미터 파일에 DB명,컨트롤파일,SGA_TARGET,... 추가

<source lang=shell>
$ cd $ORACLE_HOME/dbs

[oracle@host dbs]$ ls
hc_DBUA0.dat  hc_orcl.dat  init.ora  initorcl.ora  lkORCL  orapworcl  spfileorcl.ora
[oracle@host dbs]$ vi initprod.ora

db_name=prod
control_files='/u01/app/oracle/oradata/prod/control01.ctl'
sga_target=400M
remote_login_passwordfile='EXCLUSIVE'
  • Database Create는 nomount 상태에서 가능.
  • 파라미터 파일을 읽을 수 있는 상태까지 Database를 올리는 작업이 필요하여 pfile을 직접 생성하여 최소로 필요한 내용 작성.
  • pfile은 $ORACLE_HOME/dbs 경로에 init<ORACLE_SID>.ora 형태로 파일이 존재해야함.
  • 기본적으로 Parameter file을 열기 위해서는 db_name, control_files, shared_pool_size 그리고 db_cache_size 이 4개지 파라미터가 정의되어 있어야함.
    (하지만 sga_target 파라미터를 정의한다면 sga 메모리를 자동으로 할당하기 때문에 shared_pool_size와 db_cache_size의 정보를 제외.
  • remote_login_passwordfile은 Password fie이 하나의 데이터베이스에서 사용할 수 있도록 설정.(필수요소는 아님)


2. spfile 생성

$ sqlplus / as sysdba

SQL> create spfile from pfile;

File created.

SQL> !ls $ORACLE_HOME/dbs
hc_DBUA0.dat  hc_orcl.dat  init.ora  initorcl.ora  initprod.ora  lkORCL  orapworcl  spfileorcl.ora  spfileprod.ora

pfile을 사용해서 실행할 수 있지만, 편의상 작성한 pfile로 spfile을 생성하고 Database를 실행.

spfile 생성 작업은 DB가 내려가있는 상태에서 만들 수 있고 생성 이후 spfile<ORACLE_SID>.ora 형태의 파일이 생성된것 확인 필요.


1.2 DB nomount 실행[편집]

SQL> startup nomount
ORACLE instance started.

Total System Global Area  417546240 bytes
Fixed Size		    2213936 bytes
Variable Size		  134219728 bytes
Database Buffers	  272629760 bytes
Redo Buffers		    8482816 bytes
  • Database 생성을 위해 nomount 상태로 DB 실행.
 (정상적으로 올라왔다면 생성한 pfile에 문제 없다는 뜻)


1.3 DB 생성[편집]

1. 오라클 데이터 저장 경로 생성 (T/S,REDO로그,등.. )

$ mkdir  /u01/app/oracle/oradata/prod

DB 생성하면서 만들어질 datafile, redologfile들의 경로 생성

$ sqlplus / as sysdba

CREATE DATABASE prod
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
CONTROLFILE REUSE
LOGFILE GROUP 1 ( '/u01/app/oracle/oradata/prod/redo01a.log'
                , '/u01/app/oracle/oradata/prod/redo01b.log' ) SIZE 100M REUSE,
        GROUP 2 ( '/u01/app/oracle/oradata/prod/redo02a.log'
                , '/u01/app/oracle/oradata/prod/redo02b.log' ) SIZE 100M REUSE
       DATAFILE '/u01/app/oracle/oradata/prod/system01.dbf' SIZE 400M REUSE AUTOEXTEND EXTENT MANAGEMENT LOCAL
             ON SYSAUX DATAFILE '/u01/app/oracle/oradata/prod/sysaux01.dbf' SIZE 200M REUSE AUTOEXTEND 
             ON DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u01/app/oracle/oradata/prod/temp01.dbf' SIZE 100M REUSE AUTOEXTEND 
             ON UNDO TABLESPACE UNDOTBS1 DATAFILE '/u01/app/oracle/oradata/prod/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND \
             ON CHARACTER SET KO16MSWIN949;

-- CHARACTER SET AL32UTF8
-- NATIONAL CHARACTER SET AL16UTF16;

Database created.
  • USER SYS IDENTIFIED ... : SYS 유저 비밀번호 지정
  • USER SYSTEM IDENTIFIED ... : SYSTEM 유저 비밀번호 지정
  • CONTROLFILE :REUSE 명령을 사용하기 위해 명시. LOGFILE GROUP 이나 DATAFILE들에서도 REUSE(파일이 이미 존재한다면 해당 파일 이름 그대로 사용하여 덮어써서 DB를 생성) 옵션
  • LOGFILE GROUP : 로그 파일은 최소 2개의 그룹으로 지정 해야함 .
  • EXTENET MANAGEMENT LOCAL : LOCAL 방식은 Tablespace에 대한 free space 공간을 datafile 자체에서 bitmap을 이용해서 관리하는 방법.
  • 다른방법으로 Tablespace의 free space 공간에 대한 정보를 data dictionary에서 관리하는 DICTIONARY 방식이 있지만
  • data dictionary에 대한 경합이 발생하고 성능저하의 원인으로 Oracle 8i부터 LOCAL 방식이 처음 소개되면서 이 방식으로 관리하도록 권장.


리두로그 3개 그룹으로 추가 예)

CREATE DATABASE "prod"
        LOGFILE
	    GROUP 1 ('/u01/app/oracle/oradata/prod/redo01.log') SIZE 20M,
	    GROUP 2 ('/u01/app/oracle/oradata/prod/redo02.log') SIZE 20M,
	    GROUP 3 ('/u01/app/oracle/oradata/prod/redo03.log') SIZE 20M
	   DATAFILE '/u01/app/oracle/oradata/prod/system01.dbf' SIZE 700M  EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE '/u01/app/oracle/oradata/prod/sysaux01.dbf' SIZE 500M
	    DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u01/app/oracle/oradata/prod/temp01.dbf' SIZE 2000M
           UNDO TABLESPACE "UNDOTBS1" DATAFILE '/u01/app/oracle/oradata/prod/undotbs01.dbf' SIZE 300M AUTOEXTEND ON NEXT  100M MAXSIZE 1000M
	  CHARACTER SET KO16MSWIN949;


1.4 DB Open 확인[편집]

1. DB 오픈 상태 확인

SQL> select instance_name, status from v$instance; 


INSTANCE_NAME    STATUS                                                                                                                                     
---------------- ------------                                                                                                                               
prod             OPEN

Instance가 Open 상태인지 확인


1.5 오라클 설치 후 후속작업[편집]

  • 하지만 수동 생성했을 때 Data Dictionary 조회작업이나, Oracle에서 제공하는 패키지들이 실행되지 않음.
  • 이런 문제들을 해결하기 위해 몇 가지 후속작업 진행 해야함.


1. 딕셔너리,패키지(catalog.sql, catproc.sql) 실행

cd $ORACLE_HOME/rdbms/admin/

sqlplus "/as sysdba"

SQL> @catalog.sql
=>데이터 딕셔너리 뷰와 다이나믹 퍼포먼스 뷰를 생성

SQL> @catproc.sql

=>PL/SQL을 사용하는데 필요한 패키지 및 프로시져를 생성


2. invalid 상태인 오브젝트가 있는지 확인

sql> select object_name from dba_objects where status='INVALID' and owner='SYS';

3. password 파일 생성

cd $ORACLE_HOME/dbs

orapwd file=orapwnewdb password=oracle


4. tnsnames.ora, listener.ora 파일 수정

cd $ORACLE_HOME/network/admin

vi tnsnames.ora

vi listener.ora


※ PUPBLD.SQL

유저 생성후 로그인 할때 아래 메세지 발생시.


PRODUCT_USER_PROFILE를 액세스하는데 오류입니다 경고: 사용자 프로파일 정보가 적재되지 않았습니다. SYSTEM으로 PUPBLD.SQL 실행이 필요합니다



cd $ORACLE_HOME/sqlplus/admin

sqlplus system/******

SQL> @pupbld

=>pupbld.sql 스크립트는 Product User Profile 테이블 및 관련 프로시져를 생성.


1.6 멀티 SID 사용 확인[편집]

1.환경변수 변경

$ . oraenv 
ORACLE_SID = [prod] ? orcl

The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle
$ sqlplus / as sysdba

2.prod에 붙어서 작업하다가 orcl로 변경해서 작업하기 위해서 oraenv로 환경변수의 정보 변경 후 로그인.

1) orcl instance startup

SQL> startup

2) orcl instance 기동

SQL> select instance_name, status from v$instance;

orcl에서도 마찬가지로 instance의 open 상태를 확인.

$ ps -ef | grep smon
  • 주요 프로세스중 하나인 smon의 프로세스가 기동중인지 확인.
  • prod와 orcl모두 올라와 있다면 각각 데이터베이스에 연결된 인스턴스 확인.