ASM 용량 확인

오라클 ASM DG 용량 확인


col name format a10

col USABLE_FILE_GB format 999,999.00

col TOTAL_GB       format 999,999.00

col FREE_GB        format 999,999.00

col USABLE_CALC_GB format 999,999.00


select group_number "Group#",

       name,

       total_mb/1024 TOTAL_GB,

   round((total_mb - USABLE_FILE_MB)/1024,2) USED_GB,

       USABLE_FILE_MB/1024 USABLE_FILE_GB,    

   free_mb/1024 FREE_GB,

       100-round(free_mb/total_mb*100) "usgae(%)",

        ((FREE_MB - REQUIRED_MIRROR_FREE_MB))/1024 USABLE_CALC_GB,

       type, state

from v$asm_diskgroup;


실제 사용하는 ASM의 용량을 확인 할 수 있습니다.


Free 와 Usable의 차이는 

Exadata의 경우, 남은 디스크 용량이 있으나 오라클 측에서 판매시 용량 제한을 위해 걸어둔 락이 있을시 사용 할 수 있는 공간의 이 FREE와 USABLE_FILE_DB 컬럼의 차이로 나타납니다.



    Group# NAME TOTAL_GB    USED_GB USABLE_FILE_GB FREE_GB   usgae(%) USABLE_CALC_GB TYPE STATE

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

1 DATA    119.99      37.87       82.12   82.12 32     82.12 EXTERN CONNECTED

2 RECO     60.00 1.34       58.65   58.65 2     58.65 EXTERN CONNECTED



일반적인 RAC ASM의 경우 DG를 RECO나 DATA만을 설정하기도 하고, DATA에 모두 넣는 경우도 있습니다.

OCR_VOTE 부분만 따로 빼서 설정하는 경우도 있습니다.



ASM을 모델링 할때


OCR, DATA, RECO, ACFS, FRA 등을 구성 할 수 있습니다.

FRA를 자주 활용 한다면 FRA DG를 크게 구성해서 FRA를 활용하는 방법도 있습니다.


'ORACLE > Operation & Admin' 카테고리의 다른 글

Table 또는 인덱스의 사이즈를 확인 하는 쿼리  (0) 2018.11.01
CURSOR_SHARING  (0) 2018.10.31
ASM 용량 확인  (0) 2018.10.28
Datafile Resize 계산하기  (0) 2018.10.18
Listener password  (0) 2018.10.14
CBO 와 바인드 변수, 바인드 피크  (0) 2018.05.17

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 관리하는데 있어서 좀 더 편하다고 생각한다.



  1. 안녕하세요
    문서보다가질문이있어서요
    voting disk 갯수는 2N+1 아닌가요?
    왜한개만 하신건지..

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

    여기서 해결했네요 ^^

CentOS 5.8 64bit에 Oracle 11g ASM 방식 Standalone 설치 1.설치 세팅

RAC 구성을 하지 않고 ASM 만 구성하는 방식입니다.

ASM을 근래들어 많이 쓰고 있기도 하고, 굳이 RAC를 구성하지 않아도 여러가지 장점이 있기 때문에 설치해보도록 합니다.


CentOS가 무료기 때문에 많은 업체에서 설치하고 있지만, CentOS 에서는 ASM 모듈이 안올라오는데 이걸 올리려면 몇가지 사전 작업을 해줘야 합니다.

우선 Public Oracle yum repo 를 추가해서 커널의 업그레이드를 해줘야 합니다.


Public Oracle yum repo 설치


# yum install oracleasm


명령어를 입력하면 kernel-uek 및 여러가지를 설치 한다고 나옵니다.

CentOS가 RedHat Enterprise의 커널을 사용하는데 uek 커널은 Oracle linux server의 커널입니다.

uek 커널에서 MySQL을 구동시에 레드햇 커널보다 9배나 높은 성능을 벤치마킹에서 보였다고 합니다.

즉, 오라클 DB에서도 좀더 나은 성능을 구현해주겠지요.


커널 설치가 끝나면 init 6 재부팅을 하고나서 uek 커널로 부팅을 해줘야 하고, 계속 설치를 진행합니다.


# yum -y install binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat glibc-headers unixODBC unixODBC-devel pdksh libXp libXp-devel


기존의 패키지만 설치 해주는 것이 아니라 추가로 설치 해줘야하는 패키지가 있습니다.


Public Oracle YUM repo를 설치 했다면


# yum -y install ocfs2 ocfs2-tools ocfs2-console oracleasm oracleasmlib oracleasm-support


이렇게 설치해주면 되는데, 만약 안된다면 


