Installing Oracle 11gR2(11.0.2.4) on Oracle Linux 7

게시 날짜: 2014/09/16, 카테고리: ORACLE, RAC

Install Oracle 11gR2 (11.0.2.4) on Oracle Linux 7 <Virtual Machine>

  1. Setting Up Virtual Machine

기본적으로 vmware 에서 가상 머신을 생성한다. 기본적인 VM 설정은 생략. 이더넷 어뎁터를 2개 잡는다. 따로 RAC 를 위한 공유 스토리지 디스크를 생성한다. 공유스토리지로 사용할 디스크는 SCSI 1:0 번부터 설정하여 준다.  또한 할당할 공간을 미리 포맷 하여야 한다.

가상 머신이 생성 되었으면 가상머신의 환경설정 파일(*.vmx)을 열어 아래와 같이 추가해 준다.

disk.locking = “FALSE”
diskLib.dataCacheMaxSize = “0”
scsi1.sharedBus = “virtual”

또한 각 공유 디스크에 아래와 같이 추가해 준다.

scsi1:0.deviceType = “disk”

각 디바이스별로 (공유 디스크) 추가해 주면 된다.

가상머신에서의 네트워크 설정은 가상머신 메뉴의 edit -> virtual network edit 를 통해 할당 받을 수 있는 동적 아이피와 게이트웨이 아이피를 확인 해 둔다. 해당 아이피들은 리눅스 머신에 적용될 아이피이다.  가상머신을 2번노드로 하여 복사한다. 이렇게 하면 나중에 노드2번을 부팅시 이동한 것인지 카피한 것인지 물어보는데, 이때 반드시 카피한 것으로 해야 이더넷 맥어드레스가 갱신되어 일번노드와 충돌없이 정상적으로 네트워크를 사용 할 수 있다.

네트워크 카드는 2개를 설정하며 하나는 NAT 방식 하나는 hostonly 로 설정한다. NAT 방식으로 사용할 이더넷 카드가 public 과 매칭되며 hostonly 방식은 노드간 인터컨넥션을 위해 사용한다.

  1. Setting on Linux Network Configuration

(리눅스 설치절차는 생략) 리눅스를 설치 완료하고 부팅 하였으면 네트워크 설정을 해 주자.  각 디바이스별 환경설정 파일은 /etc/sysconfig/network-scripts/ifcfg-eth* 에 위치해 있다. 가장 기본적인 eth0 번이 통신이 되게 하기 위해 해당 파일을 열고 아래와 같이 수정한다.

Example of ifcfg-<First network>

TYPE=”Ethernet”
DEFROUTE=”yes”
NAME=”eth0″
ONBOOT=”yes”
HWADDR=”00:0C:29:2E:FF:B7″
IPADDR0=”192.168.85.131″
GATEWAY0=”192.168.85.2″
DNS1=“192.168.85.128″

위 세팅은 eth0 번으로 public ip 로 사용될 설정이다. 반드시 인터넷이 되는지 확인을 하여야 한다 (추후에 yum 을 이용하여 필요한 package 및 update 를 수행할 예정) .  인터컨넥션을 위한 두번째 네트워크 카드는 아래와 같이 설정한다.

Example of ifcfg-<Second network>

TYPE=“Ethernet”

DEFROUTE=”yes”

NAME=”eth1″

ONBOOT=”yes”

HWADDR=”00:0C:29:D8:30:AC”

IPADDR0=”192.168.150.140″

GATEWAY0=”192.168.150.0″

/etc/hosts 파일을 수정한다. 각 노드에 대한 별칭등을 등록한다.

# vi /etc/hosts

127.0.0.1   localhost node1.mydb.net node1 localhost.localdomain

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.85.130   node1 node1.mydb.net

192.168.85.131   node2 node2.mydb.net

192.168.85.135   node1-vip node1-vip.mydb.net

192.168.85.136   node2-vip node2-vip.mydb.net

192.168.150.140  node1-priv node1-priv.mydb.net

192.168.150.141  node2-priv node2-priv.mydb.net

192.168.85.150   scan scan.mydb.net

네트워크 설정이 끝났으면 이제 시스템 환경변수 및 방화벽 설정 해제한다.  우선 selinux 를 off 하고 iptables 및 ipchains 서비스를 off 하며 7버전에서는 firewalld 서비스도 같이 종료 해 준다.

