Oracle 10g 싱글 silent 설치, 패치 및 DB 생성

기본 10g 설치의 리눅스 세팅에서 추가 해줘야하는 사항


# vi /etc/oraInst.loc

inventory_loc=/home/oracle/oraInventory

inst_group=dba


# chown oracle.dba /etc/oraInst.loc


원격 접속으로 설치 하기 위해서


# vi /home/oracle/.bash_profile


export DISPLAY=:0.0



rsp 파일 설정하기


# vi /home/oracle/database/response/enterprise.rsp


UNIX_GROUP_NAME="dba"

FROM_LOCATION="../stage/products.xml"

ORACLE_HOME="/home/oracle/product/10g"

ORACLE_HOME_NAME="OraHome"

n_configurationOption=3


Silent 설치


$ cd /home/oracle/database/

$ ./runInstaller -silent -force -waitforcompletion  -responseFile /home/oracle/database/response/enterprise.rsp




root 권한으로 아래 명령어를 실행시켜 줍니다.

# /home/oracle/product/10g/root.sh



설치가 완료 되었습니다.



Silent 패치하기


$ unzip p8202632_10205_LINUX.zip

$ cd Disk1


rsp 파일 설정 하기


$ vi /home/oracle/Disk1/response/patchset.rsp


UNIX_GROUP_NAME="dba" 

FROM_LOCATION="../stage/products.xml"

ORACLE_HOME="/home/oracle/product/10g" 

ORACLE_HOME_NAME="OraHome" 

DECLINE_SECURITY_UPDATES=true


$ ./runInstaller -silent -force -waitforcompletion -responseFile /home/oracle/Disk1/response/patchset.rsp




root 권한으로 아래 명령어를 실행시켜 줍니다.

#  /home/oracle/product/10g/root.sh




패치 완료



Silent DB 생성


rsp 설정하기


$ vi /home/oracle/database/response/dbca.rsp


GDBNAME = "testdb"

SID = "testdb" 

CHARACTERSET = "KO16MSWIN949"

NATIONALCHARACTERSET= "UTF8"


$ dbca -silent -templateName General_Purpose.dbc -responseFile /home/oracle/database/response/dbca.rsp


$ sqlplus / as sysdba

SQL > select status from v$instance;



DB가 생성 되었습니다.

Oracle 10g 싱글 OUI 설치, 패치 및 DB 생성

~]$ cd database

$ ./runInstaller










터미널을 띄워서 root 계정으로 로그인한후 1,2번 순서대로 실행시켜 주면 됩니다.

그리고 확인



오라클 설치가 완료 되었습니다.


오라클 패치하기


~]$ unzip p8202632_10205_LINUX.zip

~]$ cd Disk1

$ ./runInstaller








터미널을 띄워 root 계정을 로그인 한 후 실행. 그 후 확인.




DB생성


$ dbca












샘플 스키마는 딱히 설치 하지 않아도 되지만, 저는 sql 연습용으로 설치한거라 스키마를 설치 했습니다.



문자 집합 선택







$ sqlplus /nolog

SQL>

SQL> conn /as sysdba

SQL> select status from v$instance;


접속해서 설치가 잘되었는 여러 명령어를 이용해서 확인해줍니다.

Oracle 10g 싱글 설치 - (공통) RHEL4 리눅스 세팅

기본적으로 리눅스 설치는 RHEL4의 오라클 설치와 같습니다.


환경 변수 설정


# vi /etc/sysctl.conf


kernel.shmall = 2097152

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default = 4194304

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 262144


# /sbin/sysctl -p


# vi /etc/security/limits.conf


oracle soft    nproc 2047

oracle hard   nproc 16384

oracle soft    nofile        1024

oracle hard   nofile  65536


# vi /etc/pam.d/login


session required pam_limits.so


# groupadd - g dba

# useradd -g dba oracle

# passwd oracle


#vi /home/oracle/.bash_profile


export EDITOR=vi

export LD_ASSUME_KERNEL=2.4.19

export ORACLE_BASE=/home/oracle

export ORACLE_HOME=$ORACLE_BASE/product/10g

export ORACLE_SID=testdb

export LANG=ko_KR.eucKR

export ORACLE_TERM=xterm

export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949

export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib

export PATH=$PATH:$ORACLE_HOME/bin:/$ORA_CRS_HOME/bin

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib



오라클 설치 전 설치 파일 목록


binutils-2.15.92.0.2-13.EL4

compat-db-4.1.25-9

compat-libstdc++-296-2.96-132.7.2

control-center-2.8.0-12

gcc-3.4.3-22.1.EL4 gcc-c++-3.4.3-22.1.EL44

glibc-2.3.4-2.9 glibc-common-2.3.4-2.9

gnome-libs-1.4.1.2.90-44.1

libstdc++-3.4.3-22.1

libstdc++-devel-3.4.3-22.1

make-3.80-5

pdksh-5.2.14-30

sysstat-5.0.5-1

xscreensaver-4.18-5.rhel4.2

setarch-1.6-1



Patch


libaio-devel-0.3.105-2.i386.rpm

compat-libcwait-2.1-1.i386.rpm

