Oracle Install

Oracle19c RAC 설치

돼지와함께춤을 2025. 5. 8. 17:21

본문은 Oracle Linux 8.8 서버에 Oracle 19c RAC 설치 가이드이다.

 

RAC란 Real Application Cluster 의 준말로 2개 이상의 노드(서버)로 하나의 DB를 이루고

데이터파일은 공유하되 메모리 캐시 자원은 각각 독립적으로 사용한다.

 

가장 큰 이점은 하나의 서버가 다운되도 고가용성을 제공하며

서비스 다운 없이 각 노드 DB를 순차적으로 패치하는 롤링 패치도 가능하다.

 

설치하는데 한정된 로컬 PC 자원을 가지고 2개 이상의 VM을 실행하여 DB를 돌려야하는데

필자는 PC사양이 RAM 8GB,,,^^ 였기 때문에 ORACLE 권장 사항인 노드별 8~16 GB을 맞출수도 없다.

 

그렇다고 서버 메모리 사양을 낮추면(4GB) 클러스터 기동시 VM서버가 뻗어 버리고 

권장 사항에 맞춰 높이면(8~16GB) 로컬 PC가 뻗는다..

 

독자 PC사양에 맞추어 VM 메모리 사양을 조절해 가며 최적 메모리를 맞추는것이 필요하다.

저는 약 6000MB로 설정하니 그나마 구동 되었습니다.

팁은 virtualBox는 스냅샷을 지원하니 클러스터 기동 전 스냅샷을 찍고 ram을 조절해가는것도 좋습니다.

 


 

 

  • 명령어 모음
# 사전설정
vi /etc/hosts
127.0.0.1   localhost localhost4
::1         localhost localhost6

### Public
10.0.2.15 rac1 rac1
10.0.2.16 rac2 rac2

### Private
192.168.56.101 rac1-priv rac1-priv
192.168.56.102 rac2-priv rac2-priv

### Virtual
10.0.2.17 rac1-vip rac1-vip
10.0.2.18 rac2-vip rac2-vip

### SCAN
10.0.2.20 rac-scan rac-scan
10.0.2.21 rac-scan rac-scan
10.0.2.22 rac-scan rac-scan



vi /etc/hostname
rac1

systemctl restart systemd-hostnamed
hostname

vi /etc/dnsmasq.conf
local=/localdomain/
server=8.8.8.8
server=8.8.4.4

vi /etc/fstab
tmpfs /dev/shm tmpfs size=4g 0 0
mount -o remount /dev/shm 

systemctl start dnsmasq
systemctl enable dnsmasq
재부팅
nslookup rac-scan

vi /etc/selinux/config
SELINUX=disabled

systemctl stop firewalld
systemctl disable firewalld

#패키지 설치
dnf install oracle-database-preinstall-19c

# 그룹 계정 
--grid
groupadd asmadmin
groupadd asmdba
groupadd asmoper
useradd grid

oracle, grid, oinstall id 확

-- group id
groupmod -g 1001 oinstall
groupmod -g 1002 dba
groupmod -g 1003 oper
groupmod -g 1004 asmdba
groupmod -g 1005 asmoper
groupmod -g 1006 asmadmin
groupmod -g 1007 backupdba
groupmod -g 1008 dgdba

getent group


usermod -u 1001 -g 1001 -G 1002,1004,1005,1006 grid
usermod -u 1002 -g 1001 -G 1002,1003,1004,1005,1006,1007,1008 oracle

find / -gid 54321 -exec chgrp 1001 {} \; 2>/dev/null
find / -uid 54321 -exec chown 1002 {} \; 2>/dev/null
find / -uid 54322 -exec chown 1001 {} \; 2>/dev/null

#리소스 수정
/etc/security/limits.d/oracle-database-preinstall-19c.conf


#커널 파라미터 수정 
vi /etc/sysctl.conf
kernel.shmall = 3211788288 
kernel.shmmax = 3211788288 