# vi /etc/selinux/config

SELINUX=disabled

# service iptables stop
# service ipchains stop
# service firewalld stop

서비스를 모두 off 하였다면 (올라가 있지 않은 서비스도 있을 수 있음) 이제 재부팅 시 서비스가 올라오지 않게 설정하도록 한다.

# chkconfig iptables off
# chkconfig ipchains off

# chkconfig firewalld off

이제 오라클 계정을 위한 시스템 설정을 수행한다. /etc/sysctl.conf 파일을 아래와 같이 추가하거나 수정 해 준다.

# /etc/sysctl.conf

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 536870912

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

# /sbin/sysctl -p

/etc/security/limits.conf 파일에 아래 내용을 추가한다.

# vi /etc/security/limits.conf

oracle          soft    nproc           2047

oracle          hard    nproc           16384

oracle          soft    nofile          1024

oracle          hard    nofile          65536

Hangcheck timer 설정을 위한 파일 수정.

# vi /etc/modprobe.d/mlx4.conf

options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

# modprobe -v hangcheck-timer

# vi /etc/rc.local

/sbin/modprobe hangcheck-timer rdate -s 203.248.240.140

이제 CRS 설치를 위하여 오라클 계정 및 그룹 생성을 한다. <환경변수 설정 생략>

# groupadd dba

# useradd -g dba oracle

DNS 설정을 위해 /etc/resolv.conf 를 수정한다. DNS 서버는 따로 세팅을 해야하지만 hosts 파일을 이용하기 위해 dnsmasq 서비스를 이용한다.

# vi /etc/resolv.conf

search mydb.net

nameserver 192.168.85.130

# service dnsmasq start                # dnsmasq 서비스를 수행

# chkconfig dnsmasq on               # 매 부팅시 dnsmasq 서비스를 시작

dnsmasq 패키지가 설치되어 있지 않다면 다음 명령을 통해 dnsmasq 를 설치할 수 있다.

# yum install dnsmasq.x86_64

정상적으로 설치가 완료 되었다면 이제 리눅스를 종료한 후, VM Machine 을 복사하여 node2 를 만든다. node2 만 따로 부팅하여 network 를 2번 노드에 맞게 수정하고 1,2번 노드를 동시에 기동하여 정상적으로 ping 이 오가는지 확인한다.

이제 공유 스토리지에 ASM을 위한 Volume 을 설정한다. 정상적으로 설정 되었으면 fdisk -l 명령을 통해 /sdb, /sdc, /sdd 등의 아직 사용하지 않은 device 들을 확인 할 수 있다.  공유 스토리지 디스크를 포맷한다.

# fdisk /dev/sdb

메뉴가 나오면 n 을 눌러 새로운 파티션을 작성하고 p, 1, t, 8e, w 를 누르면 디스크가 포맷된다.  마찬가지로 나머지 공유 디스크들을 포맷한다.  포맷을 완료하였다면 이제 ASM 을 위한 logical volume 을 생성한다.

# pvcreate /dev/sdb1
# pvcreate /dev/sdb2

# pvcreate /dev/sdb3

pvdisplay 명령을 통해 정상적으로 physical volume 이 생성되었는지 확인하고 정상적으로 생성되었다면 이제 이 physical volume 을 마치 하나의 디바이스처럼 사용하기 위해 Volume group 을 생성한다.

# vgcreate oravg /dev/sdb1 /dev/sdb2 /dev/sdb3

정상적으로 생성이 되었다면 vgdisplay 명령을 통해 확인 할 수 있다.  Volume group 생성을 완료하였으면 이제 Volume group  을 쪼개어 ASM 을 위한 Logical volume 을 생성한다.

# lvcreate -L 1024m oravg -n asm01

# lvcreate -L 1024m oravg -n asm02

# lvcreate -L 1024m oravg -n asm03

생성이 완료 되었다면 lvdisplay 명령으로 생성이 되었음을 알 수 있다.  이제 ASM 디스크 생성을 위해 oracleasm library 를 사용한다. 만약 oracleasm 패키지가 설치되어 있지 않다면 아래 명령을 통해 설치할 수 있다.

# yum install oracleasm-support.x86_64

# service oracleasm disable
# service oracleasm enable

# oracleasm createdisk CRS1 /dev/oravg/asm01

