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

  1. vmware에서 asm 디스크 추가시 /sbin/scsi_id -g -u -d /dev/sdb 실행하면 코드가 안나왔는데
    http://allthatlinux.com/dokuwiki/doku.php?id=vmware_%EC%97%90%EC%84%9C_scsi_id_%EA%B0%92%EC%9D%B4_%EB%82%98%EC%98%A4%EC%A7%80_%EC%95%8A%EB%8A%94%EA%B2%BD%EC%9A%B0_%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95

    여기서 해결했네요 ^^

티스토리 툴바