# 커널 업그레이드
dnf install -y kernel-uek-5.15.0-301.163.5.2.el8uek 
커널 자동선택 세팅후 reboot 후 uname -r 확인

# 부팅 커널자동선택 1
vi /etc/default/grub
GRUB_DEFAULT=0

grub2-mkconfig -o /boot/grub2/grub.cfg


# 디렉토리 생성
mkdir -p /u01/app/grid
mkdir -p /u01/app/19.0.0/grid
chown -R grid:oinstall /u01
chmod 775 -R /u01

mkdir -p /u02/app/oracle/product/19.0.0/dbhome_1
mkdir -p /u02/app/oraInventory
chown -R oracle:oinstall /u02
chown grid:oinstall /u02/app/oraInventory
chmod 775 -R /u02

passwd oracle
passwd grid

#환경변수 설정
-- oracle
# .bash_profile for oracle user

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
export ORACLE_HOSTNAME=rac1   	       		     	#2node rac2
export ORACLE_BASE=/u02/app/oracle 
export ORACLE_UNQNAME=RACDB
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORA_INVENTORY=/u02/app/oraInventory
export ORACLE_SID=RACDB1					#2node RACDB2
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export GRID_HOME=/u01/app/19.0.0/grid
export LANG=C
export CV_ASSUME_DISTID=RHEL7.6
export DISPLAY=:0

stty erase ^?
alias ss="sqlplus / as sysdba"

-- grid
# .bash_profile for grid user

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
export ORACLE_HOSTNAME=rac1				#2node rac2
export ORACLE_BASE=/u01/app/grid
export ORACLE_UNQNAME=RACDB
export ORACLE_HOME=/u01/app/19.0.0/grid  
export ORA_INVENTORY=/u02/app/oraInventory
export ORACLE_SID=+ASM
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export GRID_HOME=$ORACLE_HOME
export LANG=C
export CV_ASSUME_DISTID=RHEL7.6
export DISPLAY=:0

stty erase ^?
alias ss="sqlplus / as sysdba"


-- root
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

export ORACLE_BASE=/u02/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export GRID_HOME=/u01/app/19.0.0/grid
export PATH=$PATH:$GRID_HOME/bin

# 노드 복제
2노드 호스트네임, 네트워크 IP / mac 주소, 환경변수 변경


#zip파일 세팅 (1번노드)
cd /media/sf_shrfld/
cp LINUX.X64_193000_grid_home.zip /u01/app/19.0.0/grid/LINUX.X64_193000_grid_home.zip
cp LINUX.X64_193000_db_home.zip /u02/app/oracle/product/19.0.0/dbhome_1/LINUX.X64_193000_db_home.zip
cp p6880880_190000_Linux-x86-64.zip /u01/app/19.0.0/grid/p6880880_190000_Linux-x86-64.zip
cp p36233126_190000_Linux-x86-64.zip /u01/app/19.0.0/grid/p36233126_190000_Linux-x86-64.zip

chown grid:oinstall /u01/app/19.0.0/grid/LINUX.X64_193000_grid_home.zip
chown oracle:oinstall /u02/app/oracle/product/19.0.0/dbhome_1/LINUX.X64_193000_db_home.zip
chown grid:oinstall /u01/app/19.0.0/grid/p6880880_190000_Linux-x86-64.zip
chown grid:oinstall /u01/app/19.0.0/grid/p36233126_190000_Linux-x86-64.zip

# cvuqdisk 패키지 설치 
cd /u01/app/19.0.0/grid
unzip LINUX.X64_193000_grid_home.zip 

cd /u01/app/19.0.0/grid/cv/rpm/
rpm -ivh cvuqdisk-1.0.10-1.rpm

2노드로 카피 후 해당 패키지 설치
scp cvuqdisk-1.0.10-1.rpm rac2:/tmp
cd /tmp
rpm -ivh cvuqdisk-1.0.10-1.rpm

# 검증
ping 테스트 priv 포함

