참고 링크 : https://dataforum.io/display/ORCL/Oracle+Database+19c+Real+Application+Clusters
내맘대로긍정 님 블로그
VM setting
하드웨어 구성
RAM : 6144m
DISK : 100G (/boot:1024m, swap:6144m, /:나머지)
다른 환경 설정 기존이랑 같음.
네트워크 구성
스토리지 구성
모두 ‘공유 가능’ + 크기 미리할당하는 방식으로 생성해야됨
CRS1, 2, 3 – 각각 1G씩
DATA – 30G
1번 노드 구성
rpm check
내맘대로긍정 님 말로는 Linux 8버전부터는 yun 보다 dnf로 설치하는게 좋다함.
bc
binutils
elfutils-libelf
elfutils-libelf-devel
fontconfig-devel
glibc
glibc-devel
ksh
libaio
libaio-devel
libXrender
libX11
libXau
libXi
libXtst
libgcc
libnsl
librdmacm
libstdc++
libstdc++-devel
libxcb
libibverbs
make
policycoreutils
policycoreutils-python-utils
smartmontools
sysstat
/etc/hosts 수정
[root@OL8RAC1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.191 ol8rac1
192.168.0.192 ol8rac2
192.168.56.191 ol8rac1-priv
192.168.56.192 ol8rac2-priv
192.168.0.193 ol8rac1-vip
192.168.0.194 ol8rac2-vip
192.168.0.195 ol8rac-scan
/etc/selinux/config 수정
SELINUX=disabled
/etc/dnsmasq.conf 수정
을 해야된다는데 개념을 아직 잘 모르겠어서 넘어감. /etc/hosts만 제대로 지정해줘도 설치는 된다니깐~
/etc/sysctl.conf 수정
fs.file-max=6815744
fs.aio-max-nr=1048576
kernel.sem=250 32000 100 128
kernel.shmmni=4096
kernel.shmall=786432 (shmmax / 4096 한 값)
kernel.shmmax=3221225472 (이 VM의 RAM이 6G라서 3G)
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
net.ipv4.ip_local_port_range=9000 65500
net.ipv4.conf.all.rp_filter=2
net.ipv4.conf.default.rp_filter=2
/etc/security/limits.conf 수정
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
grid soft nofile 1024
grid hard nofile 65536
grid soft nproc 2047
grid hard nproc 16384
grid soft stack 10240
grid hard stack 32768
미사용 서비스 정리
# 방화벽 중지
systemctl stop firewalld
systemctl disable firewalld
# 블루투스 중지
systemctl stop bluetooth
systemctl disable bluetooth
# 시간 동기화 중지
systemctl stop chronyd
systemctl disable chronyd
mv /etc/chrony.conf /etc/chrony.conf.bak
# AVAHI 중지
systemctl stop avahi-daemon.socket
systemctl disable avahi-daemon.socket
systemctl stop avahi-daemon
systemctl disable avahi-daemon
# 가상 시스템 관리 중지
systemctl stop libvirtd
systemctl disable libvirtd
# NTP 중지 (이건 필요한지 아닌지 모르겠음. 일단 빼고 진행함.)
systemctl stop ntpdate
systemctl disable ntpdate
계정 설정
groupadd -g 54321 dba
useradd -u 54321 oracle -g dba
passwd oracle
useradd -u 54322 grid -g dba
passwd grid
cat /etc/passwd
cat /etc/group
udev 방식으로 ASM 관리
# disk mount 상태 확인
fdisk -l 또는 lsblk -f
# disk id 확인
/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdb
/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdc
/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdd
/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sde
VBOX_HARDDISK_VB8fb1467a-b2b1cf70
VBOX_HARDDISK_VB4797d9bc-8e6cba49
VBOX_HARDDISK_VB98d9ebd0-b96e7119
VBOX_HARDDISK_VB29b95f5a-23e347d9
# vi /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd?", ENV{ID_SERIAL}=="VBOX_HARDDISK_VB8fb1467a-b2b1cf70", SYMLINK+="oracleasm/disks/CRS1", OWNER="grid", GROUP="dba", MODE="0660"
KERNEL=="sd?", ENV{ID_SERIAL}=="VBOX_HARDDISK_VB4797d9bc-8e6cba49", SYMLINK+="oracleasm/disks/CRS2", OWNER="grid", GROUP="dba", MODE="0660"
KERNEL=="sd?", ENV{ID_SERIAL}=="VBOX_HARDDISK_VB98d9ebd0-b96e7119", SYMLINK+="oracleasm/disks/CRS3", OWNER="grid", GROUP="dba", MODE="0660"
KERNEL=="sd?", ENV{ID_SERIAL}=="VBOX_HARDDISK_VB29b95f5a-23e347d9", SYMLINK+="oracleasm/disks/DATA", OWNER="grid", GROUP="dba", MODE="0660"
# rules 적용.
udevadm control --reload-rules
udevadm trigger
# 확인
ll /dev/oracleasm/disks
ll /dev/sd*
# 만약에 deinstall을 사용해서 grid를 한 번 날린 다음에 다시 gridSetup.sh을 수행한다면, CRS용으로 사용했던 disk들의 status가 Candidate가 아닌 Member로 출력되면서 CRS용 disk로 선택이 불가해진다. 그러면 아래의 명령어를 사용해 디스크의 헤더부분을 날려서 Member가 아니도록 인식하도록 만든다.
dd if=/dev/zero of=/dev/oracleasm/disks/CRS1 bs=1M count=10
dd if=/dev/zero of=/dev/oracleasm/disks/CRS2 bs=1M count=10
dd if=/dev/zero of=/dev/oracleasm/disks/CRS3 bs=1M count=10

oracleasm 패키지 설치
ASM 관리 방식으로 oracleasm 을 사용하는 방법도 있지만 udev 방식으로 진행하는 것이 더 좋기 때문에 udev로 진행할거임.
udev 방식이 좋은 이유는 rpm에 얽매이지 않아서 kernel 버전 호환 문제가 없다.
wget https://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.17-1.el8.x86_64.rpm
rpm -ivh oracleasmlib-2.0.17-1.el8.x86_64.rpm
wget https://yum.oracle.com/repo/OracleLinux/OL8/addons/x86_64/getPackage/oracleasm-support-2.1.12-1.el8.x86_64.rpm
rpm -ivh oracleasm-support-2.1.12-1.el8.x86_64.rpm
-- 이렇게 했는데 oracleasm init 시에 failed 떴음.
검색결과 OL 8.8 이상부터는 oracleasm-support-2가 아닌 3을 설치해야 하고
oracleasmlib도 3버전 설치해야됨.
내가 설치한 건 OL 8.10 이기 때문에 재설치 필요.
rpm -e oracleasm-support
rpm -e oracleasmlib
- 이건 안해도 상관없을 듯..?
dnf install -y libbpf*
dnf list available | grep oracleasm
wget https://yum.oracle.com/repo/OracleLinux/OL8/addons/x86_64/getPackage/oracleasm-support-3.1.0-10.el8.x86_64.rpm
rpm -ivh oracleasm-support-3.1.0-10.el8.x86_64.rpm
oracleasmlib 얘는 wget 안되고 dnf 안돼서 그냥 수동으로 다운받고 winscp로 넘겨야 할듯;;
rpm -ivh oracleasmlib-3.1.0-6.el8.x86_64.rpm
적어놓은 대로 하니깐 되긴 하네.. 다시 oracleasm 부분부터 진행하자...
oracleasm configure -i
(oracle -> dba -> y -> y)
oracleasm init
oracleasm status
oracleasm configure
ORACLEASM_ENABLED=true
ORACLEASM_UID=oracle
ORACLEASM_GID=dba
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
ORACLEASM_SCAN_DIRECTORIES=""
ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"
ORACLEASM_CONFIG_MAX_DISKS="2048"
ORACLEASM_ENABLE_IOFILTER="true"
ls /dev/sd*
fdisk /dev/sdb (n -> p -> 1 -> 엔터 -> 엔터 -> w)
fdisk /dev/sdc (n -> p -> 1 -> 엔터 -> 엔터 -> w)
fdisk /dev/sdd (n -> p -> 1 -> 엔터 -> 엔터 -> w)
fdisk /dev/sde (n -> p -> 1 -> 엔터 -> 엔터 -> w)
ls /dev/sd*
oracleasm createdisk CRS1 /dev/sdb1
oracleasm createdisk CRS2 /dev/sdc1
oracleasm createdisk CRS3 /dev/sdd1
oracleasm createdisk DATA /dev/sde1
oracleasm scandisks
oracleasm listdisks
directory 세팅
mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/oracle/product/19c
mkdir -p /u01/app/grid
mkdir -p /u01/oraCD
chown -R oracle:dba /u01
chmod -R 775 /u01
chown -R grid:dba /u01/app/grid
winscp로 grid Infrastructure, database zip 옮기기
.bash_profile 설정
root, grid, oracle 모두. GRID_HOME은 그냥 편의를 위한 거고 grid 유저에서 ORACLE_HOME을 grid home 경로로 설정해줘야지 제대로 돌아감.
# grid
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/grid
export GRID_HOME=/u01/app/grid
export ORACLE_SID=OL8RAC1
export GRID_SID=+ASM1
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/JRE
export TMP=/tmp
export TMPDIR=$TMP
export CV_ASSUME_DISTID=OEL7.6
export DISPLAY=192.168.0.110:0.0
# oracle
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c
export GRID_HOME=/u01/app/grid
export ORACLE_SID=OL8RAC1
export GRID_SID=+ASM1
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/JRE
export TMP=/tmp
export TMPDIR=$TMP
export CV_ASSUME_DISTID=OEL7.6
export DISPLAY=192.168.0.110:0.0
2번노드 구성
먼저 ‘새로만들기’로 OL8RAC2라는 머신을 만드는데 하드디스크는 사용하지 않는 옵션으로 생성. 메모리랑 코어 수는 1번노드와 동일하게 6144m 2코어.
그다음 VBoxManage.exe 사용해서 1번노드 copy해야지 uuid 충돌 이슈가 안 생김.
cd C:\Program Files\Oracle\VirtualBox
VBoxManage.exe clonemedium disk D:\VM\OL8RAC\OL8RAC1\OL8RAC1.vdi D:\VM\OL8RAC\OL8RAC2\OL8RAC2.vdi
이후에 하드디스크에 OL8RAC2.vdi 를 추가해주면 됨. 추가로 CRS1,2,3이랑 DATA 하드디스크도 추가.
네트워크도 동일하게 어댑터에 브리지, 호스트 전용 설정.
기동 후에 바로 네트워크 설정. 192.168.0.192 랑 192.168.56.192 로 ipv4 변경하기.
vi /etc/hostname 으로 hostname OL8RAC2로 수정. 후 ‘reboot’.
2번노드 oracle 유저의 .bash_profile 수정. (ORACLE이랑 GI의 SID만 1에서 2로 바꾸면 됨)
이제 1번노드도 기동을 시킨 다음에 양 노드 간 통신이 원활한지 체크
-- 1번노드에서
ping OL8RAC2
ping OL8RAC2-priv
-- 2번노드에서
ping OL8RAC1
ping OL8RAC1-priv
Grid Infrastructure 설치
작업은 대표노드 1군데에서만 하면 됨. 나는 1번노드에서 진행할 거임.
unzip
cd $GI_HOME
unzip /u01/oraCD/LINUX.X64_193000_grid_home.zip
cvuqdisk 패키지 설치
1번 2번노드 모두에서 설치해야 됨.
# 1번노드에서 root로 수행
su -
cd /u01/app/grid/cv/rpm
export CVUQDISK_GRP=dba
rpm -ivh cvuqdisk-*.rpm
# 그냥 rpm -ivh 수행하면 에러나면서 실패함. 원인은 default로다가 oinstall 그룹을 찾는데 나는 dba 그룹만 만들었기 때문. 따라서 export CVUQDISK_GRP=dba 로 지정을 해줘야지 됨.
# 2번노드로 rpm 전송
scp cvuqdisk-*.rpm OL8RAC2:/u01/oraCD
# 2번노드에서 root로 수행
cd /u01/app/oraInventory
export CVUQDISK_GRP=dba
rpm -ivh cvuqdisk-*.rpm

opatch engine unzip
cd $GRID_HOME
opatch version
mv OPatch OPatchold
unzip /u01/oraCD/p6880880_190000_Linux-x86-64_opatch_engine.zip
opatch version
password 입력 없이 접속 설정
cd $GI_HOME/oui/prov/resources/scripts
-- grid 유저에서 수행 -> grid끼리 통신
./sshUserSetup.sh -user grid -hosts "ol8rac1 ol8rac2" -noPromptPassphrase -advanced
(yes -> 패스워드 입력 4번)
-- oracle 유저에서 수행 -> oracle끼리 통신
./sshUserSetup.sh -user oracle -hosts "ol8rac1 ol8rac2" -noPromptPassphrase -advanced
(yes -> 패스워드 입력 4번)
-- 접속 테스트
ssh ol8rac2
ssh ol8rac1
GUI를 위한 package 설치
dnf config-manager --enable ol8_codeready_builder
dnf install -y xorg-x11-apps
#이건 2번노드에도 해줘야 됨! 얘 때문에 2일 손해봄;; 처음에 패키지 체크할 때 했으면 안해도 됨.
dnf install -y libnsl
최신 RU patch unzip
su - grid
cd /u01/oraCD
unzip p37957391_190000_Linux-x86-64_opatch_19.28.0.0.zip
ll
gridSetup.sh 진행
su - grid
cd $GI_HOME
# RU 패치 적용을 동시에 수행. 대신 apply 수행 이후에 GUI 화면이 뜨기 때문에 시간이 상당히 걸림.
./gridSetup.sh -applyRU /u01/oraCD/37957391






위의 에러는 OpenSSH 8.0에서 클라이언트측 검사 기능이 추가되었고, 해당 기능을 비활성화하는 새로운 -T 플래그를 scp에 제공함. 아무튼 검사 기능 때문에 ssh로 반대편 노드에 접속이 잘 됨에도 불구하고 에러가 발생한다.
해결 방법으로는 기존의 scp 파일을 사용하지 않고 새로 scp 파일을 만들어 사용하면 된다. 설치가 끝난 뒤에는 다시 원복을 시켜준다.
mv /usr/bin/scp /usr/bin/scp.orig
vi /usr/bin/scp
/usr/bin/scp.orig -T $*
chmod 555 /usr/bin/scp
-- 원복
mv /usr/bin/scp.orig /usr/bin/scp
번외로 OpenSSH 9.0부터는 -T 뿐만 아니라 -O도 붙여줘야 한다더라. 근데 안 해봤으니깐 아직은 모름.
이렇게 했는데도 오류 발생했음. INS-06006이고 detail 눌렀을 때 PRVF-7546 나왔음. 이거는 libnsl 패키지를 2번노드에서 install 안 해서 발생한 듯. 진짜 이거 때문에 2일 다 날렸다;;






















RAM을 4G밖에 안 줘서 그런가 자꾸 중간에 connection이 끊어진다. 서버 자체가 종료되는 건 아닌데 network 쪽 문제긴 한 거 같은데, bus 얘기도 보이고, 다른 세션들은 접속 잘 되는데 gridsetup.sh 실행시킨 세션만 끊어진다.
그래서 RAM 6G로 주고 다시 처음부터 만들어 봐야겠다…
6G로 주고 다시 하니깐 됐다.
중간에 root 스크립트 실행시키겠다고 메시지 하나 뜨는데 yes 눌러주기.
스샷을 빼먹었는데 설치 끝날 때 scan ip를 DNS에 등록하지 않았다고 메시지 하나 뜨는데 무시하고 넘어가도 상관없음.
# 설치 확인.
crsctl stat res -t

ASMCA 수행
asmca