compat-oracle-rhel4-1.0-5.i386.rpm



Oracle 10g RAC (rawdevice) 설치 - 5 TEST

Oracle Database 상태 확인


$ crs_stop -f ora.rac.db

$ crs_start -f ora.rac.db


$ crs_stat -t


Name           Type           Target    State     Host

------------------------------------------------------------

ora.rac.db     application    ONLINE    ONLINE    rac1

ora....vice.cs application    OFFLINE   OFFLINE

ora....ac1.srv application    OFFLINE   OFFLINE

ora....c1.inst application    ONLINE    ONLINE    rac1

ora....c2.inst application    ONLINE    ONLINE    rac2

ora....C1.lsnr application    ONLINE    ONLINE    rac1

ora.rac1.gsd   application    ONLINE    ONLINE    rac1

ora.rac1.ons   application    ONLINE    ONLINE    rac1

ora.rac1.vip   application    ONLINE    ONLINE    rac1

ora....C2.lsnr application    ONLINE    ONLINE    rac2

ora.rac2.gsd   application    ONLINE    ONLINE    rac2

ora.rac2.ons   application    ONLINE    ONLINE    rac2

ora.rac2.vip   application    ONLINE    ONLINE    rac2


$ lsnrctl status


LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 10-MAR-2012 19:01:59


Copyright (c) 1991, 2010, Oracle.  All rights reserved.


Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

------------------------

Alias                     LISTENER_RAC1

Version                   TNSLSNR for Linux: Version 10.2.0.5.0 - Production

Start Date                10-MAR-2012 17:38:19

Uptime                    0 days 1 hr. 23 min. 40 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /home/oracle/product/10g/db/network/admin/listener.ora

Listener Log File         /home/oracle/product/10g/db/network/log/listener_rac1.log

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.126.32)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.126.132)(PORT=1521)))

Services Summary...

Service "PLSExtProc" has 1 instance(s).

  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...

Service "rac" has 2 instance(s).

  Instance "rac1", status READY, has 2 handler(s) for this service...

  Instance "rac2", status READY, has 1 handler(s) for this service...

Service "rac_XPT" has 2 instance(s).

  Instance "rac1", status READY, has 2 handler(s) for this service...

  Instance "rac2", status READY, has 1 handler(s) for this service...

The command completed successfully


$ sqlplus / as sysdba


SQL> select status from v$instance;

 

STATUS

------------

OPEN

 

SQL> select name from v$controlfile;

 

NAME

--------------------------------------------

/dev/raw/raw12

/dev/raw/raw13

/dev/raw/raw14

 

 SQL> select a.tablespace_name, b.file_id, b.file_name, b.bytes/1024/1024 mb

  2  from dba_tablespaces a, dba_data_files b

  3  where a.tablespace_name=b.tablespace_name;

 

TABLESPACE_NAME    FILE_ID FILE_NAME                        MB

--------------- ---------- ------------------------------ ----

SYSTEM                   1 /dev/raw/raw6                              599

UNDOTBS1                2 /dev/raw/raw8                             199

SYSAUX                   3 /dev/raw/raw7                              299

UNDOTBS2                4 /dev/raw/raw9                             199

USERS                     5 /dev/raw/raw10                             99

 

SQL> select group#, member from v$logfile;

 

    GROUP# MEMBER

---------- --------------------

         1 /dev/raw/raw15

         1 /dev/raw/raw16

         2 /dev/raw/raw17

         2 /dev/raw/raw18

         3 /dev/raw/raw19

         3 /dev/raw/raw20

         4 /dev/raw/raw21

         4 /dev/raw/raw22

 

8 rows selected.



RAC Fail-Over 테스트


OLTP 서비스 시작


$ srvctl start service -d RAC -s oltp_service


$ srvctl status service -d RAC -s oltp_service

oltp_service 서비스가 rac1 인스턴스에서 실행 중임


참고 : 

OLTP 서비스는 DBCA로 DB를 생성 시 같이 생성하였습니다.


수동으로 생성 시 아래와 같이 실행합니다.


$ srvctl add service -d RAC -s oltp_service -r RAC1 -a RAC2

$ srvctl start service -d RAC -s oltp_service



CTF 작동여부 확인


- Node1에서 확인


SQL> show parameter service

 

NAME                                 TYPE                   VALUE

------------------------------------ ---------------------- ------------------------------

service_names                        string                 oltp_service


- Node2에서 확인


SQL> show parameter service

 

NAME                                 TYPE                   VALUE

------------------------------------ ---------------------- ------------------------------

service_names                        string                 rac


- Node1에서 작업


SQL> shutdown abort

ORACLE instance shut down.


- Node2에서 확인


SQL> show parameter service

 

NAME                                 TYPE                   VALUE

------------------------------------ ---------------------- ------------------------------

service_names                        string                 oltp_service



Oracle 10g RAC (rawdevice) 설치 - 4 DB 생성

OUI에서 DB 생성


$ dbca










원시 장치가 raw device 입니다.






위 화면에서 좌측 하단의 추가 버튼을 눌러줍니다.



oltp_service 입력



rac1 "선호", rac2 "사용가능"에 체크후 

