Oracle 61일차

[ RAC 설치 ]

1. 설치 시 필요 프로그램

1) 가상화 프로그램 : VMWare

2) 서버 접속 툴 : Putty, MobaXterm

3) 파일 전송 프로그램 : winscp

4) GUI 출력 : xmanager, xming(https://sourceforge.net/projects/xming)

5) 서버 이미지 파일(https://edelivery.oracle.com/) : OEL8(V1042736-01.iso, 8.10 버전) <—— 14,156,824,576 바이트

6) 오라클 설치 파일
grid 19c install : V982068-01.zip
server 19c install : V982063-01.zip

OEL 8.4 -> x86 64bit -> V1009565-01.iso

Oracle database 19.3 Enterprise Edition -> Linux x86-64 -> Long Term Release & Grid Infrastructure ->

2-1. 첫번째 서버 설치 과정

vmware에서 서버 생성

version에서 Oracle Linux 8 선택 ->
Virtual machine name : oel8db1 로 설정. ->
virtual machine single file ->
max disk size : 100GB ->
memory : 4GB ->
processors : 2 ->
CD/DVD : oel8 V1009565-01.iso 파일로 설정

oel8 설치

맨 처음 실행 시 Install 뭐시기 선택 엔터 ->
Time & Date : Seoul, 시간 변경 ->
Software selection : Server with GUI + Legacy UNIX Compatibility, Development Tools ->
KDUMP : disable ->
Security Policy : off ->
Network & Hostname : oel8db1, ethernet on ->
Installation Destination : custom -> /boot 500M, swap 8192M, / 나머지 -> Accept changes
Root Password : oracle ->
User Creation : itwill/oracle, Make this user administrator ->

IPv4 설정

wired connected -> wired settings -> 톱니바퀴 모양 -> IPv4 -> Manual -> 172.16.124.100 / 255.255.255.0 / 172.16.124.2 / DNS:8.8.8.8 -> 재시작 하고 다시 ifconfig 쳐서 변경 잘 됐나 확인

disk 추가 (shared)

문서 폴더의 Virtual Machines 폴더로 이동 ->
새 폴더 rac19db 생성 ->
해당 폴더로 oel8db1 서버 shutdown 후 이동시키기 (~/rac19db/oel8db1 이런 형태)->
VMware 에서 기존에 있던 oel8db1을 library에서 삭제(remove from the library)한 뒤 open virtual machine -> rac19db/oel8db1/oel8db1.vmx 선택하면 다시 oel8db1이 library에 뜸. ->
rac19db/storage 폴더 생성 ->
edit virtual machine settings -> Add -> hard disk -> NVMe -> 30GB, allocate, single file -> rac19db\storage\disk30.vmdk 위치에 해당 이름으로 저장. ->
Advanced… : NVMe 1:0 ->

network 추가 (private망)

Add -> network adapter ->
Host-only 로 설정

oel8db1.vmx 수정

rac19db/oel8db1/oel8db1.vmx 메모장으로 편집해서 맨 뒤에 아래 4줄 추가. 저장.

disk.locking = "FALSE"
diskLib.dataCacheMaxSize = "0"
nvme1.sharedBus = "virtual"
nvme1:0.deviceType = "disk"

다시 서버 기동 후 두번째 network 설정

I copied 선택. ->
ethernet (ens224) connect ->
wired settings -> IPv4 -> 10.10.10.10 / 255.255.255.0 ->

재시작 후 반영됐나 확인.

putty로 접속

itwill/oracle 로 접속. ->
fdisk -l 해서 30GiB 짜리 있는지 확인.

vi /etc/hosts 수정

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

##Public
172.16.124.100 oel8db1
172.16.124.200 oel8db2

##Private
10.10.10.10 oel8db1-priv
10.10.10.20 oel8db2-priv

##Virtual
172.16.124.110 oel8db1-vip
172.16.124.210 oel8db2-vip

##SCAN
172.16.124.150 oel8db-scan

1번 서버 oracle 설치 전 환경 설정

preinstall 다운
yum install -y oracle-database-preinstall-19c
oracle 계정 설정
groupadd dba
usermod -g dba -G dba oracle
passwd oracle
selinux disable 설정
vi /etc/selinux/config
------------------------------
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
방화벽, 블루투스 등 stop
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

systemctl stop avahi-daemon.socket
systemctl disable avahi-daemon.socket

systemctl stop avahi-daemon
systemctl disable avahi-daemon

systemctl stop libvirtd
systemctl disable libvirtd
ASM 구성을 위한 추가 rpm 다운로드
# 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
temp 파일 시스템 할당
vi /etc/fstab 맨 아래에 아래 내용 추가
-----------------------------------------
tmpfs                       /dev/shm                tmpfs   size=7g         0 0
/dev/shm 영역 remount
# systemctl daemon-reload
# mount -o remount /dev/shm
# df -h /dev/shm
---------------------출력-------------------------
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           7.0G     0  7.0G   0% /dev/shm
공유 디스크 포맷
# fdisk -l                               <--- 30g로 된 디스크 이름 확인
# fdisk /dev/nvme1n1               <--- 디스크 이름 확인 필요
(n --> p --> 1 --> Enter --> Enter --> w 순서대로 입력!)

