1. 2018.12.25 RAC용 점검 스크립트
  2. 2018.11.06 리눅스7 버전에서 11g grid 설치시 root.sh 실패
  3. 2017.11.09 Oracle 12c R2 RAC 설치 #2
  4. 2017.11.09 Oracle 12c R2 RAC 설치 #1
  5. 2016.08.05 Oracle 11g 11.2.0.4 RAC ASM 설치 (Last Ver.) - 3. DB 구축
  6. 2016.08.05 Oracle 11g 11.2.0.4 RAC ASM 설치 (Last Ver.) - 2. Grid 설치 (2)
  7. 2016.08.04 Oracle 11g 11.2.0.4 RAC ASM 설치 (Last Ver.) - 1. 서버 세팅 (1)
  8. 2014.10.12 CRS에 cluster DB를 등록하는 방법
  9. 2012.07.02 Oracle 11g Grid - ASM 방식 RAC 설치 - 3. 엔진 설치 및 DB 생성
  10. 2012.07.01 Oracle 11g Grid - ASM 방식 RAC 설치 - 2. Grid Infrastructure 설치
  11. 2012.07.01 Oracle 11g Grid - ASM 방식 RAC 설치 - 1. 리눅스 설치 및 세팅
  12. 2012.06.06 Oracle 10g RAC (rawdevice) 설치 - 4 DB 생성
  13. 2012.06.06 Oracle 10g RAC (rawdevice) 설치 - 3 데이터베이스 엔진 설치
  14. 2012.06.06 Oracle 10g RAC (rawdevice) 설치 - 2 클러스터웨어 설치
  15. 2012.06.04 Oracle 10g RAC (rawdevice) 설치 - 1 리눅스 설치 및 세팅
  16. 2012.06.03 Oracle 10g RAC (ASM) 설치 - 7 TEST
  17. 2012.06.03 Oracle 10g RAC (ASM) 설치 - 6 DB 구성
  18. 2012.06.03 Oracle 10g RAC (ASM) 설치 - 5 ASM 구성 및 패치 (1)
  19. 2012.06.03 Oracle 10g RAC (ASM) 설치 - 4 Database 엔진 설치
  20. 2012.06.03 Oracle 10g RAC (ASM) 설치 - 3 클러스터웨어 설치
  21. 2012.06.03 Oracle 10g RAC (ASM) 설치 - 2 노드 구성하기
  22. 2012.05.30 Oracle 10g RAC (ASM) 설치 실습을 위한 VMware 세팅 및 RHEL4 설치

RAC용 점검 스크립트

RAC 1노드에서 양쪽 노드 모두 확인하는 점검 스크립트입니다.



엔지니어 분들이 고객사 점검에 사용하면 좋게 만들었습니다.

운영하시는 분들도 일일 상태 체크나 DB관련 정보 확인을 위해 사용 할 수 있습니다.

11g 기준으로 작성 되었습니다.


check_RAC.sql


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

RAC용 점검 스크립트  (0) 2018.12.25
무료 오라클 성능진단 툴 Mumbai 3.1.1  (0) 2018.12.25
Table 또는 인덱스의 사이즈를 확인 하는 쿼리  (0) 2018.11.01
CURSOR_SHARING  (0) 2018.10.31
ASM 용량 확인  (0) 2018.10.28
Datafile Resize 계산하기  (0) 2018.10.18

리눅스7 버전에서 11g grid 설치시 root.sh 실패

root.sh 실행시 

아래와 같이 나오며 설치 실패 되는 경우


[root@localhost /]# /u01/app/11.2.0/grid/perl/bin/perl -I/u01/app/11.2.0/grid/perl/lib -I/u01/app/11.2.0/grid/crs/install /u01/app/11.2.0/grid/crs/install/roothas.pl

Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_params

Creating trace directory

User ignored Prerequisites during installation

LOCAL ADD MODE

Creating OCR keys for user ‘oracle’, privgrp ‘oinstall’..

Operation successful.

LOCAL ONLY MODE

Successfully accumulated necessary OCR keys.

Creating OCR keys for user ‘root’, privgrp ‘root’..

Operation successful.

CRS-4664: Node localhost successfully pinned.

Adding Clusterware entries to inittab

ohasd failed to start

Failed to start the Clusterware. Last 20 lines of the alert log follow:

2016-01-01 02:14:46.806:

[client(11401)]CRS-2101:The OLR was formatted using version 3.

2016-01-01 02:14:49.572:

[client(11424)]CRS-1001:The OCR was formatted using version 3.


ohasd failed to start at /u01/app/11.2.0/grid/crs/install/roothas.pl line 377, line 4.




해결 방안


1. deinstall 해서 설치를 삭제


[root@localhost deinstall]# su – oracle

Last login: Fri Jan 1 02:17:02 EST 2016 on pts/1

[oracle@localhost ~]$ cd /u01/app/11.2.0/grid/deinstall

[oracle@localhost deinstall]$ ./deinstall


Checking for required files and bootstrapping …

Please wait …

Location of logs /tmp/deinstall2016-01-01_02-30-16AM/logs/


############ ORACLE DEINSTALL & DECONFIG TOOL START ############

######################### CHECK OPERATION START ###########################

[START] Install check configuration ##


Checking for existence of the Oracle home location /u01/app/11.2.0/grid

Oracle Home type selected for deinstall is: Oracle Grid Infrastructure for a Standalone Server

Oracle Base selected for deinstall is: /u01/app/oracle

Checking for existence of central inventory location /u01/app/oraInventory

Checking for existence of the Oracle Grid Infrastructure home /u01/app/11.2.0/grid

Checking for sufficient temp space availability on node(s) : ‘localhost.localdomain’


## [END] Install check configuration ##

Traces log file: /tmp/deinstall2016-01-01_02-30-16AM/logs//crsdc.log

Network Configuration check config START

Network de-configuration trace file location: /tmp/deinstall2016-01-01_02-30-16A/logs/netdc_check2016-01-01_02-30-40-AM.log

Network Configuration check config END

Asm Check Configuration START


ASM de-configuration trace file location: /tmp/deinstall2016-01-01_02-30-16AM/logs/asmcadc_check2016-01-01_02-30-41-AM.log

ASM configuration was not detected in this Oracle home. Was ASM configured in this Oracle home (y|n) [n]: n

ASM was not detected in the Oracle Home


######################### CHECK OPERATION END #########################

####################### CHECK OPERATION SUMMARY #######################

Oracle Grid Infrastructure Home is: /u01/app/11.2.0/grid

The cluster node(s) on which the Oracle home deinstallation will be performed are:null

Oracle Home selected for deinstall is: /u01/app/11.2.0/grid

Inventory Location where the Oracle home registered is: /u01/app/oraInventory

ASM was not detected in the Oracle Home

Do you want to continue (y – yes, n – no)? [n]: y

A log of this session will be written to: ‘/tmp/deinstall2016-01-01_02-30-16AM/logs/deinstall_deconfig2016-01-01_02-30-35-AM.out’

Any error messages from this session will be written to: ‘/tmp/deinstall2016-01-01_02-30-16AM/logs/deinstall_deconfig2016-01-01_02-30-35-AM.err’


######################## CLEAN OPERATION START ########################

ASM de-configuration trace file location: /tmp/deinstall2016-01-01_02-30-16AM/logs/asmcadc_clean2016-01-01_02-30-57-AM.log

ASM Clean Configuration END


Network Configuration clean config START

Network de-configuration trace file location: /tmp/deinstall2016-01-01_02-30-16A/logs/netdc_clean2016-01-01_02-30-57-AM.log

De-configuring backup files…

Backup files de-configured successfully.


The network configuration has been cleaned up successfully.

Network Configuration clean config END


—————————————->


Run the following command as the root user or the administrator on node “localhost”.


/tmp/deinstall2016-01-01_02-30-16AM/perl/bin/perl -I/tmp/deinstall2016-01-01_02-30-16AM/perl/lib -I/tmp/deinstall2016-01-01_02-30-16AM/crs/install /tmp/deinstall2016-01-01_02-30-16AM/crs/install/roothas.pl -force -deconfig -paramfile “/tmp/deinstall2016-01-01_02-30-16AM/response/deinstall_Ora11g_gridinfrahome1.rsp”


Press Enter after you finish running the above commands


<————————————-


This is the point where you have to execute the command highlighted and execute it from root user and wait for it to complete in order to deconfigure the Oracle Restart Stack.