하단에 "기본"에 체크



문자 집합은 KO16MSWIN949 에 맞춰 줍니다.



매개 변수 탭으로 가서, SPFILE에 체크하고, Raw deivce 테이블을 참고하여 맞는 rawdevice 번호를 넣어 줍니다.



제어파일은 control01, 02, 03 번 입니다. 역시 rawdevice 설정 했던 표를 참고 하여 맞는 번호와 경로를 지정해줍니다.



파란 부분을 더블 클릭 하면, 아래와 같은 창이 나옵니다.



역시 sysaux를 지정한 rawdevice 번호를 지정해줍니다.

용량은 lvcreate로 지정했던 요량 보다 1mb 작게 설정을 해주셔야 합니다. rawdevice는 1mb의 공간을 이용해 HDD의 정보를 담고 있기 때문입니다. 










redo01_a, b를 지정해줍니다.

두부분을 모두 사용하기 때문에 두개의 세팅한 디바이스를 설정해 줍니다.

1,2,3,4 모두 똑같이 설정해줍니다. 파일크기는 50mb로 세팅을 했었으니 49mb로 잡아 줍니다.







DB가 생성 되었습니다


$ crs_stat -t 


DB와 oltp를 확인합니다. 



Oracle 10g RAC (rawdevice) 설치 - 3 데이터베이스 엔진 설치

DB 엔진 설치


$ ~/pkg/database

$ ./runInstaller





경로는 $ORACLE_HOME의 경로를 지정해 줍니다.



rac2 체크




엔진만 설치 합니다.




각 노드에서 Node1, 2 순으로 실행해 줍니다.




오라클 엔진 패치


$ ~/pkg/Disk1

$ ./runInstaller




경로는 $ORACLE_HOME





Node1, 2 순서대로 실행, 엔터 → y → y → y 입력



엔진 설치 및 패치가 끝났습니다.



리스너 구성


$ netca












완료 버튼을 누르면 리스너 구성이 완료 됩니다.



설정 확인


$ crs_stat -t



Oracle 10g RAC (rawdevice) 설치 - 2 클러스터웨어 설치

Node1에 오라클 계정으로 로그인 한후 


$ mkdir pkg


pkg 폴더를 만들고, WinSCP혹은 VMware 파일 공유를 통해 설치 소프트웨어를 복사합니다. 

그리고 압축을 해제


$ unzip 10201_clusterware_linux32.zip

  클러스터웨어 압축풀기


$ unzip 10201_database_linux32.zip

  오라클 엔진 압축풀기


$ unzip p8202632_10205_LINUX.zip

  패치셋 압축풀기


압축을 다 풀고 나면 간혹, 설치 후 패치 중에 사용 공간이 부족하다고 나오기도 하니 zip 파일들은 삭제 해줘도 괜찮습니다.



관련 Library 설치


Node1에서 작업


$ scp ~/pkg/clusterware/rpm/cvuqdisk-1.0.1-1.rpm rac2:~/

관련 RPM rac2로 복사


$ su -

루트권한으로 변경


# export CVUQDISK_GRP=dba

# rpm -Uvh /home/oracle/pkg/clusterware/rpm/cvuqdisk-1.0.1-1.rpm



Node2에서 작업

루트권한으로 로그인


# export CVUQDISK_GRP=dba

# rpm -Uvh /home/oracle/cvuqdisk-1.0.1-1.rpm



설치전 환경 테스트


Node1에서 작업

오라클 계정으로 로그인


$ cd /home/oracle/pkg/clusterware/cluvfy

$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose

$ ./runcluvfy.sh stage -post hwos -n rac1,rac2 -verbose


참고 : 위 환경 테스트에서 오류가 발생하므로, equivalence 정도만 성공하는지 확인하도록 합니다. 반드시 실행 시킬 필요는 없습니다.



클러스터웨어 설치


$ cd ~/pkg/clusterware

$ ./runInstaller





경로는 $ORA_CRS_HOME 경로로 지정 해줍니다.




추가 버튼을 누르고



rac2 를 추가 해줍니다.



eth0을 편집하여



공용으로 바꿔줍니다.



ocr1, ocr2 를 지정해주고



vote1,2,3 번을 지정해줍니다.




Putty같은 터미널을 띄워서, 각각의 노드에 root 계정으로 로그인해서 위 명령을 순서대로 실행 시켜줍니다.


1. rac1 - /home/oracle/oracInventory/orainstRoot.sh

2. rac2 - /home/oracle/oracInventory/orainstRoot.sh

3. rac1 - /home/oracle/product/10g/crs/root.sh

4. rac2 - /home/oracle/product/10g/crs/root.sh


순으로 실행. 그리고 확인 버튼을 누릅니다.


※ vipca 설정을 해줘야 하는데 아래와 그림과 같이 rac1에서 클러스터웨어 설치 중에 터미널을 열고 vipca를 설정할 경우, 

vipca 설정 종료 후 클러스터웨어가 설치 도중 강제 종료 되는 경우가 발생합니다. 그럼 클러스터 웨어를 지우고 다시 깔아야 하는데 매우 복잡해집니다.