# fdisk -l
-- 잘 했으면 아래에 device partition 이름이 아까와는 다르게 추가됨
Disk /dev/nvme1n1: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4dc73b85

Device         Boot Start      End  Sectors Size Id Type
/dev/nvme1n1p1       2048 62914559 62912512  30G 83 Linux
-- physical volume 생성
# pvcreate /dev/nvme1n1p1
# vgcreate 19c /dev/nvme1n1p1
-- logical volume 생성
# lvcreate -L 2g -n OCR_VOTE1 19c
# lvcreate -L 2g -n OCR_VOTE2 19c
# lvcreate -L 2g -n OCR_VOTE3 19c
# lvcreate -L 20G -n DATA 19c
Oracle ASM 설정 및 시작
# oracleasm configure -i 
(oracle -> dba -> y -> y 순서대로 입력!)
ASM 디스크 생성
# oracleasm init
ASM 상태 확인
# oracleasm status 
Checking if ASM is loaded: yes
Checking if /dev/oracleasm is mounted: yes

# 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 createdisk OCR_VOTE1 /dev/19c/OCR_VOTE1 
oracleasm createdisk OCR_VOTE2 /dev/19c/OCR_VOTE2 
oracleasm createdisk OCR_VOTE3 /dev/19c/OCR_VOTE3 
oracleasm createdisk DATA01 /dev/19c/DATA 
디스크 스캔
oracleasm scandisks

생성 리스트 확인 4개. 나와야 정상
oracleasm listdisks
디렉터리 생성 및 권한 부여
mkdir -p /oracle/media 
mkdir -p /oracle/app/oracle/product/19c 
mkdir -p /oracle/app/grid/19c 
mkdir -p /oracle/oraInventory 
mkdir -p /oraarch 
chown -R oracle:dba /oracle 
chmod -R 775 /oracle 
chown -R oracle:dba /oraarch 
chmod -R 775 /oraarch 
chown -R oracle:dba /dev/oracleasm 
chown -R oracle:dba /dev/19c 
chmod 777 /oracle/media
.bash_profile 수정
# su - oracle 
# vi .bash_profile
-------------------------------------
# env 
export ORACLE_BASE=/oracle/app/oracle 
export ORACLE_HOME=$ORACLE_BASE/product/19c 
export ORACLE_SID=ORADB1 
export GRID_HOME=/oracle/app/grid/19c 
export GRID_SID=+ASM1 
export PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:$PATH 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib 
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib 
 
alias grid='export ORACLE_HOME=$GRID_HOME; export ORACLE_SID=$GRID_SID; export 
PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:$PATH; echo $ORACLE_SID; echo $ORACLE_HOME'
alias db='. ~oracle/.bash_profile;export PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:$PATH; echo $ORACLE_SID;echo $ORACLE_HOME' 
alias oh='cd $ORACLE_HOME;pwd' 
alias ss='sqlplus / as sysdba' 
--------------------------------------
. .bash_profile

2-2. 두번째 서버 설치 과정

oel8db1 shutdown 후 복사해서 oel8db2 만들기

폴더째로 복사하기 ->
파일명에 1을 2로 다 바꾸기 ->
vmx파일 들어가서 ctrl+H 한 뒤에 oel8db1을 oel8db2 로 모두 바꾸기 ->

IPv4 변경 후 재시작

172.16.124.200 / 255.255.255.0 / 172.16.124.2
10.10.10.20 / 255.255.255.0

hostname 변경

vi /etc/hostname
oel8db2
또는
hostnamectl set-hostname oel8db2
reboot

2-3. 마무리

서버간 통신 체크

/etc/hosts에 지정을 잘못 해뒀으면 안된다.

oel8db1에서)
ping oel8db2
ping oel8db2-priv

oel8db2에서)
ping oel8db1
ping oel8db1-priv

.bash_profile 수정

su - oracle
vi .bash_profile
-----------------------------------------
# env
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c
export ORACLE_SID=ORADB2
export GRID_HOME=/oracle/app/grid/19c
export GRID_SID=+ASM2
export PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

alias grid='export ORACLE_HOME=$GRID_HOME; export ORACLE_SID=$GRID_SID; export PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:$PATH; echo $ORACLE_SID; echo $ORACLE_HOME'
alias db='. ~oracle/.bash_profile;export PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:$PATH; echo $ORACLE_SID;echo $ORACLE_HOME'
alias oh='cd $ORACLE_HOME;pwd'
alias ss='sqlplus / as sysdba'

3. Grid 설치 전 준비

OracleDB zip 파일 이동 & 압축 해제

WinSCP에 oracle계정으로 접속. ->
/oracle/media 폴더에 V982068-01.zip 기본모드로 옮기기. ->

oracle 계정에서)
cd $GRID_HOME 
unzip /oracle/media/V982068-01.zip