# oracleasm createdisk CRS2 /dev/oravg/asm02

# oracleasm createdisk CRS3 /dev/oravg/asm03

# oracleasm listdisks

ASM 디스크가 정상적으로 생성되었으면 생성한 CRS[123] 디스크가 보일 것 이다.  이제 2번노드에서 생성한 ASM 디스크들이 정상적으로 보이는지 확인 해 보자.  2번 노드에서도 oracleasm library 를 설치했다면 재기동 해준다.

# service oracleasm disable

# service oracleasm enable

# service oracleasm scandisks

# service oracleasm listdisks

정상적으로 node2 번에서 생성한 디스크들이 검색 및 등록이 되었는지 확인한다.  /dev/oracleasm/disks/에 각각의 디스크 이름으로 정상적으로 생성되었는지 확인한다. 정상적으로 설치가 되었으면 이제 Grid 설치를 시작한다.

  1. Installing Grid Infrastructure

 3. 1. SSH Equivalence 

각 노드에서 oracle 사용자가 상대 노드로 패스워드 없이 접속하기 위하여 ssh 설정을 해 준다.  oracle  사용자로 접속하여 아래 명령을 수행한다.

NODE1

$ ssh-keygen -t rsa

$ ssh-keygen -t dsa

$ cd .ssh

$ cat id_rsa.pub >> authorized_keys

$ cat id_dsa.pub >> authorized_keys

NODE2

$ ssh-keygen -t rsa

$ ssh-keygen -t dsa

NODE1

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

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

$ scp authorized_keys node2:~/.ssh/authorized_keys

순서는 반드시 지켜야 하며 아래와 같이 테스트를 수행해 본다. 수행할 때 known host 로 등록할 것이냐고 물어볼 경우가 있는데 그때 yes 를 해 주면 두번다시 물어보지 않는다.  password 를 물어보면 잘못 설정 된 것이므로 재설정 한다.

(Node1, Node2 양 노드 모두에서 수행할때 password 를 물어보면 안된다.)

# ssh node1 date

# ssh node2 date

# ssh node1-inter

# ssh node2-inter

Equivalence 설정이 완료되었다면 이제 grid 를 설치하자.  grid 설치파일의 위치로 가서 아래 명령을 수행한다.

# cluvfy stage -pre crsinst -n node1,node2 -r 11gR2 -verbose

아직 필요한 패키지를 설치하지 않아서 failed 된 부분이 많다. failed 된 패키지를 찾아서 아래와 같이 설치해 준다.

# yum install <package_name>

cvuqdisk utility 는 설치파일이 위치한 곳에서 rpm 디렉토리에 있다.  아래 명령으로 설치한다.

# rpm -ivh cluvqdisk-1.0.9-1.rpm

cluvfy 유틸리티로는 나오지 않지만 ksh 와 perl 도 설치해 준다.

 3. 2. Response File 수정

response/grid_install.rsp 파일을 수정한다.  전부 수정할 필요는 없고 중요한 몇가지만 수정한다.

grid_install.rsp

ORACLE_HOSTNAME=node1

INVENTORY_LOCATION=/oracle/oraInventory

SELECTED_LANGUAGE=en,ko

oracle.install_option=CRS_CONFIG

ORACLE_BASE=/oracle/product

ORACLE_HOME=/ora_crs

oracle.install.asm.OSDBA=dba

oracle.install.asm.OSOPER=dba

oracle.install.asm.OSASM=dba

oracle.install.crs.config.gpnp.scanName=scan

oracle.install.crs.config.gpnp.scanPort=1591

oracle.install.crs.config.clusterName=clu-mydb

oracle.install.crs.config.clusterNode=node1:node1-vip,node2:node2-vip

oracle.install.crs.config.networkInterfaceList=eth0:192.168.85.0:1,eth1:192.168.150.0:2

oracle.install.crs.config.storageOption=ASM_STORAGE

oracle.install.asm.SYSASMPassword=oracle

oracle.install.asm.diskGroup.name=CRS

oracle.install.asm.diskGroup.disks=/dev/oracleasm/disks/CRS1,/dev/oracleasm/disks/CRS2,/dev/oracleasm/disks/CRS3