http://www.oracle.com/technetwork/server-storage/linux/downloads/rhel5-084877.html


https://oss.oracle.com/index.html


여기서 커널에 맞는 패키지를 찾아서 설치합니다.


파라메터 값 설정


/etc/hosts

<ip> <hostname>         #설치하는 리눅스의 ip와 호스트네임을 적는다.


/etc/sysctl.conf

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 4180152320

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 4194304

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586


/etc/security/limits.conf

grid    soft    nproc   2047

grid    hard    nproc   16384

grid    soft    nofile  1024

grid    hard    nofile  65536

oracle    soft    nproc    2047

oracle    hard    nproc    16384

oracle    soft    nofile    1024

oracle    hard    nofile    65536


/etc/pam.d/login

session    required    pam_limits.so


# groupadd oinstall

# groupadd dba

# groupadd oper

# useradd -g dba -G oinstall,oper oracle

# passwd oracle

# mkdir -p /oracle/base

# mkdir -p /oracle/grid

# chown -R oracle:dba /oracle


/home/oracle/.bash_profile

export PATH

export LANG=C

export EDITOR=vim

export ORACLE_BASE=/oracle/base

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db

export ORACLE_SID=DB의SID

export GRID_HOME=/oracle/grid

export ORACLE_TERM=xterm

export TMPDIR=/tmp

export TMP=/tmp

export TNS_ADMIN=$ORACLE_BASE/network/admin

export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949

export PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:/bin:/usr/bin:/sbin:/usr/ccs/bin:.:$PATH

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

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


※ Grid 설치시 ORACLE_HOME의 경로와 Gird의 설치 경로가 중복되지 않도록 설정을 권장하고 있습니다.
만약 ORACLE_HOME 이 /oracle/base/product/11.2.0/db 인데,
GRID_HOME이 /oracle/base/product/11.2.0/grid 또는 /oracle/base/product/11.2.0/crs 라면
Grid 의 경로가 ORACLE_BASE 를 포함하고 있어서 문제 발생.

마운트 된 HDD들을 ASM으로 묶는 작업을 할 것인데, fdisk로 파티셔닝은 되어 있어야 합니다.

# oracleasm configure -i                                          ## asm 환경설정
oracle
dba
y
y

# oracleasm init                                                      ## asm 모듈을 불러옵니다.
# oracleasm createdisk                                           ## 명령을 이용해서 ocr_vote01~03, asm01~03 디스크를 생성해줍니다.

ex>
# oracleasm createdisk ocr_vote01 /dev/sdb1
# oracleasm createdisk ocr_vote02 /dev/sdc1
# oracleasm createdisk ocr_vote03 /dev/sdd1
# oracleasm createdisk asm01 /dev/sde1
# oracleasm createdisk asm02 /dev/sdf1
# oracleasm createdisk asm03 /dev/sdg1
예제 이기 때문에 실무에서는 디스크 이름이라던가 sdb, vdb 등등.. 달라 질 수 있습니다.

# oracleasm scandisks
# oracleasm listdisks

# chown -R oracle:dba /dev/oracleasm

설정이 끝났습니다.

Grid ware를 설치 해야하기 때문에 

p10098816_112020_Linux-x86-64_1of7.zip
p10098816_112020_Linux-x86-64_2of7.zip
p10098816_112020_Linux-x86-64_3of7.zip

까지 내려 받습니다. 압축을 풀면 설치 준비가 끝.

Oracle 11g Grid - ASM 방식 RAC 설치 - 3. 엔진 설치 및 DB 생성

오라클 엔진 설치


$  cd /oracle/software/database

$ ./runInstaller













설치 중간에 root 권한으로 root.sh를 실행 시켜주라고 나옵니다.

rac1, rac2 순으로 실행 시켜주면 완료 




ASMCA 구성


$ asmca



생성 버튼을 누릅니다.



ASM 디스크 2개를 골라서 디스크 그룹을 만들어 줍니다. ASM을 구성하려면 최소 두개 이상의 디스크가 필요 합니다.

남은 하나의 디스크는 플래시백 디스크로 구성합니다.




완료가 되면 다시 생성 버튼을 누르고





생성 되었습니다.



$ crs_stat -t


명령으로 구동 확인



DB 생성


$ dbca









찾아보기를 눌러 경로 지정을 해줍니다.




찾아보기를 눌러 경로 지정을 해줍니다.

플래시 경로를 지정해 줍니다.










DB 설정이 종료 되었습니다.


$ crs_stat -t




RAC TEST


$ crs_stop –f ora.rac.db

$ crs_start –f ora.rac.db