[oracle]
cd $GRID_HOME/oui/prov/resources/scripts
./sshUserSetup.sh -user oracle -hosts "rac1 rac2" -noPromptPassphrase -advanced
ssh oracle@rac2
[grid]
cd $GRID_HOME/oui/prov/resources/scripts
./sshUserSetup.sh -user grid -hosts "rac1 rac2" -noPromptPassphrase -advanced
ssh grid@rac2

cd $GRID_HOME
./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -osdba dba -orainv oinstall -fixup -method root -networks enp0s3/enp0s8 -verbose
root 비번 입력 

// Verifying resolv.conf Integrity ...FAILED 문제시
양노드 
mv /usr/bin/scp /usr/bin/scp.orig
echo "/usr/bin/scp.orig -T \$*" > /usr/bin/scp
chmod +x /usr/bin/scp

//Verifying Daemon "avahi-daemon" not configured and running ...FAILED
데몬 실행중인 노드에서 해당 데몬 중지 필요시 재부팅
systemctl stop avahi-daemon 
systemctl disable avahi-daemon

Verifying /dev/shm mounted as temporary file system ...FAILED
# tmp 메모리 사이즈변경
vi /etc/fstab
tmpfs /dev/shm tmpfs size=4g 0 0
mount -o remount /dev/shm 

Verifying Soft Limit: maximum stack size ...FAILED
ulimit -a // stack size 10240보다 큰지 확인
/etc/security/limits.conf

Network Time Protocol (NTP) ...FAILED
# 시간 동기화
sudo systemctl status chronyd
sudo systemctl start chronyd
sudo systemctl enable chronyd

# 그리드 SW설치

PRVG-11826 : DNS resolved IP addresses "" for SCAN name 
sudo yum install nscd
sudo systemctl start nscd # nscd 서비스 시작 
sudo /usr/sbin/nscd -i hosts #nscd 캐시 삭제
sudo systemctl enable nscd # 재기동시 자동시작
systemctl start nscd

#opatch 양노드
grid_home
mv OPatch OPatch_OLD
unzip p6880880_190000_Linux-x86-64.zip 
cd OPatch
./opatch version

# grid 패치
grid_home
unzip p36233126_190000_Linux-x86-64.zip
경로생성 확인 /36233126

[루트계정으로 버전업 양노드]
cd /u01/app/19.0.0/grid/OPatch
export PATH=/u01/app/19.0.0/grid/OPatch:$PATH
#이건 설치시 바로 패치적용 ./gridSetup.sh -applyRU /u01/app/19.0.0/grid/36233126/
opatchauto apply /u01/app/19.0.0/grid/36233126/

(sw only상태일시) opatchauto apply /u01/app/19.0.0/grid/36233126/ -oh /u01/app/19.0.0/grid

opatch lspatches


# 디스크 고정 명명(양노드)
ls -l /dev/disk/by-path/

ll /etc/udev/rules.d/
ㄴ 결과중 가장 낮은숫자 제목으로
vi /etc/udev/rules.d/59-fixed-disk-names.rules
# /dev/sdb 고정
KERNEL=="sd*", ENV{DEVLINKS}=="/dev/disk/by-path/pci-0000:00:0d.0-ata-2", NAME="sdb"

# /dev/sdc 고정
KERNEL=="sd*", ENV{DEVLINKS}=="/dev/disk/by-path/pci-0000:00:0d.0-ata-3", NAME="sdc"

# /dev/sdd 고정
KERNEL=="sd*", ENV{DEVLINKS}=="/dev/disk/by-path/pci-0000:00:0d.0-ata-4", NAME="sdd"

# /dev/sde 고정
KERNEL=="sd*", ENV{DEVLINKS}=="/dev/disk/by-path/pci-0000:00:0d.0-ata-5", NAME="sde"

# /dev/sdf 고정
KERNEL=="sd*", ENV{DEVLINKS}=="/dev/disk/by-path/pci-0000:00:0d.0-ata-6", NAME="sdf"