[root@localhost ~]# /tmp/deinstall2016-01-01_02-30-16AM/perl/bin/perl -I/tmp/deinstall2016-01-01_02-30-16AM/perl/lib -I/tmp/deinstall2016-01-01_02-30-16AM/crs/install /tmp/deinstall2016-01-01_02-30-16AM/crs/install/roothas.pl -force -deconfig -paramfile “/tmp/deinstall2016-01-01_02-30-16AM/response/deinstall_Ora11g_gridinfrahome1.rsp”

Using configuration parameter file: /tmp/deinstall2016-01-01_02-30-16AM/response/deinstall_Ora11g_gridinfrahome1.rsp

CRS-2613: Could not find resource ‘ora.cssd’.

CRS-4000: Command Stop failed, or completed with errors.

CRS-2613: Could not find resource ‘ora.cssd’.

CRS-4000: Command Delete failed, or completed with errors.

CRS-4133: Oracle High Availability Services has been stopped.

Successfully deconfigured Oracle Restart stack



#########################

Setting the force flag to false

Setting the force flag to cleanup the Oracle Base

Oracle Universal Installer clean START


Detach Oracle home ‘/u01/app/11.2.0/grid’ from the central inventory on the local node : Done

Delete directory ‘/u01/app/11.2.0/grid’ on the local node : Done

Delete directory ‘/u01/app/oraInventory’ on the local node : Done

Delete directory ‘/u01/app/oracle’ on the local node : Done

Oracle Universal Installer cleanup was successful.

Oracle Universal Installer clean END


## [START] Oracle install clean ##

Clean install operation removing temporary directory ‘/tmp/deinstall2016-01-01_02-30-16AM’ on node ‘localhost’

## [END] Oracle install clean ##

######################### CLEAN OPERATION END #########################

####################### CLEAN OPERATION SUMMARY #######################

Oracle Restart was already stopped and de-configured on node “localhost”

Oracle Restart is stopped and de-configured successfully.

Successfully detached Oracle home ‘/u01/app/11.2.0/grid’ from the central inventory on the local node.

Successfully deleted directory ‘/u01/app/11.2.0/grid’ on the local node.

Successfully deleted directory ‘/u01/app/oraInventory’ on the local node.

Successfully deleted directory ‘/u01/app/oracle’ on the local node.

Oracle Universal Installer cleanup was successful.


Run ‘rm -rf /etc/oraInst.loc’ as root on node(s) ‘localhost’ at the end of the session.

Run ‘rm -rf /opt/ORCLfmap’ as root on node(s) ‘localhost’ at the end of the session.

Run ‘rm -rf /etc/oratab’ as root on node(s) ‘localhost’ at the end of the session.

Oracle deinstall tool successfully cleaned up temporary directories.

#######################################################################

############# ORACLE DEINSTALL & DECONFIG TOOL END #############


2. Oracle Support 홈페이지 (metalink)에서 패치 18370031 를 받는다.


3. Grid를 재설치 하고 root.sh 실행 바로전에 OPatch 18370031을 패치 한다.


 $ opatch napply -local ./18370031


4. 패치가 끝나면 root.sh 실행

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

    여기서 해결했네요 ^^

CRS에 cluster DB를 등록하는 방법

DBCA를 통해 설치 한 DB가 아니고, 다른 DB에서 새장비로 가져오거나, 다른 DB에 복구를 하게 되면,

RAC의 경우 CRS에 자동으로 DB가 등록 되지 않는다.

리스너도 마찬가지고, DB 역시 CRS에 등록해주지 않으면 CRS를 통해 DB 관리를 할 수 없고

정상적인 RAC기능을 할 수 없다.

 

만약 엔진을 재설치 한후 콜드 백업이나 스토리지 이전을 통해 새 서버에 복구 했을 경우,

CRS에 DB 등록을 해줘야 한다.

 

10g의 경우 정상적으로 엔진을 설치 했을 경우에

 

ONS, GSD의 리소스가 설치 되고, 엔진 설치시 VIPCA를 통해 VIP가 등록 된다.

NETCA를 실행하게되면 listener.ora 파일을 생성해 주는것과 동시에 리스너가 CRS에 등록된다.

 

이 모든 작업은 SRVCTL 명령으로 등록, 삭제, 수정이 가능하다.

 

DB를 CRS에 등록하는 순서

 

$ srvctl add database -d <DB Name> -o $ORACLE_HOME