rac1에 oltp-service, rac2에는 fail-over용 생성


$ srvctl add service –d racdb –s oltp_service –r racdb1 –a racdb2


$ srvctl status service -d racdb -s oltp_service

Service oltp_service is running on instance(s) racdb1 


$ srvctl start service –d RAC –s oltp_service 



리스너 상태 조회


$ lsnrctl status



Oracle 11g Grid - ASM 방식 RAC 설치 - 2. Grid Infrastructure 설치

 Grid Infrastructure 는 양 노드간에 클러스터 구성을 잡아주는 프로그램 입니다.

9i, 10g 에서는 equipbalance를 직접 잡아줘야 했지만, 11g에서는 grid를 구성 함으로 그 과정을 생략 할 수 있습니다.


우선 설치 파일을 /oracle/install 폴더에 복사하고 나서 압축을 풀어 줍니다.

WinSCP 등을 이용하여 oracle 계정을 접속, 복사 해줍니다.


$ unzip p10098816_112020_LINUX_1of7.zip

$ unzip p10098816_112020_LINUX_2of7.zip

$ unzip p10098816_112020_LINUX_3of7.zip


$ su -


# cd /oracle/install/grid/rpm 

# rpm -ivh cvuqdisk-1.0.9-1.rpm


그리고 이 파일을 rac2에도 복사 해서 설치해 줍니다.


rac1]# scp /oracle/install/grid/rpm/cvuqdisk-1.0.9-1.rpm rac2:/oracle/


rac2]$ su -

rac2]# /oracle/cvuqdisk-1.0.9-1.rpm


그리고 설치가 완료 되면 rac1 에서 grid를 설치합니다.


$ ./runInstaller

























OS 패키지 때문에 뜨는 오류 이니까 그냥 확인을 누르고 다음으로 넘어갑니다.




클러스터 상태 확인


$ src_stat -t



Global Service Daemon(GSD) 가동


$ srvctl enable nodeapps -g

$ srvctl start nodeapps



$ ocrcheck



Grid Infrastructure 설치가 끝났습니다.


Oracle 11g Grid - ASM 방식 RAC 설치 - 1. 리눅스 설치 및 세팅

리눅스 설치


오라클 11g를 RAC 방식으로 설치하기 위해서는 우선 리눅스를 설치 해야하는데,

Oracle Enterprise Linux 5.6 버전을 이용해 설치 하도록 하겠습니다.


기본적으로 RHEL5 나 OEL5에는 설치가 잘됩니다. 다만, 같은 RHEL 5 기반인 Cent OS 에서는 다른 패치가 필요하다고 하는데,

그 패치를 구하는게 쉽지가 않습니다.

제가 5일 밤을 새가면서 CentOS에 패치를 하고 설치 해보려고 했으나 실패....


OEL5.6 버전으로 진행합니다.








HDD 파티션 분할


  /

 5000 MB

  /boot

 100 MB

  swap

 3072 MB (RAM 설정의 2~3배 가량 설정 해주는 것이 좋음)

  /home

 1000 MB

  /var  1000 MB
  /tmp

 2048 MB (11g 설치에 tmp 폴더는 2GB 이상 필요함)

  /oracle

 최대 가능한 용량까지 


11



VM웨어에서도 브릿지를 이용하지 않고 NAT와 Host Only에서 DHCP 설정이 아닌 고정 설정이 가능한데,

Edit → Virtual Network Editor 메뉴에 들어가서 직접 대역폭을 잡아주면 됩니다.



서브넷 부분을 잡아주고 나서 



네트워크 아답터를 커스텀으로 설정한 VMnet을 잡아주면 됩니다.

그러면 자신이 원하는 대역폭으로 네트워크 고정 ip 설정이 가능합니다. 


01








시스템 도구에서 옵션 패키지 버튼을 누르고 아래와 같이 파일을 추가 설치 해줍니다.


ocfs2-2.6.18-238.el5-1.4.6.-2.el5.i686

ocfs2-tools-1.6.3-2.el5.i386

ocfs2-console-1.6.3-2.el5.i386


oracleasm-2.6.18-238.el5-2.0.5.1.el5.i686

oracleasm-support-2.1.4-1.el5.i386


sysstat-7.0.2-3.el5_5.1.i386


















리눅스 설치가 끝나고 기본 해상도가 800x600 이니 VM Tool을 설치해서 자신의 모니터에서 작업하기 좋은 해상도로 변경 해줍니다.

OEL 기본 빨간 배경화면이 눈 아프면 탕화면에서 오른클릭 → 배경화면 변경 으로 바꿀수 있습니다.



리눅스에 오라클 설치 세팅 하기



