Oracle 18c 설치 Single

오라클 18c가 릴리즈 되었는데 설치 방법이 약간 바뀌었다.


18c는 2018.08.21 기준, 리눅스와 솔라리스 버전만 릴리즈 되었다.



해당 예제는 리눅스 7버전에 설치를 진행 한다.



리눅스 7의 Oracle 설치를 위한 기본 설치 패키지



Server with GUI

Hardware Monitoring Utilities

Large Systems Performance

Network file system client

Performance Tools

Compatibility Libraries

Development Tools


# vi /etc/hosts


# yum update -y




자동 셋업


# yum install -y install oracle-database-preinstall-18c




수동 셋업


# vi /etc/sysctl.conf


fs.file-max = 6815744

kernel.sem = 250 32000 100 128

kernel.shmmni = 4096

kernel.shmall = 1073741824

kernel.shmmax = 4398046511104

kernel.panic_on_oops = 1

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

net.ipv4.conf.all.rp_filter = 2

net.ipv4.conf.default.rp_filter = 2

fs.aio-max-nr = 1048576

net.ipv4.ip_local_port_range = 9000 65500



# vi /etc/security/limits.d/oracle-database-preinstall-18c.conf


oracle   soft   nofile    1024

oracle   hard   nofile    65536

oracle   soft   nproc    16384

oracle   hard   nproc    16384

oracle   soft   stack    10240

oracle   hard   stack    32768

oracle   hard   memlock    134217728

oracle   soft   memlock    134217728



패키지 설치 목록


# OL6 and OL7 (RHEL6 and RHEL7)

yum install -y bc    

yum install -y binutils

yum install -y compat-libcap1

yum install -y compat-libstdc++-33

yum install -y compat-libstdc++-33.i686

yum install -y elfutils-libelf.i686

yum install -y elfutils-libelf

yum install -y elfutils-libelf-devel.i686

yum install -y elfutils-libelf-devel

yum install -y fontconfig-devel

yum install -y glibc.i686

yum install -y glibc

yum install -y glibc-devel.i686

yum install -y glibc-devel

yum install -y ksh

yum install -y libaio.i686

yum install -y libaio

yum install -y libaio-devel.i686

yum install -y libaio-devel

yum install -y libX11.i686

yum install -y libX11

yum install -y libXau.i686

yum install -y libXau

yum install -y libXi.i686

yum install -y libXi

yum install -y libXtst.i686

yum install -y libXtst

yum install -y libgcc.i686

yum install -y libgcc

yum install -y librdmacm-devel

yum install -y libstdc++.i686

yum install -y libstdc++

yum install -y libstdc++-devel.i686

yum install -y libstdc++-devel

yum install -y libxcb.i686

yum install -y libxcb

yum install -y make

yum install -y nfs-utils

yum install -y net-tools

yum install -y python

yum install -y python-configshell

yum install -y python-rtslib

yum install -y python-six

yum install -y smartmontools

yum install -y sysstat

yum install -y targetcli

yum install -y unixODBC



그룹 및 유저 추가


# groupadd -g 54321 oinstall

# groupadd -g 54322 dba

# groupadd -g 54323 oper


# useradd -u 54321 -g oinstall -G dba,oper oracle




추가 세팅



SELinux 설정


# vi /etc/selinux/config


SELINUX=permissive


# setenforce Permissive

※ 리눅스 7 버전은 SELinux 설정 후 재구동 필요없음.



방화벽 Off


# systemctl stop firewalld

# systemctl disable firewalld



디렉토리 생성


# mkdir -p /u01/app/oracle/product/18.0.0/dbhome_1

# mkdir -p /u02/oradata

# chown -R oracle:oinstall /u01 /u02

# chmod -R 775 /u01 /u02


* u01 - 엔진

* u02 - 데이터



프로파일 설정


기존의 방식대로 해도 되고, 

아래는 18c 부터 오라클이 제공하는 방식을 설명한다.


$ mkdir /home/oracle/scripts


$ touch /home/oracle/scripts/setEnv.sh


$ cat > /home/oracle/scripts/setEnv.sh <<EOF

# Oracle Settings

export TMP=/tmp

export TMPDIR=\$TMP


export ORACLE_HOSTNAME=ol7-183.localdomain

export ORACLE_UNQNAME=cdb1

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=\$ORACLE_BASE/product/18.0.0/dbhome_1

export ORA_INVENTORY=/u01/app/oraInvenotry

export ORACLE_SID=cdb1

export PDB_NAME=pdb1

export DATA_DIR=/u02/data


export PATH=/usr/sbin:/usr/local/bin:\$PATH

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


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

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

EOF


$ echo ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile



시작, 종료 스크립트 작성


$ touch /home/oracle/scripts/start_all.sh

$ touch /home/oracle/scripts/stop_all.sh