그래서 root.sh 설치를 하고 바로 확인을 누르면 다음과 같은 화면으로 넘어갑니다.



체크 항목중 세번째 항목이 실패 했다고 나오는데,

이때 rac2에서 root 권한으로 vipca를 설정해 주면됩니다.


터미널을 열고 


# vipca


만약 rac2에서 vipca 가 실행이 되지 않으면,


rac2의 터미널을 열고 vi 에디터로 /home/oracle/product/10g/crs/bin/vipca 파일을 수정합니다.


# vi /home/oracle/product/10g/crs/bin/vipca


124 unset LD_ASSUME_KERNEL

125 #End workaround

※ 124번 라인에 unset LD_ASSUME_KERNEL 추가 (Linux OS관련 파라미터 설정 부분에서 #End workaround 바로 전) 


저장 후 터미널에서


# cd /home/oracle/product/10g/crs/bin

# ./oifcfg iflist                                                                                        ← 자신의 Public IP와 Private IP 확인

# ./oifcfg setif -global eth0/192.168.229.0:public                                         ← 자신의 Public IP 대역을 넣어 주셔야 합니다.

# ./oifcfg setif -global bond0/192.168.30.0:cluster_interconnect                    ← 자신의 Private IP 대역을 넣어 주셔야 합니다.

# ./oifcfg getif

# ./vipca


이렇게 하면 vipca 가 실행이 됩니다.







그리고 rac1으로 돌아와서, 확인을 누른 후, 재시도 버튼을 눌러주면, 설치가 완료 됩니다.




클러스터웨어 패치하기


$ cd ~/pkg/Disk1/

$ ./runInstaller




경로는 역시 $ORA_CRS_HOME 입니다.






터미널을 띄워서, root 권한으로


Node1]# /home/oracle/product/10g/crs/bin/crsctl stop crs

Node1]# /home/oracle/product/10g/crs/install/root102.sh

Node2]# /home/oracle/product/10g/crs/bin/crsctl stop crs

Node2]# /home/oracle/product/10g/crs/install/root102.sh


순서 대로 실행 해주면 됩니다. 그리고 나서 종료를 누르면 패치 끝



설치 확인


$ crs_stat -t



Oracle 10g RAC (ASM) 설치 - 7 TEST

ASM 구동 TEST


$ crs_stop -f ora.rac.db

$ crs_start -f ora.rac.db


$ crs_stat -t


Name           Type           Target    State     Host

------------------------------------------------------------

ora.rac.db     application    ONLINE    ONLINE    rac1

ora....c1.inst application    ONLINE    ONLINE    rac1

ora....c2.inst application    ONLINE    ONLINE    rac2

ora....SM1.asm application    ONLINE    ONLINE    rac1

ora....C1.lsnr application    ONLINE    ONLINE    rac1

ora.rac1.gsd   application    ONLINE    ONLINE    rac1

ora.rac1.ons   application    ONLINE    ONLINE    rac1

ora.rac1.vip   application    ONLINE    ONLINE    rac1

ora....SM2.asm application    ONLINE    ONLINE    rac2

ora....C2.lsnr application    ONLINE    ONLINE    rac2

ora.rac2.gsd   application    ONLINE    ONLINE    rac2

ora.rac2.ons   application    ONLINE    ONLINE    rac2

ora.rac2.vip   application    ONLINE    ONLINE    rac2


$ lsnrctl status


LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 04-MAR-2012 17:46:56


Copyright (c) 1991, 2010, Oracle.  All rights reserved.


Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

------------------------

Alias                     LISTENER_RAC1

Version                   TNSLSNR for Linux: Version 10.2.0.5.0 - Production

Start Date                04-MAR-2012 16:22:24

Uptime                    0 days 1 hr. 24 min. 31 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /home/oracle/product/10g/db/network/admin/listener.ora

Listener Log File         /home/oracle/product/10g/db/network/log/listener_rac1.log

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.126.31)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.126.131)(PORT=1521)))

Services Summary...

Service "+ASM" has 1 instance(s).

  Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...

Service "+ASM_XPT" has 1 instance(s).

  Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...

Service "PLSExtProc" has 1 instance(s).

  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...

Service "rac" has 2 instance(s).

  Instance "rac1", status READY, has 2 handler(s) for this service...

  Instance "rac2", status READY, has 1 handler(s) for this service...

Service "rac_XPT" has 2 instance(s).

  Instance "rac1", status READY, has 2 handler(s) for this service...

  Instance "rac2", status READY, has 1 handler(s) for this service...

The command completed successfully


$ sqlplus / as sysdba


SQL> select status from v$instance;

 

STATUS

------------------------

OPEN

 

 

SQL> select name from v$controlfile;

 

NAME

--------------------------------------------------

+DATA/rac/controlfile/current.256.777056877

+FRA/rac/controlfile/current.256.777056881

 

 

SQL> select name from v$datafile;

 

NAME

--------------------------------------------------

+DATA/rac/datafile/system.259.777056907

+DATA/rac/datafile/undotbs1.260.777056927

+DATA/rac/datafile/sysaux.261.777056937

+DATA/rac/datafile/undotbs2.263.777056953