# 양 노드 공유디스크 추가

# 디스크 파티셔닝 (한쪽만하면 적용되더라)
lsblk
fdisk /dev/sdb
fdisk /dev/sdc
fdisk /dev/sdd
fdisk /dev/sde
fdisk /dev/sdf
n -> p -> 1 -> enter(default) -> enter(default) -> w

partprobe /dev/sdb
partprobe /dev/sdc
partprobe /dev/sdd
partprobe /dev/sde
partprobe /dev/sdf

# 디스크 권한 설정 (일시적용)
chown grid:asmadmin /dev/sdb1
chmod 660 /dev/sdb1
chown grid:asmadmin /dev/sdc1
chmod 660 /dev/sdc1
chown grid:asmadmin /dev/sdd1
chmod 660 /dev/sdd1
chown grid:asmadmin /dev/sde1
chmod 660 /dev/sde1
chown grid:asmadmin /dev/sdf1
chmod 660 /dev/sdf1

# 권한 영구적용(양노드)
vi /etc/udev/rules.d/99-oracle-asm.rules
KERNEL=="sd[b-f]1", OWNER="grid", GROUP="asmadmin", MODE="0660"

udevadm control --reload-rules
udevadm trigger

# oracle restart 설치
./gridSetup

/dev/oracleafd 생성확인
/etc/oracleafd.conf 생성확인

# 디스크 그룹 추가
asmca

# asmfd 설정 확인
export ORACLE_HOME=/u01/app/19.0.0/grid
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE=/tmp

asmcmd afd_lslbl
asmcmd afd_lsdsk
asmcmd afd_state
afdroot version_check

# 라벨링 수동 필요시
export ORACLE_HOME=/u01/app/19.0.0/grid
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE=/tmp
asmcmd afd_label CRS2 /dev/sdc1



#runinstaller
PRVG-1024 : The NTP daemon or Service was not running on any of the cluster nodes.
[CHRONYD 사용중일시]
sudo systemctl stop chronyd
sudo systemctl disable chronyd
sudo dnf install -y epel-release
sudo yum install -y ntp
sudo systemctl enable ntpd
sudo systemctl start ntpd
sudo systemctl status ntpd


#RAC 설치
https://lemonandgrapefruit.tistory.com/275
https://zerobase-db.tistory.com/24
# 검증시 resolve.conf 복사에러
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=333437255309606&parent=EXTERNAL_SEARCH&sourceId=PROBLEM&id=2761745.1&_afrWindowMode=0&_adf.ctrl-state=7zfwmijp0_151
# 서버리소스
https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/checking-resource-limits-for-oracle-software-installation-users.html
# SCAN IP DNS 탐색 오류
https://docs.oracle.com/en/error-help/db/prvg-11826/?r=23ai
https://positivemh.tistory.com/526
# NTP대신 CHRONY
http://koreaoug.org/os/9172

복제전 1번노드

OS 설치 및 패치 완료.
네트워크 설정 (IP, 호스트 이름, /etc/hosts) 완료.
방화벽 및 SELinux 비활성화.
필요 패키지 및 커널 파라미터 설정 완료.
oracle, grid 계정 및 그룹 생성.
oracle, grid 환경변수 세팅
grid, oracle 설치파일 unzip
cvuqdisk 패키지설치
공유 디스크 추가 및 파티셔닝 완료.
디스크 인식 및 명명 순서 고정
afd_label 라벨링
1번 노드 공유디스크 해제

VM 복제 수행.

2번노드 
해제한 디스크 추가 및 파티셔닝 완료.
afd_label 라벨링
네트워크 mac주소 변경
ip변경
hosts, hostname 변경
grid, oracle 환경 변수 변경

각 노드
oracle 유저 패스워드 없는 SSH 접속 환경 설정
/runcluvfy.sh

1번 노드 
공유 디스크 추가
grid 설치 및 버전 업그레이드 
grid 버전업그레이드 
asmca 
oracle sw 설치 
db설치