$ srvctl add instance -d <DB Name> -i <Instance Name1> -n <Node Name1>

$ srvctl add instance -d <DB Name> -i <Instance Name2> -n <Node Name2>

 

후에 srvctl 명령을 이용하여, DB를 구동 해주면 된다.

 

아래 명령을 통해 등록된 DB를 확인 할 수 있다.

 

$ srvctl config database 

 

 

 

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





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

OUI에서 DB 생성


$ dbca










원시 장치가 raw device 입니다.






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



oltp_service 입력



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

하단에 "기본"에 체크



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



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



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



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



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

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










redo01_a, b를 지정해줍니다.

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

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







DB가 생성 되었습니다


$ crs_stat -t 


DB와 oltp를 확인합니다. 



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

DB 엔진 설치


$ ~/pkg/database

$ ./runInstaller





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



rac2 체크




엔진만 설치 합니다.




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




오라클 엔진 패치


$ ~/pkg/Disk1

$ ./runInstaller




경로는 $ORACLE_HOME





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



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



리스너 구성


$ netca












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



설정 확인


$ crs_stat -t



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

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


$ mkdir pkg


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

그리고 압축을 해제


$ unzip 10201_clusterware_linux32.zip

  클러스터웨어 압축풀기


$ unzip 10201_database_linux32.zip

  오라클 엔진 압축풀기


$ unzip p8202632_10205_LINUX.zip

  패치셋 압축풀기


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



관련 Library 설치


Node1에서 작업


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

관련 RPM rac2로 복사


$ su -

루트권한으로 변경


# export CVUQDISK_GRP=dba

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



Node2에서 작업

루트권한으로 로그인


# export CVUQDISK_GRP=dba

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



설치전 환경 테스트


Node1에서 작업

오라클 계정으로 로그인


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

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

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


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



클러스터웨어 설치


$ cd ~/pkg/clusterware

$ ./runInstaller





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




추가 버튼을 누르고



rac2 를 추가 해줍니다.



eth0을 편집하여



공용으로 바꿔줍니다.



ocr1, ocr2 를 지정해주고



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




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


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

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

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

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


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


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

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



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



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

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


터미널을 열고 


# vipca


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


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


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


124 unset LD_ASSUME_KERNEL

125 #End workaround

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


저장 후 터미널에서


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

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

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

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

# ./oifcfg getif

# ./vipca


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







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




클러스터웨어 패치하기


$ cd ~/pkg/Disk1/

$ ./runInstaller




경로는 역시 $ORA_CRS_HOME 입니다.






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


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

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

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

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


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



설치 확인


$ crs_stat -t



Oracle 10g RAC (rawdevice) 설치 - 1 리눅스 설치 및 세팅

초기 설정 값은 ASM 설정과 다를게 없습니다.

다만 추가 해주는 HDD 갯수는 2GB 씩 3개를 추가해 준뒤에 Advanced 값에서 scsi 값을 1:0, 1:1, 1:2 로 변경해줍니다.



설정을 해주고 리눅스 설치전 rac1.vmx 파일을 메모장으로 열어서 맨 밑에 다음과 같이 추가 해줍니다.


disk.locking = "FALSE"

diskLib.dataCacheMaxSize = "0"

scsi1.sharedBus = "virtual"


scsi1:0.deviceType = "disk"

scsi1:1.deviceType = "disk"

scsi1:2.deviceType = "disk"



리눅스 설치가 끝나면 


# ifconfig

# netstat -nr

# neat


명령을 이용해서 eth0, eth1의 IP 값을 지정해줍니다.



ASM 설치시 했던 과정의 반복 작업입니다.

IP 설정을 해주고 DNS 서버를 지정해주고 나서,


# /etc/init.d/network restart


네트워크를 재시작 해줍니다.

그리고 hosts 파일을 수정해줍니다.


# vi /etc/hosts


# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1             localhost.localdomain   localhost                                        ← rac1 부분 삭제


#Public

192.168.189.143  rac1

192.168.189.144  rac2

#Private

192.168.150.135    rac1-priv

192.168.121.136    rac2-priv

#Vip

192.168.189.43     rac1-vip

192.168.189.44     rac2-vip


Hosts 파일 수정후 ping test


# ping rac1

# ping rac1-priv

# ping 8.8.8.8



불필요한 서비스 종료