+DATA/rac/datafile/users.264.777056963

 

 

SQL> select group#, member from v$logfile;

 

    GROUP# MEMBER

---------- --------------------------------------------------

         1 +DATA/rac/onlinelog/group_1.257.777056883

         1 +FRA/rac/onlinelog/group_1.257.777056889

         2 +DATA/rac/onlinelog/group_2.258.777056893

         2 +FRA/rac/onlinelog/group_2.258.777056901

         3 +DATA/rac/onlinelog/group_3.265.777057803

         3 +FRA/rac/onlinelog/group_3.259.777057809

         4 +DATA/rac/onlinelog/group_4.266.777057809

         4 +FRA/rac/onlinelog/group_4.260.777057815



RAC Fail-Over 테스트


 - OLTP 서비스 생성


$ srvctl add service -d RAC -s oltp_service -r RAC1 -a RAC2


$ srvctl start service -d RAC -s oltp_service


$ srvctl status service -d RAC -s oltp_service

  oltp_service 서비스가 rac1 인스턴스에서 실행 중



CTF 작동여부 확인


node1 에서 실행

SQL> show parameter service


node2 에서 확인

SQL> show parameter service


node1 에서 작업

SQL> shutdown abort


node2 에서 확인

SQL> show parameter service



※ CTF vs TAF


  - 2 가지 형태 : CTF(Connection Time Failover), TAF(Transparent Application Failover)

  - Oracle8i Parallel Server 에서부터 제공.

  - TAF는 CTF의 부가적인 기능.


  1. CTF(Connection Time Failover)

    - 말그대로 컨넥션시 Fail over 한다.

    - 기존에 접속되어 있던 application 은 리부팅을 해야한다.

    - DB 장애시 DB client 는 ORA-3113/3114 에러를 만나게 되며, 재접속을 해야 Failover가 됨.

    - Tuxedo와 연관성은 Tuxedo server(XA)와 TMS를 재부팅해야 한다. 그러나 xa_start 이후에 RMFAIL 을 받게되면, Tuxedo server(XA) 와 TMS는 RM 에 Reconnect 하게 되어 있다.


  2. TAF(Transparent Application Failover)

    - CTF 의 단점을 보완하여 DB client 트랜잭션 처리중에 재부팅 필요없이 세션정보를 유지할수있음.

    - Failover_mode

     * Type

       - DEFAULT : non - TAF

       - SESSION : fetch 중 DB 장애시 해당 fetch Fail

       - SELECT : fetch 중 DB 장애시 해당 fetch 복원


        * method :

       - BASIC : On-demand, 장애후 available 한 DB instance 로 접속.

       - PRECONNECT : fail-over 할 instance 지정, Load balancing 불가.


출처 : http://forusone.tistory.com/entry/Oracle-Real-Application-Clusters-CTFTAF



Oracle 10g RAC (ASM) 설치 - 6 DB 구성

OUI 에서 RAC ASM DB 구성


# dbca





모두 선택



사용자 정의 데이터베이스



각 노드의 접두어인 rac



체크 해제




ASM 선택



새로 만들기 버튼을 누르면 창이 하나 뜹니다.



FRA 로 이름을 지정해주시고, 중복은 "외부" 에 체크

raw8번을 체크해줍니다. 그리고 확인



DATA 만 선택하고 다음



플래시 복구 영영 지정을 체크 하고, 찾아보기를 눌러 FRA를 지정해 줍니다. 찾아보기를 누르면 FRA의 사용 가능한 공간을 확인 할수 있습니다.

사용 가능한 공간 5021을 넣어주고 다음으로 넘어갑니다.



모두 체크 해제

표준 데이터베이스 구성 요소 버튼을 누르면 아래와 같이 뜨는데 



역시 모두 체크 해제




문자 집합 탭을 선택합니다.



문자 집합 목록에서 선택

KO16MSWIN949 - MS Windows 코드페이지949 한국어 를 선택해줍니다.









DB 구성에 성공 했습니다.

Oracle 10g RAC (ASM) 설치 - 3 클러스터웨어 설치

클러스터웨어 란?


외부에서 DB로 접속이 이루어질때, RAC 두 장비 중에 사용자가 어느쪽으로 접속하게 할지 교통정리를 해주는 프로그램입니다.

한쪽 장비에 접속이 치우쳐져서 과부화가 일어나지 않게 자동으로 분할해서 양쪽의 트래픽을 적절히 유지하는 시스템이죠.

RAC 구성에서는 클러스터 웨어가 기본적으로 설치 되어야 합니다.



Node1 으로 접속을 합니다.


$ mkdir pkg


WinSCP 또는 VMware의 폴더 공유 기능등을 이용해서, ~/pkg 폴더 안에 oracle 계정의 권한으로 파일을 설치 복사합니다.

그리고 압축을 풀어줍니다.


$ unzip /mnt/hgfs/oracle/10201_clusterware_linux32.zip -d ~/pkg/ (클러스터웨어)


$ unzip /mnt/hgfs/oracle/10201_database_linux32.zip -d ~/pkg/ (데이터베이스)


$ unzip /mnt/hgfs/oracle/p8202632_10205_LINUX.zip -d ~/pkg/ (Patchset)