cvuqdisk-1.0.10-1.rpm 설치

root 계정에서)
rpm -ivh /oracle/app/grid/19c/cv/rpm/cvuqdisk-1.0.10-1.rpm

2번 노드 싱크 (1번에서 작업)

rsync --progress /oracle/app/grid/19c/cv/rpm/cvuqdisk-1.0.10-1.rpm oel8db2:/root/
-----------
yes -> 패스워드 입력

2번에서 root계정으로 설치

rpm -ivh /root/cvuqdisk-1.0.10-1.rpm

1번에서 oracle계정으로 수행

cd $GRID_HOME/oui/prov/resources/scripts 
./sshUserSetup.sh -user oracle -hosts "oel8db1 oel8db2" -noPromptPassphrase -advanced
-----------------------------------
yes -> oracle계정 패스워드 -> oracle계정 패스워드 -> oracle계정 패스워드 -> oracle계정 패스워드

xclock 설치 및 구동

windows에 gui가 xming을 통해서 잘 보내지는지 테스트하려는 것.

1번서버 root계정에서 수행)
dnf config-manager --enable ol8_codeready_builder
dnf install xorg-x11-apps
------------------
y 입력
xming 연동
Xming 실행 ->
putty 실행 -> 왼쪽 목록에 SSH -> X11 -> Enable, :0.0 ->
oracle 계정으로 접속 ->
xclock
-- 시계 나오는 거 확인
-- 안 나오면 export DISPLAY=localhost:0.0

4. GRID 설치 (1번, oracle계정)

cd $GRID_HOME
export CV_ASSUME_DISTID=RHEL7.6
./gridSetup.sh

변경X

변경X

이름변경

add -> oel8db2, oel8db2-vip -> SSH connectivity… -> oracle 패스워드 입력 -> test

에러 06006 발생 시
노드1,2) root 계정 아래 수행 후 재 테스트 
# 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

ASM & Private 로 변경

변경 X

변경 X

VOTING DIST 설정 : OCR_VOTE, Change Discovery Path… 클릭해서 /dev/oracleasm/disks 입력 -> 정상 출력 확인 및 디스크 선택

passwd 입력

변경 X

변경 X

dba로 system group 설정

변경X -> not empty 메세지 떠도 넘기기

변경X

automatically run -> oracle 패스워드 입력

scan ip가 도메인 등록되어 있지 않아 발생하는 warning (모두 무시)

설치진행

root 스크립트 자동 실행 여부 (YES)

scan ip가 DNS에 등록되어 있지 않아서 발생한 문제 무시해도 됨. (OK)

위의 fail로 인한 configure cluster fail이지만 정상 (next)

설치완료!

설치 후 crs 상태 확인

crsctl stat res -t 
ocrcheck 

5. asm 디스크 구성

1번 oracle 계정에서 계속 설치 진행)
asmca

Disk Groups 선택 후 create

DATA / External(None) 후 체크박스 잘 하고 OK

Exit -> Yes 로 나오기

확인)
crsctl stat res -t 

6. DB 엔진 설치

winscp 로 V982063-01.zip/oracle/media에 옮기기

압축 해제 1번 oracle 계정)
cd $ORACLE_HOME 
unzip /oracle/media/V982063-01.zip 
설치 진행 1번 oracle 계정)
cd $ORACLE_HOME 
./runInstaller 

Software Only

변경 X

변경 X (노드 확인)

변경 X

변경 X

dba로 변경

Automatically 체크 -> oracle

scan ip 관련 에러 ignore
-> 나는 clock synchoronization 문제 떴는데 그냥 ignore 하고 돌림

아래가 원래 떠야되는 모습

root script 실행 여부 (YES)

설치 완료

7. DBCA로 DB 생성

DBCA 수행 (1번, oracle 계정, xclock가능한 세션)

dbca

변경X

변경 X

custom database 선택

변경 X

ORADB 입력 -> Create as Container db 체크 해제

변경 X

변경 X

체크박스 해제 몇개 해주기

Use ASMM 선택만 하고 사이즈 딱히 변경 X

character sets 변경

변경 X

Run 이랑 EM 체크 해제

패스워드 설정 oracle

변경 X

scan error ignore all

설치 완료!

DB 생성 확인

crsctl stat res -t
sqlplus / as sysdba

SQL> select instance_name, version, status from gv$instance;
INSTANCE_NAME    VERSION           STATUS
---------------- ----------------- ------------
ORADB1           19.0.0.0.0        OPEN
ORADB2           19.0.0.0.0        OPEN

1번 2번 모두)root 유저 .bash_profile 수정

su - root
vi .bash_profile
----------------------아래 내용 추가------------------------
# grid env 
export ORACLE_BASE=/oracle/app/oracle 
export ORACLE_HOME=$ORACLE_BASE/product/19c 
export GRID_HOME=/oracle/app/grid/19c 
export PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:$PATH 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib 
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib 
--------------------------------------------------------------
. .bash_profile

Leave a Comment