# chkconfig --level 123456 xinetd off

# chkconfig --level 123456 sendmail off

# chkconfig --level 123456 cups off

# chkconfig --level 123456 cups-config-daemon off

# chkconfig --level 123456 smartd off

# chkconfig --level 123456 isdn off

# chkconfig --level 123456 pcmcia off

# chkconfig --level 123456 iptables off



환경 변수설정


# vi /etc/sysctl.conf


kernel.shmall = 2097152

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default = 4194304

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 262144



# vi /etc/security/limits.conf


oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536



# vi /etc/pam.d/login


session    required     pam_limits.so



# vi /etc/modprobe.conf


options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180


터미널에서 modprobe 실행


# modprobe -v hangcheck-timer


# vi /etc/rc.local


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



오라클 계정 생성


# groupadd -g 5000 dba

# useradd -g dba oracle

# passwd oracle


root 계정의 .bash_profile에 bin 폴더 연결


# vi ~/.bash_profile


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


오라클 계정의 .bash_profile 수정


# vi /home/oracle/.bash_profile


export EDITOR=vi

export LD_ASSUME_KERNEL=2.4.19

export ORACLE_BASE=/home/oracle

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

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

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

export ORACLE_SID=rac1

export LANG=ko_KR.UTF-8

export ORACLE_TERM=xterm

export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949

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

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

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

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



HDD에 LVM 설정후 Rawdevice를 사용 할 파티션 잡기

파티션 설정

# fdisk /dev/sdb 
# fdisk /dev/sdc 
# fdisk /dev/sdd

 fdisk 명령 진행 순서 
 n (새로운 파티션 생성) -> p (프라이머리 설정)  -> 1 -> Enter -> Enter -> t (파티션 종류 설정) -> 8e (LVM) -> w (저장 후 Fdisk 종료)

물리적 볼륨 생성 -> 볼륨그룹 생성 -> 논리적 볼륨 분할

# pvcreate /dev/sdb /dev/sdc /dev/sdd
# pvdisplay

# vgcreate rac /dev/sdb /dev/sdc /dev/sdd
# vgdisplay

# lvcreate --name ocr1 --size 300m rac
# lvcreate --name ocr2 --size 300m rac
# lvcreate --name vote1 --size 300m rac
# lvcreate --name vote2 --size 300m rac
# lvcreate --name vote3 --size 300m rac
# lvcreate --name system --size 600m rac
# lvcreate --name sysaux --size 300m rac
# lvcreate --name undotbs1 --size 200m rac
# lvcreate --name undotbs2 --size 200m rac
# lvcreate --name users --size 100m rac
# lvcreate --name temp --size 100m rac
# lvcreate --name control01 --size 100m rac
# lvcreate --name control02 --size 100m rac
# lvcreate --name control03 --size 100m rac
# lvcreate --name redo01_a --size 50m rac
# lvcreate --name redo01_b --size 50m rac
# lvcreate --name redo02_a --size 50m rac
# lvcreate --name redo02_b --size 50m rac
# lvcreate --name redo03_a --size 50m rac
# lvcreate --name redo03_b --size 50m rac
# lvcreate --name redo04_a --size 50m rac
# lvcreate --name redo04_b --size 50m rac
# lvcreate --name spfile --size 50m rac
# lvscan

Rawdevice Disk Mapping

# vi /etc/sysconfig/rawdevices

/dev/raw/raw1       /dev/rac/ocr1
/dev/raw/raw2       /dev/rac/ocr2
/dev/raw/raw3       /dev/rac/vote1
/dev/raw/raw4       /dev/rac/vote2
/dev/raw/raw5       /dev/rac/vote3
/dev/raw/raw6       /dev/rac/system
/dev/raw/raw7       /dev/rac/sysaux
/dev/raw/raw8       /dev/rac/undotbs1
/dev/raw/raw9       /dev/rac/undotbs2 
/dev/raw/raw10     /dev/rac/users 
/dev/raw/raw11     /dev/rac/temp 
/dev/raw/raw12     /dev/rac/control01 
/dev/raw/raw13     /dev/rac/control02
/dev/raw/raw14     /dev/rac/control03 
/dev/raw/raw15     /dev/rac/redo01_a 
/dev/raw/raw16     /dev/rac/redo01_b 
/dev/raw/raw17     /dev/rac/redo02_a 
/dev/raw/raw18     /dev/rac/redo02_b 
/dev/raw/raw19     /dev/rac/redo03_a 
/dev/raw/raw20     /dev/rac/redo03_b 
/dev/raw/raw21     /dev/rac/redo04_a 
/dev/raw/raw22     /dev/rac/redo04_b 
/dev/raw/raw23     /dev/rac/spfile