$ cat > /home/oracle/scripts/start_all.sh <<EOF

#!/bin/bash

. /home/oracle/scripts/setEnv.sh


export ORAENV_ASK=NO

. oraenv

export ORAENV_ASK=YES


dbstart \$ORACLE_HOME

EOF



$ cat > /home/oracle/scripts/stop_all.sh <<EOF

#!/bin/bash

. /home/oracle/scripts/setEnv.sh


export ORAENV_ASK=NO

. oraenv

export ORAENV_ASK=YES


dbshut \$ORACLE_HOME

EOF



$ chown -R oracle.oinstall /home/oracle/scripts

$ chmod u+x /home/oracle/scripts/*.sh


설치 완료후에 /etc/oratab에 넣어주고, 오라클 유저로 시작/종료 할 수 있다.


~/scripts/start_all.sh

~/scripts/stop_all.sh



엔진 설치


Oracle 홈페이지에서 LINUX.X64_180000_db_home.zip 파일을 받을 수 있다.


해당 파일을 반드시 /u01/app/oracle/product/18.0.0/dbhome_1 폴더로 옮겨서 압축을 푼다.


$ cd /u01/app/oracle/product/18.0.0/dbhome_1



X매니저 나 Gnome 환경에서 GUI 방식으로 설치 한다.


$ ./runInstaller




엔진 설치 완료


DBCA는 12c와 동일하다.

Oracle 12c R2 RAC 설치 #2

Grid 설치



oracle user로 접속


$ export SOFTWARE_LOCATION=/media/sf_12.2.0.1/

$ cd /u01/app/12.2.0.1/grid

$ unzip -q $SOFTWARE_LOCATION/linuxx64_12201_grid_home.zip


주의! 


기존처럼 설치 폴더 압축을 풀면 gird 라는 폴더가 생기는 것이 아니라, 해당 압축 폴더를 바로 $GRID_HOME 경로에 압축을 풀어주는 것임. 



root 유저로 rpm 설치


su -

# 1번 노드.

cd /u01/app/12.2.0.1/grid/cv/rpm

rpm -Uvh cvuqdisk*


# 2번 노드.

scp ./cvuqdisk* root@ol6-122-rac2:/tmp

ssh root@ol6-122-rac2 rpm -Uvh /tmp/cvuqdisk*

exit



GUI 에서 실행


$ cd /u01/app/12.2.0.1/grid

$ ./gridSetup.sh




DATABASE 설치


11g 와 동일.

Oracle 12c R2 RAC 설치 #1

설치 환경


Esxi 5.5, 

Oracle Linux 6.9 x86_64

Oracle 12c R2 (12.2.0.1)


리눅스6 설치 옵션


SWAP 4GB+

방화벽 사용중지

SELinux 설정 변경 (permissive or disabled)

해당 패키지 그룹 설치

  • Base System > Base
  • Base System > Hardware monitoring utilities
  • Base System > Large Systems Performance
  • Base System > Network file system client
  • Base System > Performance Tools
  • Base System > Perl Support
  • Servers > Server Platform
  • Servers > System administration tools
  • Desktops > Desktop
  • Desktops > Desktop Platform
  • Desktops > Fonts
  • Desktops > General Purpose Desktop
  • Desktops > Graphical Administration Tools
  • Desktops > Input Methods
  • Desktops > X Window System
  • Applications > Internet Browser
  • Development > Additional Development
  • Development > Development Tools


자동 설정


# yum install oracle-database-server-12cR2-preinstall -y

# yum install ntp -y



직접 설정


# groupadd oinstall

# groupadd dba

# useradd -g oinstall -G dba oracle

# passwd oracle



# vi /etc/sysctl.conf


fs.file-max = 6815744

kernel.sem = 250 32000 100 128

kernel.shmmni = 4096

kernel.shmall = 1073741824

kernel.shmmax = 4398046511104

kernel.panic_on_oops = 1

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

net.ipv4.conf.all.rp_filter = 2

net.ipv4.conf.default.rp_filter = 2

fs.aio-max-nr = 1048576

net.ipv4.ip_local_port_range = 9000 65500


# sysctl -p



# vi /etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf


oracle   soft   nofile    1024

oracle   hard   nofile    65536

oracle   soft   nproc    16384

oracle   hard   nproc    16384

oracle   soft   stack    10240

oracle   hard   stack    32768

oracle   hard   memlock    134217728

oracle   soft   memlock    134217728


# yum -y install ksh,libaio-devel,unixODBC, unixODBC-devel

# yum -y update



# vi /etc/hosts


127.0.0.1       localhost.localdomain   localhost

# Public

192.168.56.201   ol6-122-rac1.localdomain        ol6-122-rac1

192.168.56.202   ol6-122-rac2.localdomain        ol6-122-rac2

# Private

192.168.1.201   ol6-122-rac1-priv.localdomain   ol6-122-rac1-priv

192.168.1.202   ol6-122-rac2-priv.localdomain   ol6-122-rac2-priv

# Virtual

192.168.56.203   ol6-122-rac1-vip.localdomain    ol6-122-rac1-vip

192.168.56.204   ol6-122-rac2-vip.localdomain    ol6-122-rac2-vip

# SCAN

#192.168.56.205   ol6-122-scan.localdomain ol6-122-scan

#192.168.56.206   ol6-122-scan.localdomain ol6-122-scan

#192.168.56.207   ol6-122-scan.localdomain ol6-122-scan



박화벽 중지


# service iptables stop

# chkconfig iptables off



NTP 설정


# vi /etc/sysconfig/ntpd

OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"


# service ntpd restart

# chkconfig ntpd on



Grid 설치 폴더 생성


# mkdir -p /u01/app/12.2.0.1/grid

# mkdir -p /u01/app/oracle/product/12.2.0.1/db_1

# chown -R oracle:oinstall /u01

# chmod -R 775 /u01/



Oracle user 접속 후 프로파일 설정


$ vi .bash_profile


# Oracle Settings

export TMP=/tmp

export TMPDIR=$TMP


export ORACLE_HOSTNAME=ol6-122-rac1.localdomain

export ORACLE_UNQNAME=CDBRAC

export ORACLE_BASE=/u01/app/oracle

export GRID_HOME=/u01/app/12.2.0.1/grid

export DB_HOME=$ORACLE_BASE/product/12.2.0.1/db_1

export ORACLE_HOME=$DB_HOME

export ORACLE_SID=cdbrac1

export ORACLE_TERM=xterm

export BASE_PATH=/usr/sbin:$PATH

export PATH=$ORACLE_HOME/bin:$BASE_PATH


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

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


alias grid_env='. /home/oracle/grid_env'

alias db_env='. /home/oracle/db_env'


$ vi grid_env

export ORACLE_SID=+ASM1

export ORACLE_HOME=$GRID_HOME

export PATH=$ORACLE_HOME/bin:$BASE_PATH


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

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


$ vi db_env

export ORACLE_SID=cdbrac1

export ORACLE_HOME=$DB_HOME

export PATH=$ORACLE_HOME/bin:$BASE_PATH


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

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



공유 스토리지 Block device 설정


# fdisk /dev/sdb

 n, p, 1, Enter, Enter, w 



Udev 설정


# vi /etc/scsi_id.config

options=-g


# /sbin/scsi_id -g -u -d /dev/sdb1

36000c299ab492a9c2ff010df22555c9f


# vi /etc/udev/rules.d/99-oracle-asmdevices.rules

KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="36000c299ab492a9c2ff010df22555c9f", SYMLINK+="oracleasm/asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"



Block Device 파티션 테이블 불러오기


# partprobe /dev/sdb1



Udev Rule 다시 불러오기


# udevadm control --reload-rules


# ls -al /dev/oracleasm/*

lrwxrwxrwx. 1 root root 7 Mar  8 21:11 /dev/oracleasm/asm-disk1 -> ../sdb1




2번 노드도 똑같이 설정.

ORACLE 12c Standard Edition 2

오라클 스탠다드 에디션 One은 2016년 12월을 끝으로 공식적으로 단종 되었습니다.


12c  12.1.0.2 이상에서 SE2를 지원하며, 그에 따른 차이점이 있는데, 잘 정리되어 있는곳도 없고, 영문 사이트들이 많아서 

간략하게 정리 해봅니다.


1. 서버당 CPU 2 Socket, 8 Threads 지원 (RAC 구성시 4 Socket, 16 Threads 까지 지원)

  - CPU의 Multi Threads를 사용 할 수 있다는 것이지 Oracle Parallelism을 사용 가능 하는것이 아님. 즉, Parallel Query, parallel datapump export/import, parallel index builds/scans 사용불가. 쉽게 말하면, CPU가 많이 필요할때 여러 CPU를 가져다 쓰긴 해도 DB에서 자체적으로 병렬 처리를 시킬수는 없다는 이야기. 

  - Background Process는 16 Threads 안에 포함 되지 않음.

  

2. 12c 의 새로운 기능인 Multitenant 기능 (CDB, PDB) 사용불가.

  - SE2의 Single DB를 EE CBD에 안으로 이관 시키는 것은 가능.


3. 기존 SE와 EE의 차이점은 그대로.

  - 오라클 튜닝팩 사용 불가 (AWR, ADDM, ASH 등)

  - Flashback Transaction 사용불가

  - Table Partitioning 사용불가

  - Parallel Datapump 사용불가


4. 최소 라이센스는 10 Named User Per Server.

  - 5인 이하의 업무 환경이라도 10유저를 구매 해야함.


5. 중소규모의 사업체에 추천하는 모델.

  - SE2 버전 역시 SE와 같은 선상에서 생각해야하는 모델이며, CPU사용에서 Multi Threads 기능만 추가 되었을뿐. 

11g 설치시 agent nmhs ins_emagent.mk 에러

vi $ORACLE_HOME/sysman/lib/ins_emagent.mk
Search for the line
$(MK_EMAGENT_NMECTL)
Change it to:
$(MK_EMAGENT_NMECTL) -lnnz11

Oracle 11g 11.2.0.4 RAC ASM 설치 (Last Ver.) - 3. DB 구축

ASMCA 로 ASM 디스크 그룹 구성




DB 설치전에 db_env 로딩


$ db_env

$ cd ../database

$ ./runInstaller



[root@rac2 ~]# /app/oracle/product/11.2.0.4/db_1/root.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /app/oracle/product/11.2.0.4/db_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.


엔진 설치 완료.



DBCA로 db 구성


RAC 노드 2개 모두 선택


EM을 설치


Datafile DATA 그룹에


FRA 는 RECO 영역에 넣음.


acfs 모듈을 불러오지 않은 상태기 때문에 아카이브는 패치 후에 지정.


필요 없는 옵션은 해제


필요한 프로세스 값과 캐릭터셋을 선택


DB 구성 완료.

Oracle 11g 11.2.0.4 RAC ASM 설치 (Last Ver.) - 2. Grid 설치

설치에 필요한 파일은 총 5개


Database 설치파일

p13390677_112040_Linux-x86-64_1of7.zip

p13390677_112040_Linux-x86-64_2of7.zip


Grid 설치 파일

p13390677_112040_Linux-x86-64_3of7.zip


OPatch 최신파일

p6880880_112000_Linux-x86-64.zip


DBPSU+GRID Patchset

p23615403_112040_Linux-x86-64


※ 11g 부터는 archive log dest를 공유 스토리지에 저장을 해야하는데, AIX나 HP 같은 UNIX자체적인 공유 파일 시스템을 갖추고 있다. 그래서 gpfs나 hacmp를 통해 공유 파일시스템에 파일 형식으로 archive를 저장 하는데 반해, 리눅스는 그것이 되질 않는다.

예전에 오라클에서 제공한 방식인 ocfs2는 장시간 사용 문제가 발생한다.

그래서 ASM 스토리지에 직접 Archive를 저장하거나 아니면 ASM에서 acfs 모듈을 띄워서 공유 파일시스템을 만든후 저장한다.

Oracle Linux 최신 커널에서 11.2.0.4 기본 설치파일에 내장되어 있는 acfs 모듈이 버전이 낮아 로딩이 되지 않는 관계로 acfs를 사용하려면 최신 패치까지 다 씌워야 한다.



GUI 환경에서 작업한다. (콘솔 or X Manager)


1번에 설치 파일을 올리고 오라클 계정으로 접속.


# su - oracle


콘솔 로그인시 프로파일을 못불러오는 경우가 있으니 강제로 로딩


$ cd ~

$ . .bash_profile

$ grid_env


Grid를 설치하기 위해 grid_env를 로딩


설치 파일이 있는 곳으로 가서

$ ./runInstaller


아래 순서대로 진행 하면 된다.


Add 버튼을 눌러 rac2를 추가해주고, SSH COnnectivity 버튼을 눌러 두 노드간의 SSH 통신을 구축한다.


비번만 넣고 setup


이렇게 에러 메세지가 나오지만 그냥 무시하고 설치 하면 된다.

아무런 영향 없다. (오라클 공식 메뉴얼에도 이렇게 나옴)



rac1 /app/oraInventory/orainstRoot.sh

rac2 /app/oraInventory/orainstRoot.sh

rac1 /app/grid/11.2.0.4/grid.root.sh

rac2 /app/grid/11.2.0.4/grid.root.sh


위 순서대로 반드시 Root 계정에서 실행 해준다.


[root@rac1 ~]# /app/oraInventory/orainstRoot.sh
Changing permissions of /app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /app/oraInventory to oinstall.
The execution of the script is complete.
[root@rac1 ~]# /app/grid/11.2.0.4/grid/root.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /app/grid/11.2.0.4/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /app/grid/11.2.0.4/grid/crs/install/crsconfig_params
Creating trace directory
User ignored Prerequisites during installation
Installing Trace File Analyzer
OLR initialization - successful
  root wallet
  root wallet cert
  root cert export
  peer wallet
  profile reader wallet
  pa wallet
  peer wallet keys
  pa wallet keys
  peer cert request
  pa cert request
  peer cert
  pa cert
  peer root cert TP
  profile reader root cert TP
  pa root cert TP
  peer pa cert TP
  pa peer cert TP
  profile reader pa cert TP
  profile reader peer cert TP
  peer user cert
  pa user cert
Adding Clusterware entries to upstart
CRS-2672: Attempting to start 'ora.mdnsd' on 'rac1'
CRS-2676: Start of 'ora.mdnsd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'rac1'
CRS-2676: Start of 'ora.gpnpd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'rac1'
CRS-2672: Attempting to start 'ora.gipcd' on 'rac1'
CRS-2676: Start of 'ora.cssdmonitor' on 'rac1' succeeded
CRS-2676: Start of 'ora.gipcd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'rac1'
CRS-2672: Attempting to start 'ora.diskmon' on 'rac1'
CRS-2676: Start of 'ora.diskmon' on 'rac1' succeeded
CRS-2676: Start of 'ora.cssd' on 'rac1' succeeded

ASM created and started successfully.

Disk Group OCRVOTE created successfully.

clscfg: -install mode specified
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
CRS-4256: Updating the profile
Successful addition of voting disk 278b92ca45434f2ebfe4ba8720932ef9.
Successfully replaced voting disk group with +OCRVOTE.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   278b92ca45434f2ebfe4ba8720932ef9 (/dev/asm-ocrvote01) [OCRVOTE]
Located 1 voting disk(s).
CRS-2672: Attempting to start 'ora.asm' on 'rac1'
CRS-2676: Start of 'ora.asm' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.OCRVOTE.dg' on 'rac1'
CRS-2676: Start of 'ora.OCRVOTE.dg' on 'rac1' succeeded
Configure Oracle Grid Infrastructure for a Cluster ... succeeded


[root@rac2 ~]# /app/oraInventory/orainstRoot.sh
Changing permissions of /app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /app/oraInventory to oinstall.
The execution of the script is complete.
[root@rac2 ~]# /app/grid/11.2.0.4/grid/root.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /app/grid/11.2.0.4/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /app/grid/11.2.0.4/grid/crs/install/crsconfig_params
Creating trace directory
User ignored Prerequisites during installation
Installing Trace File Analyzer
OLR initialization - successful
Adding Clusterware entries to upstart
CRS-4402: The CSS daemon was started in exclusive mode but found an active CSS daemon on node rac1, number 1, and is terminating
An active cluster was found during exclusive startup, restarting to join the cluster
Configure Oracle Grid Infrastructure for a Cluster ... succeeded


Grid 설치 완료.


맨 마지막에 100% 되고 무슨무슨 verify 에러 뜨는데 그냥 무시하고 next 누르면 된다.



사족 - 설치시 그냥 ASM 그룹 하나만 만들어서 거기에 OCRVOTE, DATA, FRA, Archive 다 넣어도 되긴한다.

그래도 구분해두는 것이 나중에 교체작업이나 ASM 관리하는데 있어서 좀 더 편하다고 생각한다.



Oracle 11g 11.2.0.4 RAC ASM 설치 (Last Ver.) - 1. 서버 세팅

오라클 리눅스 6 버전 64bit 기준 (영문)

 - 영문으로 설치하는 이유: 리눅스의 한글 시스템은 UTF-8 이기 때문에 EUC-KR로 DB를 세팅할 경우 로그에 나오는 한글이 전부 깨짐는 현상 발생. UTF-8로 세팅할 경우 한글로 설치 해도 무방.


★ 주의 - 오라클 11g 11.2.0.4 RAC 설치시 서버의 HOSTNAME이 대문자 일경우 인스톨러에서 SSH 통신이 되지 않아서 설치가 불가능하다. 


설치 환경 VMWare 12

네트워크는 Bridged 와 Host Only

HDD 120GB (/, swap, /app)



리눅스 설치시 설치 패키지


    Base System > Base
    Base System > Client management tools
    Base System > Compatibility libraries
    Base System > Hardware monitoring utilities
    Base System > Large Systems Performance
    Base System > Network file system client
    Base System > Performance Tools
    Base System > Perl Support
    Servers > Server Platform
    Servers > System administration tools
    Desktops > Desktop
    Desktops > Desktop Platform
    Desktops > Fonts
    Desktops > General Purpose Desktop
    Desktops > Graphical Administration Tools
    Desktops > Input Methods
    Desktops > X Window System
    Applications > Internet Browser
    Development > Additional Development
    Development > Development Tools


리눅스 설치 후 설정


필수 패키지 설치

# yum -y install libaio-devel ksh libstdc++ elfutils-libelf elfutils-libelf-devel libtool-ltdl ncurses readline unixODBC


OS 업데이트

# yum -y update


6.7 버전은 3.8 커널 탑재  업데이트시  커널이 올라가는데 4.1 버전까지 올라간다.

6.8 버전은 처음부터 4.1 버전이 탑재 되어 있다.

ACFS 모듈은 3.8 버전까지만 지원한다.


# vi /etc/sysctl.conf

fs.aio-max-nr = 1048576
fs.file-max = 6815744
#kernel.shmall = 2097152 
#kernel.shmmax = 1054504960
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
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=1048586

# sysctl -p


# vi /etc/security/limits.conf

oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  4096
oracle              hard    nofile  65536
oracle              soft    stack   10240

# vi /etc/pam.d/login

session    required     pam_limits.so

# rpm -Uvh cvuqdisk*

 (Grid 설치 디렉토리의 압축을 풀면 RPM 폴더에 있음)


그룹 및 유저 추가

groupadd -g 1000 oinstall
groupadd -g 1200 dba
useradd -u 1100 -g oinstall -G dba oracle
passwd oracle

※ Oracle이 제공하는 11.2.0.3이상 버전의 설치 메뉴얼에 따르면 따로 Grid 계정을 생성하지 않는것으로 변경했다.


# passwd oracle


# vi /etc/hosts

127.0.0.1       localhost.localdomain   localhost
# Public
192.168.0.111   ol6-112-rac1.localdomain        ol6-112-rac1
192.168.0.112   ol6-112-rac2.localdomain        ol6-112-rac2
# Private
192.168.1.111   ol6-112-rac1-priv.localdomain   ol6-112-rac1-priv
192.168.1.112   ol6-112-rac2-priv.localdomain   ol6-112-rac2-priv
# Virtual
192.168.0.113   ol6-112-rac1-vip.localdomain    ol6-112-rac1-vip
192.168.0.114   ol6-112-rac2-vip.localdomain    ol6-112-rac2-vip
# SCAN
192.168.0.115   ol6-112-scan.localdomain ol6-112-scan
192.168.0.116   ol6-112-scan.localdomain ol6-112-scan
192.168.0.117   ol6-112-scan.localdomain ol6-112-scan

※ IP 대역은 각자의 설정에 맞게 넣는다.

※ 11g는 SCAN IP를 통해 로드밸런싱 및 접속를 할 수 있다. SCAN 1개이상 설정 할 수 있다.


# vi /etc/security/limits.d/90-nproc.conf

# 이렇게 되어 있는 부분을 * soft nproc 1024 # 이렇게 고친다. * - nproc 16384

※ 왜 고치는지는 MOS Note [ID 1487773.1] 참조


# vi /etc/selinux/config

SELINUX=permissive


리눅스 방화벽 중지

# service iptables stop
# chkconfig iptables off


# vi /etc/sysconfig/ntpd

OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"


ORACLE 설치 폴더 생성

mkdir -p /app/grid/11.2.0.4/grid mkdir -p /app/oracle/product/11.2.0.4/db_1 chown -R oracle:oinstall /app chmod -R 775 /app/

※ 고객사가 원하는 폴더 혹은 자신이 원하는 (관리하기 쉬운) 폴더로 생성.



ORACLE 계정 Profile 수정


# su - oracle

$ vi .bash_profile

# Oracle Settings TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR ORACLE_HOSTNAME=ol6-112-rac1.localdomain; export ORACLE_HOSTNAME ORACLE_UNQNAME=RAC; export ORACLE_UNQNAME ORACLE_BASE=/app/oracle; export ORACLE_BASE GRID_HOME=/app/grid/11.2.0.4/grid; export GRID_HOME DB_HOME=$ORACLE_BASE/product/11.2.0.4/db_1; export DB_HOME ORACLE_HOME=$DB_HOME; export ORACLE_HOME ORACLE_SID=RAC1; export ORACLE_SID ORACLE_TERM=xterm; export ORACLE_TERM BASE_PATH=/usr/sbin:$PATH; export BASE_PATH PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH alias grid_env='. /home/oracle/grid_env' alias db_env='. /home/oracle/db_env'

$ vi grid_env

ORACLE_SID=+ASM1; export ORACLE_SID
ORACLE_HOME=$GRID_HOME; export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

$ vi db_env

ORACLE_SID=RAC1; export ORACLE_SID
ORACLE_HOME=$DB_HOME; export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

※ Grid 계정을 따로 생성해주지 않고 oracle 계정으로 DB와 ASM 모두 관리한다.

 - Alias를 통해 grid_env, db_env 명령을 통해 DB와 ASM 인스턴스 간의 선택을 할 수 있다..


서버 재구동하여 모든 설정 적용

# shutdown -r now


VMware에 HDD Disk를 공유 볼륨에 생성. (생성 방법은 http://db.necoaki.net/49 포스팅 참조)



ASM Disk 그룹은 크게 4가지로 나뉜다.


OCR과 VOTING DISK 정보가 들어있는 OCRVOTE

DATA가 들어가는 DATA

복구 영역이 들어가는 RECO (FRA)

Archive log가 저장되는 ARCH


여기에 들어갈 Disk를 자신이 선택하여 직접 생성해주면 된다.

OCRVOTE - 3GB

DATA - 50GB (10GB 5개)

RECO - 10GB

ARCH - 5GB


어차피 현업에서는 공유 볼륨을 잡아주는 일은 스토리지 엔지니어와, OS 엔지니어가 알아서 원하는대로 해준다.

리눅스를 잘한다면 대용량 디스크 하나만 붙여서 lv 하면 된다.


[root@rac1 ~]# ls -l /dev/sd*

brw-rw----. 1 root disk 8,  0 Aug  4 21:47 /dev/sda
brw-rw----. 1 root disk 8,  1 Aug  4 21:48 /dev/sda1
brw-rw----. 1 root disk 8,  2 Aug  4 21:47 /dev/sda2
brw-rw----. 1 root disk 8,  3 Aug  4 21:48 /dev/sda3
brw-rw----. 1 root disk 8, 16 Aug  4 21:47 /dev/sdb
brw-rw----. 1 root disk 8, 32 Aug  4 21:47 /dev/sdc
brw-rw----. 1 root disk 8, 48 Aug  4 21:47 /dev/sdd
brw-rw----. 1 root disk 8, 64 Aug  4 21:47 /dev/sde
brw-rw----. 1 root disk 8, 80 Aug  4 21:47 /dev/sdf
brw-rw----. 1 root disk 8, 96 Aug  4 21:47 /dev/sdg


각각의 디스크를 Fdisk 한다.


[root@rac1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xec049fb2.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-391, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-391, default 391):
Using default value 391

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


fdisk를 다하면 아래와 같이 된다.


[root@rac1 ~]# ls -l /dev/sd*
brw-rw----. 1 root disk 8,  0 Aug  4 21:47 /dev/sda
brw-rw----. 1 root disk 8,  1 Aug  4 21:48 /dev/sda1
brw-rw----. 1 root disk 8,  2 Aug  4 21:47 /dev/sda2
brw-rw----. 1 root disk 8,  3 Aug  4 21:48 /dev/sda3
brw-rw----. 1 root disk 8, 16 Aug  4 21:54 /dev/sdb
brw-rw----. 1 root disk 8, 17 Aug  4 21:54 /dev/sdb1
brw-rw----. 1 root disk 8, 32 Aug  4 21:54 /dev/sdc
brw-rw----. 1 root disk 8, 33 Aug  4 21:54 /dev/sdc1
brw-rw----. 1 root disk 8, 48 Aug  4 21:54 /dev/sdd
brw-rw----. 1 root disk 8, 49 Aug  4 21:54 /dev/sdd1
brw-rw----. 1 root disk 8, 64 Aug  4 21:54 /dev/sde
brw-rw----. 1 root disk 8, 65 Aug  4 21:54 /dev/sde1
brw-rw----. 1 root disk 8, 80 Aug  4 21:54 /dev/sdf
brw-rw----. 1 root disk 8, 81 Aug  4 21:54 /dev/sdf1
brw-rw----. 1 root disk 8, 96 Aug  4 21:56 /dev/sdg
brw-rw----. 1 root disk 8, 97 Aug  4 21:56 /dev/sdg1


기존에는 oracleasm 이라는 패키지를 통해 모듈을 띄워서 ASM 디스크를 적용했었는데 그 과정이 사라졌다.

Udev를 통해 그냥 Direct로 붙인다.


# vi /etc/scsi_id.config (없으니까 만든다.)

options=-g

#[root@rac1 ~]# /sbin/scsi_id -g -u -d /dev/sdb
36000c292d9f969dda718b42875402ba4
[root@rac1 ~]# /sbin/scsi_id -g -u -d /dev/sdc
36000c2966133c5d6de9c4f15e2c2b977
[root@rac1 ~]# /sbin/scsi_id -g -u -d /dev/sdd
36000c29446c31cffc46c1a9073719639
[root@rac1 ~]# /sbin/scsi_id -g -u -d /dev/sde
36000c29597c280fe33b8f0e9831ccfef
[root@rac1 ~]# /sbin/scsi_id -g -u -d /dev/sdf
36000c295fdea390d70fbf564d399a614
[root@rac1 ~]# /sbin/scsi_id -g -u -d /dev/sdg
36000c29571ed9c2b0aa031c228cb4098


# vi /etc/udev/rules.d/99-oracle-asmdevices.rules


KERNEL=="sdb1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="36000c292d9f969dda718b42875402ba4",NAME="asm-ocrvote01", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sdc1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="36000c2966133c5d6de9c4f15e2c2b977",NAME="asm-data01", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sdd1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29446c31cffc46c1a9073719639",NAME="asm-data02", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sde1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29597c280fe33b8f0e9831ccfef",NAME="asm-data03", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sdf1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="36000c295fdea390d70fbf564d399a614",NAME="asm-reco01", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sdg1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29571ed9c2b0aa031c228cb4098",NAME="asm-arch01", OWNER="oracle", GROUP="dba", MODE="0660"


블락 디바이스 파티션 테이블로 로딩 한다.

# /sbin/partprobe /dev/sdb1
# /sbin/partprobe /dev/sdc1
# /sbin/partprobe /dev/sdd1
# /sbin/partprobe /dev/sde1

UDEV 룰을 다시 불러 온다.

# /sbin/udevadm control --reload-rules
# /sbin/start_udev

[root@rac1 ~]# ls -l /dev/asm*
brw-rw----. 1 oracle dba 8, 97 Aug  4 22:53 /dev/asm-arch01
brw-rw----. 1 oracle dba 8, 33 Aug  4 22:53 /dev/asm-data01
brw-rw----. 1 oracle dba 8, 49 Aug  4 22:53 /dev/asm-data02
brw-rw----. 1 oracle dba 8, 65 Aug  4 22:53 /dev/asm-data03
brw-rw----. 1 oracle dba 8, 65 Aug  4 22:51 /dev/asm-disk1
brw-rw----. 1 oracle dba 8, 17 Aug  4 22:53 /dev/asm-ocrvote01
brw-rw----. 1 oracle dba 8, 81 Aug  4 22:53 /dev/asm-reco01


# shutdown -h now


서버를 끄고 2번으로 복사. (복사 방법은 http://db.necoaki.net/49 포스팅 참조)


호스트 네임 수정

# vi /etc/sysconfig/network


NETWORKING=yes
HOSTNAME=rac2
GATEWAY=192.168.219.1
NTPSERVERARGS=iburst


2번으로 복사하면 네트워크가 다른 이름으로 잡힌다.

eth0, eth1 로 바꿔준다.


[root@rac1 ~]# cd /etc/sysconfig/network-scripts/

[root@rac1 network-scripts]# mv ifcfg-Auto_eth2 ifcfg-eth0
[root@rac1 network-scripts]# mv ifcfg-Auto_eth3 ifcfg-eth1


ip 변경

# vi ifcfg-eth0

IPADDR=192.168.xxx.xxx


# vi ifcfg-eth1

IPADDR=192.168.xxx.xxx



[root@rac1 network-scripts]# vi /etc/udev/rules.d/70-persistent-net.rules


# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:55:a4:0f", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:55:a4:05", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"


# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:eb:bc:2e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:eb:bc:38", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"



이렇게 4개가 나오는데, 위에 두개를 지우고 아래 두개는 수정해준다.


# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:eb:bc:2e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:eb:bc:38", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"



2번에서도 디스크 마운트가 되어 있는지 확인

[root@rac1 network-scripts]# ls-lh /dev/asm*
brw-rw----. 1 oracle dba 8, 97 Aug  4 22:59 /dev/asm-arch01
brw-rw----. 1 oracle dba 8, 33 Aug  4 22:59 /dev/asm-data01
brw-rw----. 1 oracle dba 8, 49 Aug  4 22:59 /dev/asm-data02
brw-rw----. 1 oracle dba 8, 65 Aug  4 22:59 /dev/asm-data03
brw-rw----. 1 oracle dba 8, 17 Aug  4 22:59 /dev/asm-ocrvote01
brw-rw----. 1 oracle dba 8, 81 Aug  4 22:59 /dev/asm-reco01


# su - oracle

$ vi .bash_profile


# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=rac2; export ORACLE_HOSTNAME
ORACLE_UNQNAME=rac; export ORACLE_UNQNAME
ORACLE_BASE=/app/oracle; export ORACLE_BASE
GRID_HOME=/app/grid/11.2.0.4/grid; export GRID_HOME
DB_HOME=$ORACLE_BASE/product/11.2.0.4/db_1; export DB_HOME
ORACLE_HOME=$DB_HOME; export ORACLE_HOME
ORACLE_SID=rac2; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
BASE_PATH=/usr/sbin:$PATH; export BASE_PATH
PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

alias grid_env='. /home/oracle/grid_env'
alias db_env='. /home/oracle/db_env'
alias ll='ls -lh'


rac2 로 모두 수정


$ vi grid_env


ORACLE_SID=+ASM2; export ORACLE_SID
ORACLE_HOME=$GRID_HOME; export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH


$ vi db_env


ORACLE_SID=rac2; export ORACLE_SID
ORACLE_HOME=$DB_HOME; export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH



준비가 완료 됐으니 2번을 재부팅하고 1번을 같이 켜준다.


# shutdown -r now