oracle.install.asm.diskGroup.diskDiscoveryString=/dev/oracleasm/disks/*

oracle.install.asm.monitorPassword=oracle

responsefile 수정을 완료 하였으면 이제 설치를 시작한다.  아래 silent 모드로 설치 시작.

 3. 2. Install

아래 명령어를 이용하여 설치를 시작한다.

$ ./runInstaller -silent -responseFile /path/to/response/file/grid_install.rsp

설치시 에러가 발생하면 로그파일을 보고 설치가 안된 패키지 등이 있으면 1번, 2번 노드 모두 설치하고 64bit 에서 설치시 i386 관련 패키지는 fail 이 되어도 설치에 지장을 주지 않으나, x86_64 및 i686 패키지는 모두 설치해 준다.

정상적으로 설치가 끝났으면 각각의 노드에서 아래 명령을 루트 사용자로 순차적으로 수행한다.

NODE1) # <oracleInvnetory_dir>/orainstRoot.sh

NODE2) # <oracleInventory_dir>/orainstRoot.sh

NODE1) # <GIRD_HOME>/root.sh

여기서 문제가 되는데 root.sh 를 수행하면서 crs 데몬을 가동시키나 ohasd 가 올라오지 않고 결국 fail 된다.  이를 방지하기 위해서 root.sh 를 수행하기 전에 아래 명령을 수행한 후에 root.sh 를 수행하도록 한다.

# cd /var/tmp/.oracle

# /bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1 &

위 명령을 수행한 후에 1번노드에서 root.sh 를 수행한다.  앞으로 crs 를 재기동 할 때마다 위 명령을 수행해 주어야 한다.  매번 하기 귀찮으니 rc.local 파일에 등록해 놓고 재기동시 자동으로 수행하게 하면 될 것이다.  1번 노드가 끝나면 2번노드에서도 마찬가지로 아래와 같이 수행한다.

# cd /var/tmp/.oracle

# /bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null &

# cd <GRID_HOME>

# ./root.sh

root.sh 가 성공적으로 수행되었다면 아래 명령을 통해 클러스터가 정상적으로 작동하는지 확인한다.

# <GRID_HOME>/bin/crsctl stat res -t

# ps -ef | grep smon                                          // ASM Instance가 떠 있는지 확인

4.     ORACLE software Installation

설치파일 디렉토리로 이동하여 response/db_install.rsp 파일을 편집기로 열어 아래 내용을 수정한다.

# cd <Install_file_directory>/response

# vi db_install.rsp

oracle.install.option=INSTALL_DB_SWONLY

ORACLE_HOSTNAME=node1

UNIX_GROUPNAME=dba

INVENTORY_LOCATION=/oracle/oraInventory

SELECTED_LANGUAGES=en,ko

ORACLE_HOME=/oracle/product/11.2.0

ORACLE_BASE=/oracle/product

oracle.install.db.InstallEdition=EE

oracle.install.db.DBA_GORUP=dba

oracle.install.db.OPER_GROUP=dba

oracle.install.db.CLUSTER_NODE=node1,node2

아래 명령어를 통하여 Oracle Engine 을 설치한다.

# <Install_file_direcotry>./runInstaller -silent -responseFile /path/to/response/file/db_insttall.rsp -ignorePreReq -ignorSysPrereqs

ignore~ 옵션이 없으면 metalink id/pw 등의 검사가 실패하여 설치되지 않는다.  만약 노드1 에서 정상적으로 설치가 되었으나, node2 에서 설치가 되지 않는다면 scp 등을 이용하여 엔진 디렉토리를 통으로 node2에 같은 경로로 넘겨주면 된다.

설치가 완료되면 지시에 따라 root.sh 등을 수행하여 주면 된다.

  1. Database installation

 5. 1. Install Database singlenode

DB 설치는 Single 로 설치 후 CRS에 각 노드를 등록시켜 주어 RAC를 구성하게 한다.  인스톨 파일이 있는 경로에 가서 response/dbca.rsp 파일을 수정한다.

# vi dbca.rsp

OPERATION_TYPE=“createDatabase”

GDBNAME=node.mydb.net

NODELIST=node1

SYSPASSWORD=oracle

SYSTEMPASSWORD=oracle

STORAGETYPE=ASM

DISKGROUPNAME=DATA

SAMPLESCHEMA=FALSE       # 필요하면  TRUE

responsefile 수정이 완료 되었으면 아래 명령을 통해 database 를 생성한다.

# dbca -silent -responseFile /path/to/response/file/dbca.rsp

설치가 완료되었으면 db에 접속하여 인스턴스가 정상적으로 구동 되었는지 확인한다.

# sqlplus / as sysdba

SQL> select instance_name, status from v$instance;

  1. Add Second node

 6. 1. Setting Thread #2

2번 노드를 위한 기본 logfile 및 undo tablespace 를 생성하고 thread 2 를 활성화.

SQL> alter database add logfile group 4 thread 2

2> (‘+DATA/node/onlinelog/group41.log’,’+DATA/node/onlinelog/group42.log’) size 50m;

SQL> alter database add logfile group 5 thread 2

2> (‘+DATA/node/onlinelog/group51.log’,’+DATA/node/onlinelog/group52.log’) size 50m;

SQL> alter database add logfile group 6 thread 2

2> (‘+DATA/node/onlinelog/group61.log’,’+DATA/node/onlinelog/group62.log’) size 50m;

SQL> create undo tablespace  undotbs2 datafile

2> ‘+DATA/node/datafile/undotbs2’ size 200m;

SQL> alter database enable public thread 2;

이제 2번 노드에서 필요한 디렉토리를 생성한다. 1번 노드에서 다음 명령을 친 후, 해당 디렉토리들을 2번 노드에서 생성하여 준다.

SQL> show parameter background

SQL> show parameter user

SQL> show parameter core

SQL> show parameter audit

2번노드 oracle 사용자로 수행

$ mkdir -p <path>

 6.2. 파라메터 수정을 위한 pfile 생성 및 수정

RAC 설정을 위하여 pfile 을 생성한다.

SQL> create pfile=‘/path/initnode1.ora’ from spfile;

vi 를 이용하여 pfile 의 몇개를 수정한다.

$ vi initnode1.ora

*.cluster_database_instances=2

node1.thread=1

node2.thread=2

node1.instance_number=1

node2.instance_number=2
node1.undo_tablespace=‘UNDOTBS1’

node2.undo_tablespace=‘UNDOTBS2’

*.cluster_database=false

cluster_database 옵션은 잠시 false 로 둔다.  이제 수정 완료한 파라메터 파일을 2번 노드에 복사하고 패스워드 파일을 생성한다.

1번노드

$ scp initnode1.ora node2:<oracle_home>/dbs/

$ orapwd file=<oracle_home>/dbs/orapwnode1 password=oracle

2번노드

$ orapwd file=<oracle_home>/dbs/orapwnode2 password=oracle

이제 1번노드에서 db 를 shutdown 하고 sid 를 node1 으로 변경하여 기동한다.

SQL> shutdown immediate;

$ export ORACLE_SID=node1

SQL> startup

SQL> @?/rdbms/admin/catclust.sql

SQL> shutdown

pfile 의 cluster_database 를 true 로 변경하여 기동한다. 이후 .bash_profile 혹은 .profile 에서 oracle_sid 부분을 1번노드는 node1, 2번노드는 node2 로 변경한다.

만약 cluster_database=true 로 변경후 ora-00439 가 발생하면 양 노드에서 오라클 유저로 아래 명령을 수행하여 엔진단에서 rac 모드를 on 시켜준다.

$ cd $ORACLE_HOME/rdbms/lib

$ make -f ins_rdbms.mk rac_on

$ make -f ins_rdbms.mk ioracle

 6. 3. Register resources to crs

양 노드에서 정상적으로 기동되었다면 CRS 에 각 인스턴스를 등록시켜준다.

$ srvctl add instance -d node -i node1 -n node1     (* -d : database 이름, -i 인스턴스 이름, -n 노드 이름)

$ srvctl add instance -d node -i node2 -n node2

만약 PRCD-1022 가 나오면 crsctl stat res -t 명령을 통해 database 가 등록되어 있는지를 확인하고 database 를 리소스에서 삭제한 후, 재등록한다.

$ srvctl stop database -d node

$ srvctl remove database -d node

$ srvctl add database -d node -o $ORACLE_HOME

$ srvctl add instance -d node -i node1 -n node1

$ srvctl add instance -d node -i node2 -n node2

개별 리스너를 등록하기 위해 각 노드에서 $ORACLE_HOME/network/admin 에서 listener.ora 파일을 수정한 후 아래 명령으로 등록한다.

$ srvctl add listener -l node -o $ORACLE_HOME

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중