# vi /etc/udev/permissions.d/50-udev.permissions
 
 :set number
 113  raw/*:root:disk:0660  →  raw/*:oracle:dba:0660 ( 113번째 줄을 수정)

# /etc/init.d/rawdevices restart

# ls -al /dev/raw

rawdevice의 소유권이 oracle로 변경됐는지 확인합니다.

# init 0

Node1 을 종료하고, ASM 설치 했을때 처럼 Node2 를 복사하여 VM웨어에서 구동시켜 줍니다.

Node2 부팅 후 하드웨어 제거 및 설치 작업으로 랜카드 추가 작업을 하면서 DHCP로 설정해주고 root 권한으로 로그인합니다.

# neat

명령을 이용해서 IP, DNS, 호스트 이름을 변경 한 후,

# /etc/init.d/network restart

명령을 이용해서 네트워크를 재시작

# vi /home/oracle/.bash_profile

export ORACLE_SID=rac2 

로 변경하고 재부팅. 그리고 Node1 도 같이 구동 시켜 줍니다.


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

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

ASM 구동 TEST


$ crs_stop -f ora.rac.db

$ crs_start -f ora.rac.db


$ crs_stat -t


Name           Type           Target    State     Host

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

ora.rac.db     application    ONLINE    ONLINE    rac1

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

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

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

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

ora.rac1.gsd   application    ONLINE    ONLINE    rac1

ora.rac1.ons   application    ONLINE    ONLINE    rac1

ora.rac1.vip   application    ONLINE    ONLINE    rac1

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

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

ora.rac2.gsd   application    ONLINE    ONLINE    rac2

ora.rac2.ons   application    ONLINE    ONLINE    rac2

ora.rac2.vip   application    ONLINE    ONLINE    rac2


$ lsnrctl status


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


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


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

STATUS of the LISTENER

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

Alias                     LISTENER_RAC1

Version                   TNSLSNR for Linux: Version 10.2.0.5.0 - Production

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

Uptime                    0 days 1 hr. 24 min. 31 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

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

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

Listening Endpoints Summary...

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

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

Services Summary...

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

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

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

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

Service "PLSExtProc" has 1 instance(s).

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

Service "rac" has 2 instance(s).

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

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

Service "rac_XPT" has 2 instance(s).

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

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

The command completed successfully


$ sqlplus / as sysdba


SQL> select status from v$instance;

 

STATUS

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

OPEN

 

 

SQL> select name from v$controlfile;

 

NAME

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

+DATA/rac/controlfile/current.256.777056877

+FRA/rac/controlfile/current.256.777056881

 

 

SQL> select name from v$datafile;

 

NAME

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

+DATA/rac/datafile/system.259.777056907

+DATA/rac/datafile/undotbs1.260.777056927

+DATA/rac/datafile/sysaux.261.777056937

+DATA/rac/datafile/undotbs2.263.777056953

+DATA/rac/datafile/users.264.777056963

 

 

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

 

    GROUP# MEMBER

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

         1 +DATA/rac/onlinelog/group_1.257.777056883

         1 +FRA/rac/onlinelog/group_1.257.777056889

         2 +DATA/rac/onlinelog/group_2.258.777056893

         2 +FRA/rac/onlinelog/group_2.258.777056901

         3 +DATA/rac/onlinelog/group_3.265.777057803

         3 +FRA/rac/onlinelog/group_3.259.777057809

         4 +DATA/rac/onlinelog/group_4.266.777057809

         4 +FRA/rac/onlinelog/group_4.260.777057815



RAC Fail-Over 테스트


 - OLTP 서비스 생성


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


$ srvctl start service -d RAC -s oltp_service


$ srvctl status service -d RAC -s oltp_service

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



CTF 작동여부 확인


node1 에서 실행

SQL> show parameter service


node2 에서 확인

SQL> show parameter service


node1 에서 작업

SQL> shutdown abort


node2 에서 확인

SQL> show parameter service



※ CTF vs TAF


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

  - Oracle8i Parallel Server 에서부터 제공.

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


  1. CTF(Connection Time Failover)

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

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

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

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


  2. TAF(Transparent Application Failover)

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

    - Failover_mode

     * Type

       - DEFAULT : non - TAF

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

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


        * method :

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

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


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



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

OUI 에서 RAC ASM DB 구성


# dbca





모두 선택



사용자 정의 데이터베이스



각 노드의 접두어인 rac



체크 해제




ASM 선택



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



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

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



DATA 만 선택하고 다음



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

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



모두 체크 해제

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



역시 모두 체크 해제




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



문자 집합 목록에서 선택

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









DB 구성에 성공 했습니다.

Oracle 10g RAC (ASM) 설치 - 5 ASM 구성 및 패치

ASM 구성


$ ~/pkg/database/runInstaller





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



rac2 체크




ASM 구성에 체크하고 비밀번호를 설정해줍니다.



raw 6,7번을 체크하고, raw8 디스크는 FRA을 구성할 디스크로 남겨 둡니다.







# crs_stat -t 


로 구성을 확인 합니다.



ASM 패치 


우선 패치전에 asm 데몬을 중지 합니다.


$ srvctl stop asm -n rac1

$ srvctl stop asm -n rac2


$ cd ~/pkg/Disk1

$ ./runInstaller





경로는 역시 $ORA_ASM_HOME 입니다.






root 권한으로 각 노드에서 실행

엔터 - y - y - y



설치 종료후, ASM 서비스를 다시 구동시켜줍니다.


$ srvctl start asm -n rac1

$ srvctl start asm -n rac2


그리고 상태 확인


$ crs_stat -t




  1. 너무 감사드립니다.
    정리도 너무 잘 되어 있고 저에게 너무나 많은 도움이 되고있습니다.
    감사의 마음을 전해드립니다.

Oracle 10g RAC (ASM) 설치 - 4 Database 엔진 설치

Database 엔진 설치


$ ~/pkg/database/runInstaller





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



rac2에 체크



데이터 베이스 엔진만 설치 합니다.




각 노드에서 root 권한으로 실행 해주고 확인

DB 설치가 끝났습니다.


그럼 바로 이어서 DB 패치를 하도록 합니다.


$ ~/pkg/Disk1/runInstaller







node1,2 에서 모두 실행 해 줍니다.

실행하게 되면 엔터로 진행, 그후에 파일을 덮어쓸거냐고 세번 묻습니다.

모두 y


엔터 → y → y → y



패치 종료.

여기까지 모든 설치가 완료 되었습니다.



리스너 구성


$ netca










리스너 구성이 끝났습니다.


# crs_stat -t


명령으로 RAC의 상태를 확인 합니다. 


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

클러스터웨어 란?


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

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

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



Node1 으로 접속을 합니다.


$ mkdir pkg


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

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


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


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


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


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


Library 설치


Node1에서 작업


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

 관련 RPM rac2로 복사


$ su -

 루트 권한으로 변경


# export CVUQDISK_GRP=dba

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


Node2에서 작업


$ su -

 루트 권한으로 로그인


# export CVUQDISK_GRP=dba

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


설치전 환경 테스트


노드 1에서 작업


오라클 계정으로 로그인


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


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


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


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


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

oracle 계정으로 로그인 한뒤에


# cd pkg/clusterware

# ./runInstaller





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

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



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

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

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



추가 버튼을 누르고



rac2 를 추가 해줍니다.




eth0 번을 편집하여



공용으로 바꿔 줍니다.



rawdevice ocr1,2 번을 지정해준후



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




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

1번 node1, node2, 

2번 node1, node2 


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




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

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


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


# vipca


를 실행 해줍니다.








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

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




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


클러스터웨어의 패치


$ cd ~/pkg/Disk1/

$ ./runInstaller








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


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

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

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




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


 

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

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



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



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



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



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



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

터미널에서


# neat  


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





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

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

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



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


# ping rac2

# ping rac2-priv

# ping 164.124.107.9


Ping Test가 성공했다면 


# vi /home/oracle/.bash_profile


export ORACLE_SID=rac2


SID 부분을 수정해줍니다.

그리고 재부팅.


# init 6


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



equivalence 설정


node1, node2 에서 모두 실행 


$ mkdir .ssh


$ ssh-keygen -t rsa

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


$ ssh-keygen -t dsa

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


node1 에서만 실행


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

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


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

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


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

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


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

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

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


모든 노드에서 각각 실행 

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


$ ssh rac1 date  

$ ssh rac1-priv date

$ ssh rac2 date

$ ssh rac2-priv date



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




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

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

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


 두 노드의 시간 설정 개요 

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

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

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

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

Oracle 10g RAC (ASM) 설치 실습을 위한 VMware 세팅 및 RHEL4 설치

RAC 설치를 위한 VMware를 세팅 해보도록 하지요.

우선 rac1 번이라는 이름으로 새로 생성합니다.

기존의 RHEL4 설치와 기본은 같습니다. (http://dbdevil.tistory.com/6 참고)


다만, rac 폴더를 만들고 그안에 rac1, rac2 폴더를 만들어 줍니다.

처음으로 생성 되는 node1은 rac1 에 저장 됩니다.



여기서부터 설정이 조금 다릅니다.

Edit virtual machine setting 을 클릭하여 하드웨어 세팅을 먼저 해줍니다.



필요 없는 하드웨어는 제거 합니다.

Floppy, USB 컨트롤러, 사운드카드, 프린터는 지워 줍니다.



이제 하드 디스크를 추가 해줍니다.





Independent 에 꼭 체크를 해주고요.



Allocate all disk space now 를 체크 해주고, 

Store virtual disk as a single file도 체크를 해줍니다. 



여기서 그냥 저장하면 상대 경로로 저장하게 되는데, 이렇게되면 두대의 RAC에서 동시에 HDD를 사용 할 수 없습니다.

그렇기에 절대 경로를 만들어 줍니다. rac 폴더 밑에 storages 폴더를 생성합니다.

지금부터 생성되는 ocr,vote,asm의 이름을 가진 HDD는 storages 폴더 밑에 절대 경로로 저장합니다.



이렇게 같은 작업으 8번 반복해 줍니다.

각 HDD의 용량과 설정은 다음과 같습니다.


 Disk 이름

용량 (GB)

scsi 번호 

ocr1

0.3 

1:0 

ocr2 

0.3 

1:1 

 vote1

0.3 

1:2 

 vote2

0.3 

1:3 

 vote3

0.3 

1:4 

 asm1

1:5 

 asm2

1:6 

 asm3

1:8 


scsi 번호는 HDD를 선택한후 우측의 Advanced... 버튼을 클릭하면 설정 할 수 있습니다.




그리고 나서 Network Adapter를 추가 해줍니다.




설정은 host-only

이 랜카드는 rac1과 rac2 사설망 (Private or inter connect) 에서 사용 될 랜카드 설정입니다.



구성이 끝나면, rac1.vmx 파일을 메모장으로 열어 수정을 해줘야 합니다.




메모장으로 열면 위같은 설정 내용이 보입니다.



다음과 같이 추가 해줍니다.


disk.locking = "FALSE"

diskLib.dataCacheMaxSize = "0"

scsi1.sharedBus = "virtual“


각 scsi 설정의 맨 밑에 각각 번호에 맞게 추가해 줍니다.

scsi1:0.deviceType = "disk“
scsi1:1.deviceType = "disk“
scsi1:2.deviceType = "disk“
...
...
...
scsi1:8.deviceType = "disk“

그리고 저장.
리눅스 이미지를 CD에 마운트 하고 나서 ▶ 눌러 설치를 시작합니다.




특별히 다른점은 없으나 파티션 분할할때 sda를 제외한 HDD의 설정을 해제 해주셔야 합니다.


파티션 용량은 


/         5000

/boot   100

swap   1500

/var     1000

/home  최대한 사용 가능한 용량 





eth1 활성화에 체크해 줘야 하구요.











위와 같은 설정으로 설치 하시면 됩니다.

RAC를 진행 하기 위해 RPM 패키지를 몇개 설치해야하는데, RHEL4 설치시 기본으로 들어있는 파일의 버전이 필요한 버전보다 낮은 것이 몇개 있고,

RPM 의존성 때문에 설치가 어렵기도 합니다.


그래서 RHEL4의 기본 파일은 추천 하지 않고, 그냥 yum 설치후 yum install을 이용하는 편이 정신 건강에 이롭습니다.