0. Core Dump file을 생성하도록 설정


오라클 installer 는 설치하는 동안 core dump를 생성 할 수 있는지 여러 파일을 체크하게 됩니다. 

아래의 파일들이 해당 파일들입니다.


/proc/sys/kernel/suid_dumpable

/proc/sys/fs/suid_dumpable

/proc/sys/kernel/core_setuid_ok 


이 파일들에 설정되어 있는 값이 1 이어야 설치나 운영 중에 위험한 상황이 발생했을 때 그 내역을 core dump 파일에 저장을 해 두게 됩니다.

이 값들을 변경하여 core dump 를 만들게 하려면 아래와 같이 하면 됩니다.


- /etc/profile 수정 

변경 전 값 : ulimit –s –c 0 >  /dev/null 2 > &1 

변경 후 값 : ulimit –s –c unlimited > /dev/null 2 > &1 



- /etc/sysctl.conf 수정 

kernel.core_uses_pid = 1 (기본값)

fs.suid_dumpable = 1 추가하기



1. 설치 되어있어야 하는 패키지 목록


rpm -Uvh binutils-2.*

rpm -Uvh compat-libstdc++-33*

rpm -Uvh elfutils-libelf-0.*

rpm -Uvh elfutils-libelf-devel-*

rpm -Uvh gcc-4.*

rpm -Uvh gcc-c++-4.*

rpm -Uvh glibc-2.*

rpm -Uvh glibc-common-2.*

rpm -Uvh glibc-devel-2.*

rpm -Uvh glibc-headers-2.*

rpm -Uvh ksh-2*

rpm -Uvh libaio-0.*

rpm -Uvh libaio-devel-0.*

rpm -Uvh libgcc-4.*

rpm -Uvh libstdc++-4.*

rpm -Uvh libstdc++-devel-4.*

rpm -Uvh make-3.*

rpm -Uvh unixODBC-2.*

rpm -Uvh unixODBC-devel-2.*

rpm -Uvh numactl-0.9.8-*

rpm -Uvh munactl-devel-0.9.8-*



2. 파라미터 값 설정 하기


# vi /etc/hosts

   → 자신이 설정 해준 ip를 입력합니다. Private 를 제외하고는 같은 대역을 사용합니다.  

#Public

192.168.32.129    rac1

192.168.32.130    rac2


#Private

192.168.219.128    rac1-priv

192.168.219.129    rac2-priv


#VIP

192.168.32.11    rac1-vip

192.168.32.12    rac2-vip


#Grid SCAN

192.168.32.10    rac-cluster-scan


# vi /etc/sysctl.conf

   → 리눅스에게 오라클이 사용할 메모리 값을 지정해주는 부분입니다.

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 536870912 (64bit) or 2147483648 (32bit)

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 = 10485861


# /sbin/sysctl -p


# vi /etc/security/limits.conf


grid    soft    nproc    2047

grid    hard   nproc    16384

grid    soft    nofile     1024

grid    hard    nofile    65536

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 203.248.240.140 


# mv /etc/ntp.conf /etc/ntp.conf.orig


   → RAC환경에서는 여러개의 시스템이 하나의 DB를 통해 서비스를 제공하게 되므로, 각 시스템사이의 시간이 제각각 들어가지 않도록 시간설정을 잘 해주셔야합니다. 이를 위해서 NTP(Network Time Protocol)를 설정하여 모든 Node들의 시간을 동기화 시키면 되었었는데, 11g R2에서 CTSS (Cluster Time Synchronization Service)라는 신기능이 추가되었습니다. 만약 NTP를 설정하지 않는다면 CTSS라는 서비스가 활성화되며 오라클이 알아서 특정 노드를 기반으로 시간을 동기화해주게 됩니다. 따라서 시간과 관련된 어떠한 작업도 하지 않아도 되게끔 변경되었습니다. 

  그런데 이 명령어를 입력하는 것은, Grid Infrastructure 설치 과정중에 NTP 설정이 되어있지 않지만, NTP와 관련된 파일이 존재하고 있다는 경고문구가 발생하기 때문입니다. 저랑 똑같이 설치진행중이시면 저렇게 입력하여 설정파일의 이름을 변경해주시면 되고, 아니시라면 애초에 저 파일이 없을 수도 있습니다. 그리고 그냥 놔두더라도 나중에 경고문구가 발생할 뿐이지 설치에 지장을 주지는 않습니다.


# service ntpd restart


# groupadd –g oinstall

# groupadd –g dba 

# useradd –g oinstall –G dba oracle 

# passwd oracle 


# mkdir -p /oracle/base/product/11g