그리고 클러스터웨어가 Node1에서 설치 했을 때, 양쪽에서 모두 설치 가능하게 관련 라이브러리를 설치 해줍니다.


Library 설치


Node1에서 작업


$ scp ~/pkg/clusterware/rpm/cvuqdisk-1.0.1-1.rpm rac2:~/  

 관련 RPM rac2로 복사


$ su -

 루트 권한으로 변경


# export CVUQDISK_GRP=dba

# rpm -Uvh /home/oracle/pkg/clusterware/rpm/cvuqdisk-1.0.1-1.rpm


Node2에서 작업


$ su -

 루트 권한으로 로그인


# export CVUQDISK_GRP=dba

# rpm -Uvh /home/oracle/cvuqdisk-1.0.1-1.rpm


설치전 환경 테스트


노드 1에서 작업


오라클 계정으로 로그인


$ cd /home/oracle/pkg/clusterware/cluvfy


$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose


$ ./runcluvfy.sh stage -post hwos -n rac1,rac2 -verbose


위 환경 테스트에서 오류가 발생하므로, equivalence 정도만 성공하는지 확인, 반드시 실행시킬 필요는 없습니다.


그럼 본격적으로 클러스터웨어를 설치하도록 합니다.

oracle 계정으로 로그인 한뒤에


# cd pkg/clusterware

# ./runInstaller





경로명을 /home/oracle/product/10g/db 에서 /home/oracle/product/10g/crs로 변경해줍니다.

/home/oracle/product/10g/crs의 경로는 실질적으로 $ORA_CRS_HOME의 경로 입니다.



물리적 메모리 요구사항에서 에러가 나는 이유는 VM웨어에서 RAM 메모리를 700mb 밖에 설정해 주지 않았기 때문입니다.

1024이상으로 설정하면 에러가 나지 않습니다.

에러가 발생해도 체크하고 넘어가시면 됩니다.



추가 버튼을 누르고



rac2 를 추가 해줍니다.




eth0 번을 편집하여



공용으로 바꿔 줍니다.



rawdevice ocr1,2 번을 지정해준후



vote1,2,3 번을 지정해줍니다.




설치 중간에 이런 화면이 나오는데, 

1번 node1, node2, 

2번 node1, node2 


순으로 번갈아가면서 실행해줍니다.




root.sh 실행후 rac1과 rac2의 화면이 다릅니다.

그러나 문제는 없으니 넘어가고, 확인을 누르기전에 


rac1 에서 root 권한으로 로그인 해서


# vipca


를 실행 해줍니다.








종료가 되면 vipca 는 자동 종료가 되고, 

root.sh를 실행하라고 했던 창에서 확인을 누르면 다음 단계로 넘어갑니다.




클러스터웨어의 설치가 끝났습니다.


클러스터웨어의 패치


$ cd ~/pkg/Disk1/

$ ./runInstaller








node1 a,b 실행 후 node2 a,b 실행을 하면 패치가 종료 됩니다.


Oracle 10g RAC (ASM) 설치 - 2 노드 구성하기

Node 2 구성 실습을 위해서 rac1파일을 rac2 폴더에 복사 해줍니다.

rac1 폴더 안의 rac1.vmdk , rac1.vmx 이 두가지 파일만 복사해 주면 됩니다.




Open a VM 를 클릭해서 rac2를 불러오기 합니다.


 

Edit virtual machine setting을 열고 옵션에서 rac1 이라고 되어 있는 이름을 rac2로 변경해 줍니다.

그리고 OK 버튼을 누르고 ▶ 를 눌러 rac2를 구동 시켜주면 아래와 같은 창이 뜹니다.



복사 한 것이니 I copied it 버튼을 누르고 진행



그러면 하드웨어 검색화면이 나옵니다.



랜카드 세팅을 바꿔주는것인데, 처음에 나오는 두개의 랜카드는 설정을 삭제 해주고, 그 다음에 나오는 랜카드 두개는 설정해줍니다.



여기서 설정해주는 랜카드 두개가 어떤것이 eth0 인지 eth1 인지 알수가 없으니, 그냥 DHCP 설정으로 넘어가 줍니다.



부팅이 끝나고 root 계정으로 접속해서 네트워크 설정을 해줍니다.

터미널에서


# neat  


명령으로 네트워크 설정 창을 띄우고 ip 설정을 해줍니다. /etc/hosts 파일에 넣어 두었던 rac2, rac2-priv 의 ip 설정을 해줍니다.





DNS 탭에서 호스트명을 변경해주고 DNS서버 역시 rac1 과 똑같이 구성해줍니다.

168.126.63.1 을 많이 쓰는데 이것은 KT의 DNS 서버이고, 제가 입력한 164.124.107.9는 LG U+의 DNS 서버 입니다.

저희 집은 LG U+ 를 사용하고 있기 때문이죠.... 구글 퍼블릭인 8.8.8.8 을 넣어도 상관 없습니다.



네트워크를 재시작해주고 ping이 잘 가는지 확인 해줍니다.


# ping rac2

# ping rac2-priv

# ping 164.124.107.9