# mkdir -p /oracle/grid_home

# chown -R oracle.oinstall /oracle

# chmod –R 755 /oracle


# su - oracle


$ vi .bash_profile


PATH=$PATH:$HOME/bin


export PATH

export EDITOR=vi

export ORACLE_HOSTNAME=rac1

export ORACLE_BASE=/oracle/base

export ORACLE_HOME=$ORACLE_BASE/product/11g

export ORA_CRS_HOME=/oracle/grid_home

export CRS_HOME=${ORA_CRS_HOME}

export GRID_HOME=/oracle/grid_home

export ORACLE_SID=rac1

export ORACLE_TERM=xterm

export LANG=ko_KR.UTF-8

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export PATH=/usr/sbin:$PATH

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

export PATH=/$PATH:${ORACLE_HOME}/bin:${CRS_HOME}/bin

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

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


불필요한 프로그램들 구동시 실행 시키지 않게 등록


# 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 iptables off 


# init 0




스토리지 추가와 ASM 설정



리눅스를 종료하여 ASM에 이용할 스토리지들을 추가하도록 합니다.









브라우저 버튼을 클릭해서 직접 경로를 잡아줘야 합니다.

그래야 rac2에서도 공용으로 사용 할수 있습니다.






Advanced... 버튼으 눌러 scsi 설정을 잡아줍니다.



이렇게 6번을 반복하여 6개의 디스크를 추가 합니다.


  ocr_vote01

 1GB 

  SCSI 1:0 

  ocr_vote02

 1GB

  SCSI 1:1

  ocr_vote03

 1GB

  SCSI 1:2

  asm01

 5GB

  SCSI 1:3

  asm02

 5GB

  SCSI 1:4

  asm03

 5GB

  SCSI 1:5
















rac1.vmx 파일을 메모장으로 열어서


disk.locking = "FALSE" 

diskLib.dataCacheMaxSize = "0" 

scsi1.sharedBus = "virtual"

scsi1:0.deviceType = "disk" 

scsi1:1.deviceType = "disk"

scsi1:2.deviceType = "disk" 

scsi1:3.deviceType = "disk" 

scsi1:4.deviceType = "disk"

scsi1:5.deviceType = "disk" 


을 추가 해줍니다.



그리고 ▶ 버튼을 눌러 리눅스를 구동 합니다.


추가 된 스토리지를 확인 합니다.


# ls -l /dev/sd*



# fdisk /dev/sdb 

# fdisk /dev/sdc 

# fdisk /dev/sdd 

# fdisk /dev/sde 

# fdisk /dev/sdf 

# fdisk /dev/sdg 



같은 방법으로 6개의 HDD의 파티션을 잡아 줍니다.



ASM 설정하기


# oracleasm configure –i

# oracleasm init



# oracleasm createdisk ocr_vote01 /dev/sdb1

# oracleasm createdisk ocr_vote02 /dev/sdc1

# oracleasm createdisk ocr_vote03 /dev/sdd1

# oracleasm createdisk asm01 /dev/sde1

# oracleasm createdisk asm02 /dev/sdf1

# oracleasm createdisk asm03 /dev/sdg1

 → ASM 공유 디스크 생성


# oracleasm scandisks

 → 스캔 작업


# oracleasm listdisks

 → 생성 리스트 확인



# chown –R oracle.oinstall /dev/oracleasm/


Node1 (rac1) 의 설정이 모두 끝났습니다. Node2 (rac2) 생성을 위해 리눅스를 종료합니다.


# init 0




Node2 (rac2) 구성하기


rac1 파일 두개를 rac2 폴더에 복사 해 줍니다.


rac1.vmdk

rac1.vmx





VM의 이름을 rac2 로 변경



OK를 누르고 리눅스를 구동.



복사 했다고 클릭해줍니다.


#neat


를 실행 시켜 ip 설정을 해줍니다.

eth0.bak, eth1.bak 는 체크를 해제하고 삭제 해줍니다.



hosts 파일에 설정한대로 rac2의 ip 설정을 해줍니다.

그리고 rac2를 재부팅 하고, rac1도 부팅 시켜 줍니다.


리고 클러스터웨어가 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


equivalence 설정

SSH 공개키/개인키 생성

오라클 계정으로 로그인 후 모든 노드에서 각각 실행합니다.

Node1, 2

$ 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에 복사


Node1,2 에서 각각 실행
(암호를 묻는 과정이 나오지 않으면 올바르게 설정된 것임)

$ ssh rac1 date  
$ ssh rac1-priv date
$ ssh rac2 date
$ ssh rac2-priv date