Ping Test가 성공했다면 


# vi /home/oracle/.bash_profile


export ORACLE_SID=rac2


SID 부분을 수정해줍니다.

그리고 재부팅.


# init 6


그리고 rac1도 부팅시켜 두 개의 장비를 모두 활성화 시킵니다. rac1, rac2 모두 oracle 계정으로 로그인 합니다.



equivalence 설정


node1, node2 에서 모두 실행 


$ mkdir .ssh


$ ssh-keygen -t rsa

  입력값 없이 엔터 -> 엔터 -> 엔터


$ ssh-keygen -t dsa

  입력값 없이 엔터 -> 엔터 -> 엔터


node1 에서만 실행


$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys


$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

  yes -> 노드 2 시스템 패스워드 입력


$ ssh rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

  노드 2 시스템 패스워드 입력


$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys

  노드 2 시스템 패스워드 입력

  개인키가 저장된 파일(authorized_keys)을 노드2에 복사


모든 노드에서 각각 실행 

  (암호를 묻는 과정이 나오지 않으면 올바르게 설정된 것입니다. 최초 실행 시 공개키를 받는 과정에서 yes 입력합니다.)


$ ssh rac1 date  

$ ssh rac1-priv date

$ ssh rac2 date

$ ssh rac2-priv date



※ rac1 과 rac2의 장비간의 시간을 똑같이 동기화 시켜주는 방법




node1, node2 에서 리눅스가 포함하고 있는 NTP 시스템을 이용해서 인터넷 동기화를 하여, 두 장비간의 시간을 동기화 시켜 줄 수 있습니다. 

NTP 서버에 modprobe에 이용했던 time.bora.net의 NTP서버를 추가 시켜주었습니다. 

서버에서 시간을 가져오는 방식이라 같은 시간을 가져오기 때문에 정확한 현재 시간을 가져 올 수 있습니다.


 두 노드의 시간 설정 개요 

 설치를 시작하기 전에 두 노드의 날짜 설정을 최대한 동일한 날짜로 설정합니다.  클러스터 시간 동기화 메커니즘은 모든 클러스터 구성원 시계를 동기화할 수있습니다.  Linux에서 Oracle RAC는 네트워크 시간 프로토콜 (NTP) 또는 Oracle 클러스터 시간 동기화 서비스를 사용할 수있습니다. 

 NTP는 네트워크에 연결된 서버의 시계를 동기화하도록 설계된 프로토콜입니다.  NTP를 사용하면 네트워크에있는 각 서버에서 클라이언트 소프트웨어를 실행 참조 NTP 서버라고하는 1 개 이상의 서버에 정상적으로 시기를 요청합니다.  타이밍 요청에 리턴된 정보는 서버의 시계를 조정하는 데 사용됩니다.  클러스터의 모든 노드에서 동일한 참조 NTP 서버를 사용해야합니다. 

 NTP를 구성하지 않은 경우 클러스터 시간 동기화 서비스 (CTSS)가 구성되고 사용됩니다.  CTSS를 사용하여 모든 클러스터 구성원 시계를 동기화할 수있습니다.  CTSS는 클러스터 구성원 노드의 동기화를 유지합니다.  CTSS에서는 클러스터의 1 번째의 노드가 주인으로, 클러스터의 다른 모든 노드는 마스터 노드와 같은 시간에하도록 동기화됩니다.  CTSS에서 동기화 외부 시계는 사용하지 않습니다.

 
 참고 : 
 NTP 또는 CTSS을 사용하여 노드의 시스템 시간을 변경했기 때문에 발생하는 인위적인 오류로부터 보호되지 않습니다.

Oracle 10g RAC (ASM) 설치 - 1 리눅스 설정

# ifconfig


명령을 이용해서 DHCP로 받은 IP를 확인합니다.

eth0, eth1을 모두 잘 봐둡니다.


# netstat -nr


명령을 이용해서 기본 Gateway 를 확인 할 수 있습니다.



# neat


를 실행하면, 네트워크 설정 화면을 열수 있습니다.


eth0은 관리자용과 외부 접속에서 이용하는 Public IP를 사용하는 랜카드 입니다.

eth1은 Private IP를 이용하여, RAC 장비간의 동기화 전용의 인터커넥트 입니다.




각 에 DHCP에서 받은 IP를 고정으로 할당 해줍니다.



Private IP에는 게이트웨이 값을 설정하지 않습니다.



DNS 탭에 가서 기본 DNS를 변경해줍니다.



저장 하고 나면 네트워크 서비스를 재시작하는 창이 나옵니다.



# /etc/init.d/network restart


Node 1의 ip 세팅이 끝났습니다.

RAC장비간에 접속 분할을 교통정리 해주는 프로그램인 클러스터웨어를 설치 하기 앞서, vi 에디터를 이용한 설치를 위, 몇몇 파일의 세팅을 해줘야 합니다.



RPM 패키지 업데이트


binutils-2.15.92.0.2-21

compat-db-4.1.25-9

compat-gcc-32-3.2.3-47.3

compat-gcc-32-c++-3.2.3-47.3

compat-libstdc++-33-3.2.3-47.3

compat-libgcc-296-2.96-132.7.2

control-center-2.8.0-12.rhel4.5

cpp-3.4.6-3                                                              ← 기본적으로 yum 에서 cpp만 업데이트 하면 의존 관계에 있는 11가지 rpm을 같이 업데이트 해줍니다.

gcc-3.4.6-3

gcc-c++-3.4.6-3

glibc-2.3.4-2.25

glibc-common-2.3.4-2.25

glibc-devel-2.3.4-2.25

glibc-headers-2.3.4-2.25

glibc-kernheaders-2.4-9.1.98.EL

gnome-libs-1.4.1.2.90-44.1

libaio-0.3.105-2

libstdc++-3.4.6-3

libstdc++-devel-3.4.6-3

make-3.80-6.EL4

openmotif-2.2.3-10.RHEL4.5

openmotif21-2.1.30-11.RHEL4.6

pdksh-5.2.14-30.3

setarch-1.6-1

sysstat-5.0.5-11.rhel4                                                  ← 기본적으로 설치 되지 않는 rpm 패키지로 반드시 찾아서 설치 해줘야 합니다.

xscreensaver-4.18-5.rhel4.11



불필요한 서비스의 종료.


# chkconfig --level 123456 xinetd off
# chkconfig --level 123456 sendmail off
# chkconfig --level 123456 cups off
# chkconfig --level 123456 cups-config-daemon off
# chkconfig --level 123456 smartd off
# chkconfig --level 123456 isdn off
# chkconfig --level 123456 pcmcia off
# chkconfig --level 123456 iptables off



vi 에디터를 이용한 각종 환경 변수 설정


# vi /etc/hosts


# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               localhost.localdomain   localhost                 ← 이 부분에 127.0.0.1 옆에 rac1 이라고 호스트 네임이 적혀있는데 삭제 해줍니다.


#Public

192.168.126.131         rac1

192.168.126.132         rac2

#Private

192.168.121.129         rac1-priv

192.168.121.130         rac2-priv

#Vip

192.168.126.31          rac1-vip

192.168.126.32          rac2-vip


rac1, rac2 : Public IP로 DBA가 각 노드를 관리하기 위해 접속하는 IP
rac1-priv, rac2-priv : Private IP로 각 노드간 통신을 위한 IP
rac1-vip, rac2-vip : Virtual IP로 운영 IP


# vi /etc/sysctl.conf


kernel.shmall = 2097152

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default = 4194304

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 262144



# vi /etc/security/limits.conf


oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536



# vi /etc/pam.d/login


session    required     pam_limits.so



# vi /etc/modprobe.conf


options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180


# modprobe -v hangcheck-timer




# vi /etc/rc.local


/sbin/modprobe hangcheck-timer rdate -s time.bora.net



오라클 계정의 생성


# groupadd -g 5000 dba

# useradd -g dba oracle

# passwd oracle



root 계정의 .bash_profile 의 수정


# vi ~/.bash_profile


PATH=$PATH:$HOME/bin:/home/oracle/product/10g/crs/bin



오라클 계정의 .bash_profile 의 수정 


# vi /home/oracle/.bash_profile


export EDITOR=vi

export LD_ASSUME_KERNEL=2.4.19

export ORACLE_BASE=/home/oracle

export ORA_CRS_HOME=$ORACLE_BASE/product/10g/crs

export ORACLE_HOME=$ORACLE_BASE/product/10g/db

export ORA_ASM_HOME=$ORACLE_BASE/product/10g/asm

export ORACLE_SID=rac1

export LANG=ko_KR.UTF-8

export ORACLE_TERM=xterm

export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949

export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib

export PATH=$PATH:$ORACLE_HOME/bin:/$ORA_CRS_HOME/bin

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib



Disk 파티션 설정 및 구성


# fdisk /dev/sdb

# fdisk /dev/sdc

...

...

...

# fdisk /dev/sdi


총 8개의 파티션을 순서대로 fdisk 해줍니다.


fdisk 실행 상에서 의 진행 과정

 n (새로운 파티션 생성) → p (프라이머리 생성) → 1 → 엔터 → 엔터 → w (파티션 저장 후 fdisk 종료)


설정 해준 파티션들을 rawdevice에 적용시켜 줍니다.


# vi /etc/sysconfig/rawdevices


/dev/raw/raw1   /dev/sdb1

/dev/raw/raw2   /dev/sdc1

/dev/raw/raw3   /dev/sdd1

/dev/raw/raw4   /dev/sde1

/dev/raw/raw5   /dev/sdf1

/dev/raw/raw6   /dev/sdg1

/dev/raw/raw7   /dev/sdh1

/dev/raw/raw8   /dev/sdi1


# /etc/init.d/rawdevices restart


# vi /etc/udev/permissions.d/50-udev.permissions


#raw/*:root:disk:0660

raw/*:oracle:dba:0660                                       ← 113번째 줄 수정.


# /etc/init.d/rawdevices restart


# ls -al /dev/raw                                                    ← Device들의 소유권이 oracle 로 변경 됐는지 확인합니다.


# init 0 


시스템을 끄고 Node 2 의 작업으로 넘어갑니다.