1. Oracle Linux 8 설치 준비
A) 부팅 화면
{}
B) 언어 선택
C) 시간 및 날짜
D) 소프트웨어 선택
E) 설치 목적지
F) KDUMP
G) 네트워크 & 호스트 이름
H) 보안 정책
2. 설치 시작
A) 사용자 설정
3. 설치 완료
A) 재부팅 화면
B) 초기 설정
4. YUM 설정 및 패키지 설치
A) Local YUM Repository 설정
외부 인터넷 연결을 하지않고 설치 ISO 이미지로 YUM Repository를 구성하여 yum install을 사용할 수 있도록 설정하는 방법입니다.
mount /dev/cdrom /mnt df | grep mnt
[root@node1 ~]# mount /dev/cdrom /mnt mount: /mnt: WARNING: device write-protected, mounted read-only. [root@node1 ~]# df | grep mnt /dev/sr0 8141108 8141108 0 100% /mnt
VM에 ISO 파일을 연결하고, cdrom을 디렉토리에 mount 시켜줍니다.
mv /etc/yum.repos.d/oracle-linux-ol8.repo /etc/yum.repos.d/oracle-linux-ol8.repo.bak mv /etc/yum.repos.d/uek-ol8.repo /etc/yum.repos.d/uek-ol8.repo.bak mv /etc/yum.repos.d/virt-ol8.repo /etc/yum.repos.d/virt-ol8.repo.bak
[root@node1 ~]# mv /etc/yum.repos.d/oracle-linux-ol8.repo /etc/yum.repos.d/oracle-linux-ol8.repo.bak [root@node1 ~]# mv /etc/yum.repos.d/uek-ol8.repo /etc/yum.repos.d/uek-ol8.repo.bak [root@node1 ~]# mv /etc/yum.repos.d/virt-ol8.repo /etc/yum.repos.d/virt-ol8.repo.bak
기존에 생성되어 있던 Repository 파일은 모두 이름을 변경하여, 사용하지 않도록 수정합니다.
[InstallMedia-BaseOS] name=Oracle Linux 8 - BaseOS metadata_expire=-1 gpgcheck=1 enabled=1 baseurl=file:///mnt/BaseOS/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle [InstallMedia-AppStream] name=Oracle Linux 8 - AppStream metadata_expire=-1 gpgcheck=1 enabled=1 baseurl=file:///mnt/AppStream/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
[root@node1 ~]# cat /etc/yum.repos.d/local.repo [InstallMedia-BaseOS] name=Oracle Linux 8 - BaseOS metadata_expire=-1 gpgcheck=1 enabled=1 baseurl=file:///mnt/BaseOS/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle [InstallMedia-AppStream] name=Oracle Linux 8 - AppStream metadata_expire=-1 gpgcheck=1 enabled=1 baseurl=file:///mnt/AppStream/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
local.repo라는 Repository 파일을 생성합니다.
Repository 이름과 연결될 디렉토리 등을 입력합니다.
yum clean all yum repolist all
[root@node1 ~]# yum clean all 0 files removed [root@node1 ~]# yum repolist all repo id repo name status InstallMedia-AppStream Oracle Linux 8 - AppStream 사용 InstallMedia-BaseOS Oracle Linux 8 - BaseOS 사용
Repository를 재로딩하면 정상적으로 등록된 것을 확인할 수 있습니다.
B) 필수 패키지 설치
yum install elfutils-libelf-devel fontconfig-devel ksh libaio-devel libnsl sysstat # yum install kmod-oracleasm
[root@node1 ~]# yum install elfutils-libelf-devel fontconfig-devel ksh libaio-devel libnsl sysstat Oracle Linux 8 - BaseOS 176 MB/s | 3.2 MB 00:00 Oracle Linux 8 - AppStream 176 MB/s | 5.8 MB 00:00 마지막 메타 데이터 만료 확인 : 0:00:02 전에 2020년 09월 22일 (화) 오후 01시 10분 06초. Dependencies resolved. ================================================================================= Package Arch Version Repository Size ================================================================================= Installing: elfutils-libelf-devel x86_64 0.178-7.el8 InstallMedia-BaseOS 58 k fontconfig-devel x86_64 2.13.1-3.el8 InstallMedia-BaseOS 151 k ksh x86_64 20120801-254.0.1.el8 InstallMedia-AppStream 927 k libaio-devel x86_64 0.3.112-1.el8 InstallMedia-BaseOS 19 k libnsl x86_64 2.28-101.0.1.el8 InstallMedia-BaseOS 97 k sysstat x86_64 11.7.3-2.el8 InstallMedia-AppStream 426 k Installing dependencies: bzip2-devel x86_64 1.0.6-26.el8 InstallMedia-BaseOS 224 k expat-devel x86_64 2.2.5-3.el8 InstallMedia-BaseOS 55 k freetype-devel x86_64 2.9.1-4.el8 InstallMedia-BaseOS 464 k libpng-devel x86_64 2:1.6.34-5.el8 InstallMedia-BaseOS 327 k libuuid-devel x86_64 2.32.1-22.el8 InstallMedia-BaseOS 95 k lm_sensors-libs x86_64 3.4.0-21.20180522git70f7e08.el8 InstallMedia-BaseOS 59 k zlib-devel x86_64 1.2.11-13.el8 InstallMedia-BaseOS 57 k Transaction Summary ================================================================================= 설치 13 Packages Total size: 2.9 M Installed size: 9.5 M Is this ok [y/N]: y 패키지 다운로드중: 경고: /mnt/BaseOS/Packages/bzip2-devel-1.0.6-26.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ad986da3: NOKEY Oracle Linux 8 - BaseOS 3.0 MB/s | 3.1 kB 00:00 GPG키 0xAD986DA3를 불러옵니다: 사용자 : "Oracle OSS group (Open Source Software group) <build@oss.oracle.com>" GPG 지문: 76FD 3DB1 3AB6 7410 B89D B10E 8256 2EA9 AD98 6DA3 출처 : /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle Is this ok [y/N]: y 성공적으로 가져온 키 트랜잭션 점검 실행 중 트랜잭션 검사가 성공했습니다. 트랜잭션 테스트 실행 중 트랜잭션 테스트가 완료되었습니다. 거래 실행 중 준비 중입니다 : 1/1 Installing : zlib-devel-1.2.11-13.el8.x86_64 1/13 Installing : libpng-devel-2:1.6.34-5.el8.x86_64 2/13 Installing : lm_sensors-libs-3.4.0-21.20180522git70f7e08.el8.x86_6 3/13 스크립틀릿 실행: lm_sensors-libs-3.4.0-21.20180522git70f7e08.el8.x86_6 3/13 Installing : libuuid-devel-2.32.1-22.el8.x86_64 4/13 Installing : expat-devel-2.2.5-3.el8.x86_64 5/13 Installing : bzip2-devel-1.0.6-26.el8.x86_64 6/13 Installing : freetype-devel-2.9.1-4.el8.x86_64 7/13 Installing : fontconfig-devel-2.13.1-3.el8.x86_64 8/13 Installing : sysstat-11.7.3-2.el8.x86_64 9/13 스크립틀릿 실행: sysstat-11.7.3-2.el8.x86_64 9/13 Installing : elfutils-libelf-devel-0.178-7.el8.x86_64 10/13 Installing : ksh-20120801-254.0.1.el8.x86_64 11/13 스크립틀릿 실행: ksh-20120801-254.0.1.el8.x86_64 11/13 Installing : libnsl-2.28-101.0.1.el8.x86_64 12/13 Installing : libaio-devel-0.3.112-1.el8.x86_64 13/13 스크립틀릿 실행: libaio-devel-0.3.112-1.el8.x86_64 13/13 확인 중 : bzip2-devel-1.0.6-26.el8.x86_64 1/13 확인 중 : elfutils-libelf-devel-0.178-7.el8.x86_64 2/13 확인 중 : expat-devel-2.2.5-3.el8.x86_64 3/13 확인 중 : fontconfig-devel-2.13.1-3.el8.x86_64 4/13 확인 중 : freetype-devel-2.9.1-4.el8.x86_64 5/13 확인 중 : libaio-devel-0.3.112-1.el8.x86_64 6/13 확인 중 : libnsl-2.28-101.0.1.el8.x86_64 7/13 확인 중 : libpng-devel-2:1.6.34-5.el8.x86_64 8/13 확인 중 : libuuid-devel-2.32.1-22.el8.x86_64 9/13 확인 중 : lm_sensors-libs-3.4.0-21.20180522git70f7e08.el8.x86_6 10/13 확인 중 : zlib-devel-1.2.11-13.el8.x86_64 11/13 확인 중 : ksh-20120801-254.0.1.el8.x86_64 12/13 확인 중 : sysstat-11.7.3-2.el8.x86_64 13/13 설치됨: bzip2-devel-1.0.6-26.el8.x86_64 elfutils-libelf-devel-0.178-7.el8.x86_64 expat-devel-2.2.5-3.el8.x86_64 fontconfig-devel-2.13.1-3.el8.x86_64 freetype-devel-2.9.1-4.el8.x86_64 ksh-20120801-254.0.1.el8.x86_64 libaio-devel-0.3.112-1.el8.x86_64 libnsl-2.28-101.0.1.el8.x86_64 libpng-devel-2:1.6.34-5.el8.x86_64 libuuid-devel-2.32.1-22.el8.x86_64 lm_sensors-libs-3.4.0-21.20180522git70f7e08.el8.x86_64 sysstat-11.7.3-2.el8.x86_64 zlib-devel-1.2.11-13.el8.x86_64 완료되었습니다!
오라클 설치에 필요한 패키지들을 설치합니다.
rpm -qa bc rpm -qa binutils #rpm -qa dtrace-utils rpm -qa elfutils-libelf rpm -qa elfutils-libelf-devel rpm -qa fontconfig-devel rpm -qa glibc rpm -qa glibc-devel rpm -qa ksh rpm -qa libaio rpm -qa libaio-devel #rpm -qa libdtrace-ctf-devel rpm -qa libXrender rpm -qa libX11 rpm -qa libXau rpm -qa libXi rpm -qa libXtst rpm -qa libgcc rpm -qa libnsl rpm -qa librdmacm rpm -qa libstdc++ rpm -qa libstdc++-devel rpm -qa libxcb rpm -qa libibverbs rpm -qa make rpm -qa smartmontools rpm -qa sysstat
[root@node1 ~]# rpm -qa bc bc-1.07.1-5.el8.x86_64 [root@node1 ~]# rpm -qa binutils binutils-2.30-73.0.1.el8.x86_64 [root@node1 ~]# rpm -qa elfutils-libelf elfutils-libelf-0.178-7.el8.x86_64 [root@node1 ~]# rpm -qa elfutils-libelf-devel elfutils-libelf-devel-0.178-7.el8.x86_64 [root@node1 ~]# rpm -qa fontconfig-devel fontconfig-devel-2.13.1-3.el8.x86_64 [root@node1 ~]# rpm -qa glibc glibc-2.28-101.0.1.el8.x86_64 [root@node1 ~]# rpm -qa glibc-devel glibc-devel-2.28-101.0.1.el8.x86_64 [root@node1 ~]# rpm -qa ksh ksh-20120801-254.0.1.el8.x86_64 [root@node1 ~]# rpm -qa libaio libaio-0.3.112-1.el8.x86_64 [root@node1 ~]# rpm -qa libaio-devel libaio-devel-0.3.112-1.el8.x86_64 [root@node1 ~]# rpm -qa libXrender libXrender-0.9.10-7.el8.x86_64 [root@node1 ~]# rpm -qa libX11 libX11-1.6.8-3.el8.x86_64 [root@node1 ~]# rpm -qa libXau libXau-1.0.8-13.el8.x86_64 [root@node1 ~]# rpm -qa libXi libXi-1.7.9-7.el8.x86_64 [root@node1 ~]# rpm -qa libXtst libXtst-1.2.3-7.el8.x86_64 [root@node1 ~]# rpm -qa libgcc libgcc-8.3.1-5.0.3.el8.x86_64 [root@node1 ~]# rpm -qa libnsl libnsl-2.28-101.0.1.el8.x86_64 [root@node1 ~]# rpm -qa librdmacm librdmacm-26.0-8.el8.x86_64 [root@node1 ~]# rpm -qa libstdc++ libstdc++-8.3.1-5.0.3.el8.x86_64 [root@node1 ~]# rpm -qa libstdc++-devel libstdc++-devel-8.3.1-5.0.3.el8.x86_64 [root@node1 ~]# rpm -qa libxcb libxcb-1.13.1-1.el8.x86_64 [root@node1 ~]# rpm -qa libibverbs libibverbs-26.0-8.el8.x86_64 [root@node1 ~]# rpm -qa make make-4.2.1-10.el8.x86_64 [root@node1 ~]# rpm -qa smartmontools smartmontools-6.6-3.el8.x86_64 [root@node1 ~]# rpm -qa sysstat sysstat-11.7.3-2.el8.x86_64
오라클 설치에 필요한 패키지가 모두 설치되었는지 확인합니다.
{}
5. GUI 접속 환경 설정
A) GUI 환경 접속
{}
6. 리눅스 환경 설정
A) 설치 정보 확인
uname -a cat /etc/oracle-release
[root@node1 ~]# uname -a Linux node1 5.4.17-2011.1.2.el8uek.x86_64 #2 SMP Mon Apr 20 22:10:46 PDT 2020 x86_64 x86_64 x86_64 GNU/Linux [root@node1 ~]# cat /etc/oracle-release Oracle Linux Server release 8.2
먼저 설치된 리눅스의 버전 정보를 확인합니다.
B) 미사용 서비스 정리
### 방화벽 중지 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 ### NTP 중지 systemctl stop ntpdate systemctl disable ntpdate ### 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
[root@node1 ~]# systemctl stop firewalld [root@node1 ~]# systemctl disable firewalld Removed /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@node1 ~]# systemctl stop bluetooth [root@node1 ~]# systemctl disable bluetooth Removed /etc/systemd/system/dbus-org.bluez.service. Removed /etc/systemd/system/bluetooth.target.wants/bluetooth.service. [root@node1 ~]# systemctl stop chronyd [root@node1 ~]# systemctl disable chronyd [root@node1 ~]# mv /etc/chrony.conf /etc/chrony.conf.bak [root@node1 ~]# systemctl stop ntpdate Failed to stop ntpdate.service: Unit ntpdate.service not loaded. [root@node1 ~]# systemctl disable ntpdate Failed to disable unit: Unit file ntpdate.service does not exist. [root@node1 ~]# systemctl stop avahi-daemon.socket [root@node1 ~]# systemctl disable avahi-daemon.socket Removed /etc/systemd/system/sockets.target.wants/avahi-daemon.socket. [root@node1 ~]# systemctl stop avahi-daemon [root@node1 ~]# systemctl disable avahi-daemon Removed /etc/systemd/system/multi-user.target.wants/avahi-daemon.service. Removed /etc/systemd/system/dbus-org.freedesktop.Avahi.service. [root@node1 ~]# systemctl stop libvirtd [root@node1 ~]# systemctl disable libvirtd Removed /etc/systemd/system/multi-user.target.wants/libvirtd.service. Removed /etc/systemd/system/sockets.target.wants/virtlogd.socket. Removed /etc/systemd/system/sockets.target.wants/virtlockd.socket.
테스트 환경에서 사용하지 않는 서비스를 정리합니다.
실습 환경에서는 CTSS를 활성화 모드로 운영할 것이므로 NTP나 chrony 등의 시간 동기화 서비스를 중지할 것입니다.
그러나 실제 운영환경에서는 구성 환경을 고려하여 사용 여부를 결정해야하며, 가급적 NTP를 설정(-x 포함)하여 사용하는 것을 권장합니다.
C) hosts 파일 수정
### Public 10.0.3.101 node1 node1.localdomain 10.0.3.102 node2 node2.localdomain ### Private 10.0.5.101 node1-priv node1-priv.localdomain 10.0.5.102 node2-priv node2-priv.localdomain ### Virtual 10.0.3.201 node1-vip node1-vip.localdomain 10.0.3.202 node2-vip node2-vip.localdomain ### SCAN 10.0.3.191 cluster-scan cluster-scan.localdomain 10.0.3.192 cluster-scan cluster-scan.localdomain 10.0.3.193 cluster-scan cluster-scan.localdomain
/etc/hosts 파일에 설치할 모든 서버의 IP와 호스트명을 추가합니다.
오라클 소프트웨어 설치를 정상적으로 진행하기 위해 로컬 노드와 원격 노드에 대한 정보를 정확히 입력해야 합니다.
SCAN IP는 1개만 할당해도 설치에 지장은 없습니다. 다만, 18c부터는 3개를 할당하지 않을 경우, 필요 조건 검사 과정에서 검증 실패 메시지가 출력됩니다.
D) 보안 설정 변경
SELINUX=permissive
setenforce permissive
Selinux 모드를 permissive로 변경합니다.
E) dnsmasq 활성화
local=/localdomain/
dnsmasq 서비스의 환경 설정 파일에 로컬 도메인에 대한 정보를 입력합니다.
cat /etc/resolv.conf systemctl start dnsmasq systemctl enable dnsmasq nslookup rac-scan.localdomain # 경우에 따라 재기동 필요
[root@node1 ~]# cat /etc/resolv.conf # Generated by NetworkManager search localdomain nameserver 127.0.0.1 [root@node1 ~]# systemctl start dnsmasq [root@node1 ~]# systemctl enable dnsmasq Created symlink /etc/systemd/system/multi-user.target.wants/dnsmasq.service → /usr/lib/systemd/system/dnsmasq.service. [root@node1 ~]# nslookup cluster-scan.localdomain Server: 127.0.0.1 Address: 127.0.0.1#53 Name: cluster-scan.localdomain Address: 10.0.3.193 Name: cluster-scan.localdomain Address: 10.0.3.191 Name: cluster-scan.localdomain Address: 10.0.3.192 [root@node1 ~]# nslookup cluster-scan.localdomain Server: 127.0.0.1 Address: 127.0.0.1#53 Name: cluster-scan.localdomain Address: 10.0.3.191 Name: cluster-scan.localdomain Address: 10.0.3.192 Name: cluster-scan.localdomain Address: 10.0.3.193 [root@node1 ~]# nslookup cluster-scan.localdomain Server: 127.0.0.1 Address: 127.0.0.1#53 Name: cluster-scan.localdomain Address: 10.0.3.192 Name: cluster-scan.localdomain Address: 10.0.3.193 Name: cluster-scan.localdomain Address: 10.0.3.191
별도의 DNS 서비스 없이 SCAN을 사용하기 위해 dnsmasq 서비스를 활성화합니다.
DNS 설정 파일(resolv.conf)에는 "nameserver 127.0.0.1"가 입력되어 있어야 합니다.
F) 가상 메모리 파일 시스템 할당
tmpfs /dev/shm tmpfs size=8g 0 0
mount -o remount /dev/shm
tmpfs /dev/shm tmpfs size=8g 0 0
[root@node1 ~]# df -h | grep shm tmpfs 4.9G 0 4.9G 0% /dev/shm [root@node1 ~]# cat /etc/fstab | grep tmpfs tmpfs /dev/shm tmpfs size=8g 0 0 [root@node1 ~]# mount -o remount /dev/shm [root@node1 ~]# df -h | grep shm tmpfs 8.0G 0 8.0G 0% /dev/shm
가상 메모리 파일 시스템(tmpfs) 값을 설정하고 remount하여 적용시킵니다.
G) oracle 제공 추가 패키지 설치
rpm -ivh oracle-database-preinstall-19c-*.el8.x86_64.rpm rpm -ivh oracleasm-support-*.el8.x86_64.rpm rpm -ivh oracleasmlib-*.el8.x86_64.rpm
[root@node1 sf_oracle]# rpm -ivh oracle-database-preinstall-19c-1.0-1.el8.x86_64.rpm Verifying... ################################# [100%] 준비 중... ################################# [100%] Updating / installing... 1:oracle-database-preinstall-19c-1.################################# [100%] [root@node1 sf_oracle]# rpm -ivh oracleasm-support-2.1.12-1.el8.x86_64.rpm Verifying... ################################# [100%] 준비 중... ################################# [100%] Updating / installing... 1:oracleasm-support-2.1.12-1.el8 ################################# [100%] 알림: 'systemctl enable oracleasm.service'에 요청을 전송하고 있습니다. Synchronizing state of oracleasm.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable oracleasm Created symlink /etc/systemd/system/multi-user.target.wants/oracleasm.service → /usr/lib/systemd/system/oracleasm.service. [root@node1 sf_oracle]# rpm -ivh oracleasmlib-2.0.17-1.el8.x86_64.rpm Verifying... ################################# [100%] 준비 중... ################################# [100%] Updating / installing...
추가로 Oracle Database 설치를 위한 preinstall 패키지와 ASMLib 패키지를 설치합니다.
preinstall 패키지는 Oracle Linux Repository에서 받을 수 있고, ASMLib 패키지는 아래 경로에서 다운로드 합니다.
https://www.oracle.com/technetwork/server-storage/linux/asmlib/rhel7-2773795.html
H) 그룹 및 사용자 계정 작업
### 그룹 등록 (정책에 따라 생략) # groupadd oper # groupadd backupdba # groupadd dgdba # groupadd kmdba # groupadd racdba groupadd asmadmin groupadd asmdba groupadd asmoper ### 유저 그룹 설정 변경 (vboxsf는 VirtualBox의 Guest Additions 사용시 설정) usermod -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba,asmadmin,asmdba,asmoper,vboxsf oracle # usermod -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba,asmadmin,asmdba,asmoper oracle ### 계정 암호 변경 passwd oracle
[root@node1 ~]# groupadd asmadmin [root@node1 ~]# groupadd asmdba [root@node1 ~]# groupadd asmoper [root@node1 ~]# usermod -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba,asmadmin,asmdba,asmoper,vboxsf oracle [root@node1 ~]# passwd oracle oracle 사용자의 비밀 번호 변경 중 새 암호: 잘못된 암호: 암호는 8 개의 문자 보다 짧습니다 새 암호 재입력: passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.
소프트웨어를 설치할 사용자 계정과 그룹을 생성 또는 추가합니다.
preinstall 패키지가 설치되었다면 oracle 유저와 oinstall, dba, oper, backupdba, dgdba, kmdba, racdba 그룹은 이미 생성되어 있습니다.
vboxsf 그룹은 VirtualBox의 Guest Addition을 사용하기 위한 그룹으로, 실제 운영 환경에서 Guest Addition을 사용하지 않는다면 추가하지 않습니다.
passwd 명령어로 각 계정의 암호를 지정해주면 됩니다.
I) 설치 경로 생성
mkdir -p /u01/app/oracle chown -R oracle:oinstall /u01 chmod -R 775 /u01
[root@node1 ~]# mkdir -p /u01/app/oracle [root@node1 ~]# chown -R oracle:oinstall /u01 [root@node1 ~]# chmod -R 775 /u01
오라클 소프트웨어 설치를 위한 경로를 생성하고, 해당 경로에 대한 권한과 소유권을 수정합니다.
{}
J) 사용자 환경 설정
export TMP=/tmp export TMPDIR=$TMP export EDITOR=vi export ORACLE_HOSTNAME=node1 # 호스트명에 맞게 변경 export ORACLE_UNQNAME=racdb export ORACLE_BASE=/u01/app/oracle export GRID_HOME=/u01/app/19c/grid export DB_HOME=$ORACLE_BASE/product/19c/db_1 export ORACLE_HOME=$DB_HOME export ORACLE_SID=sehadb export ORACLE_TERM=xterm export BASE_PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_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 export NLS_LANG=AMERICAN_KOREA.AL32UTF8 export CV_ASSUME_DISTID=OEL7 PS1='[$ORACLE_SID:$PWD]> '
oracle 유저의 .bash_profile을 수정합니다.
root계정에서 해당 파일을 직접 수정할 수 있습니다.
alias grid_env='export ORACLE_HOME=$GRID_HOME;export ORACLE_SID=+ASM1;export PATH=$ORACLE_HOME/bin:$BASE_PATH' alias db_env='export ORACLE_HOME=$DB_HOME;export ORACLE_SID=sehadb;export PATH=$ORACLE_HOME/bin:$BASE_PATH'
Grid와 DB 인스턴스 간의 변환을 쉽게 하기 위해 alias를 설정합니다.
export ORACLE_BASE=/u01/app/oracle export GRID_HOME=/u01/app/19c/grid export DB_HOME=$ORACLE_BASE/product/19c/db_1 export PATH=$PATH:$GRID_HOME/bin
작업의 편의를 위해 root 계정의 .bash_profile에도 경로 정보를 추가로 입력합니다.
{}
{}
7. 공유 스토리지 구성
공유 스토리지 구성을 위해 고정 공간이 할당된 가상 디스크 6개를 추가로 생성합니다.
파일 이름 | 용량 | 타입 | 용도 | 비고 |
---|---|---|---|---|
CRS1.vdi | 1GB | Fixed / Shareable | CRS 저장 영역 | 공유(shareable) 디스크로 사용하기 위해서 Fixed Size로 생성합니다. |
CRS2.vdi | 1GB | Fixed / Shareable | ||
CRS3.vdi | 1GB | Fixed / Shareable | ||
DATA.vdi | 30GB | Fixed / Shareable | Data 저장 영역 | |
FRA.vdi | 20GB | Fixed / Shareable | Fast Recovery Area |
A) 가상 스토리지 파일 생성
vboxmanage createmedium --filename CRS1.vdi --size 1024 --format VDI --variant Fixed vboxmanage createmedium --filename CRS2.vdi --size 1024 --format VDI --variant Fixed vboxmanage createmedium --filename CRS3.vdi --size 1024 --format VDI --variant Fixed vboxmanage createmedium --filename DATA.vdi --size 30720 --format VDI --variant Fixed vboxmanage createmedium --filename FRA.vdi --size 20480 --format VDI --variant Fixed
PS D:\VM> pwd Path ---- D:\VM PS D:\VM> vboxmanage createmedium --filename CRS1.vdi --size 1024 --format VDI --variant Fixed 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Medium created. UUID: 3a6327e8-0367-4edc-bb5b-591efe123e8d PS D:\VM> vboxmanage createmedium --filename CRS2.vdi --size 1024 --format VDI --variant Fixed 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Medium created. UUID: 9d4524a2-5a06-478a-b733-81cd9889e59e PS D:\VM> vboxmanage createmedium --filename CRS3.vdi --size 1024 --format VDI --variant Fixed 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Medium created. UUID: a9d5a021-b91a-4c43-b7d5-2136bf447e83 PS D:\VM> vboxmanage createmedium --filename DATA.vdi --size 30720 --format VDI --variant Fixed 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Medium created. UUID: 94a0fac2-2040-42ec-9b7e-2fecc49bcf05 PS D:\VM> vboxmanage createmedium --filename FRA.vdi --size 20480 --format VDI --variant Fixed 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Medium created. UUID: 8f120938-511d-42b1-b15b-dfd4e20218e9
Host 컴퓨터에서 VM에 연결시킬 CRS, MGMT, DATA와 FRA 디스크를 생성합니다.
디스크는 2개의 노드에서 공유할 것이므로, 반드시 Fixed 모드로 디스크 공간이 사전에 할당되도록 생성해야 합니다.
B) 스토리지 파일 공유 설정
vboxmanage modifymedium CRS1.vdi --type shareable vboxmanage modifymedium CRS2.vdi --type shareable vboxmanage modifymedium CRS3.vdi --type shareable vboxmanage modifymedium DATA.vdi --type shareable vboxmanage modifymedium FRA.vdi --type shareable
PS D:\VM> vboxmanage modifymedium CRS1.vdi --type shareable PS D:\VM> vboxmanage modifymedium CRS2.vdi --type shareable PS D:\VM> vboxmanage modifymedium CRS3.vdi --type shareable PS D:\VM> vboxmanage modifymedium DATA.vdi --type shareable PS D:\VM> vboxmanage modifymedium FRA.vdi --type shareable
생성된 디스크들은 모두 shareable 디스크로 속성 변경이 필요합니다.
VirtualBox의 GUI 툴을 사용하여 변경할 수도 있습니다.
C) VM에 스토리지 연결
정지된 1번 노드의 설정 모드로 들어가서 디스크 파일을 추가합니다.
SATA 콘트롤러의 오른쪽에 하드디스크 모양의 아이콘을 클릭합니다
vboxmanage 명령으로 이미 생성된 디스크 파일을 추가할 것이므로 <기존 디스크 선택하기>를 클릭합니다.
Not Attatched에 등록된 디스크 목록에서 "CRS1.vdi"를 선택한 후 <선택>을 클릭합니다.
만약 생성된 디스크 이미지가 목록에 없다면 <추가> 아이콘을 클릭한 후에 디스크 이미지를 찾아서 추가하면 됩니다.
정상적으로 스토리지가 추가된 것을 확인할 수 있습니다.
다른 공유 디스크들도 같은 방법으로 추가해줍니다.
나머지 디스크 파일 모두 순서에 맞게 SATA 컨트롤러에 등록시켜줍니다.
반드시 동일한 순서대로 다른 노드에도 등록시켜야 합니다.
8. ASM 환경 구성
A) ASM 환경 설정 및 초기화
oracleasm configure -i oracleasm init oracleasm status oracleasm configure
[root@node1 ~]# oracleasm configure -i Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting <ENTER> without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: oracle Default group to own the driver interface []: asmadmin Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: Writing Oracle ASM library driver configuration: done [root@node1 ~]# oracleasm init Creating /dev/oracleasm mount point: /dev/oracleasm Loading module "oracleasm": oracleasm Configuring "oracleasm" to use device physical block size Mounting ASMlib driver filesystem: /dev/oracleasm [root@node1 ~]# oracleasm status Checking if ASM is loaded: yes Checking if /dev/oracleasm is mounted: yes [root@node1 ~]# oracleasm configure ORACLEASM_ENABLED=true ORACLEASM_UID=oracle ORACLEASM_GID=asmadmin ORACLEASM_SCANBOOT=true ORACLEASM_SCANORDER="" ORACLEASM_SCANEXCLUDE="" ORACLEASM_SCAN_DIRECTORIES="" ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"
ASM library에 대한 추가적인 환경 설정(사용자, 그룹, 부팅시 활성화, 부팅시 스캔 여부)을 수행하고 적용 여부를 검증합니다.
B) 디스크 파티셔닝
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" 입력 fdisk /dev/sdf ### "n", "p", "1", "엔터", "엔터", "w" 입력 ls /dev/sd*
[root@node1 ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf [root@node1 ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x5d4aacce. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-2097151, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): Created a new partition 1 of type 'Linux' and of size 1023 MiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. [root@node1 ~]# fdisk /dev/sdc Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x104edbfe. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-2097151, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): Created a new partition 1 of type 'Linux' and of size 1023 MiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. [root@node1 ~]# fdisk /dev/sdd Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x1780c426. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-2097151, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): Created a new partition 1 of type 'Linux' and of size 1023 MiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. [root@node1 ~]# fdisk /dev/sde Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x0401edc8. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-62914559, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-62914559, default 62914559): Created a new partition 1 of type 'Linux' and of size 30 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. [root@node1 ~]# fdisk /dev/sdf Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0xdc12631f. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-41943039, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): Created a new partition 1 of type 'Linux' and of size 20 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. [root@node1 ~]# ls /dev/sd* /dev/sda /dev/sda2 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sda1 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
VM에 연결된 디스크에 fdisk 명령어로 파티션 분할 작업을 수행 합니다.
실습의 편의를 위해 하나의 디스크가 하나의 파티션이 되도록 합니다.
C) ASM 디스크 생성
oracleasm createdisk CRS1 /dev/sdb1 oracleasm createdisk CRS2 /dev/sdc1 oracleasm createdisk CRS3 /dev/sdd1 oracleasm createdisk DATA /dev/sde1 oracleasm createdisk FRA /dev/sdf1 oracleasm scandisks oracleasm listdisks
[root@node1 ~]# oracleasm createdisk CRS1 /dev/sdb1 Writing disk header: done Instantiating disk: done [root@node1 ~]# oracleasm createdisk CRS2 /dev/sdc1 Writing disk header: done Instantiating disk: done [root@node1 ~]# oracleasm createdisk CRS3 /dev/sdd1 Writing disk header: done Instantiating disk: done [root@node1 ~]# oracleasm createdisk DATA /dev/sde1 Writing disk header: done Instantiating disk: done [root@node1 ~]# oracleasm createdisk FRA /dev/sdf1 Writing disk header: done Instantiating disk: done [root@node1 ~]# oracleasm scandisks Reloading disk partitions: done Cleaning any stale ASM disks... Scanning system for ASM disks... [root@node1 ~]# oracleasm listdisks CRS1 CRS2 CRS3 DATA FRA
VM에 마운트된 디스크를 각각 ASM Disk로 할당해줍니다.
순서대로 마운트가 되었다면, 디바이스 명의 알파벳 순으로 ASM 디스크를 생성하면 됩니다.
{}
9. 2번 노드 구성
A) 2번 노드 가상 머신 만들기
.
가상 머신 2번 노드를 만들기 위해 VirtualBox에서 ‘새로 만들기’를 클릭합니다.
가상 머신의 이름을 "rac2"로 정하고, 1번 노드와 동일한 경로를 머신 폴더로 지정합니다.
해당 디렉토리 아래에 rac2라는 디렉토리가 생성되고, 디렉토리 안에 가상 머신 관련 파일들이 저장됩니다.
OS의 종류는 'Linux'로 하고 설치될 버전은 'Oracle (64-bit)'를 선택한 후 <다음>을 클릭합니다.
메모리 크기는 1번 노드와 동일하게 10240MB로 선택한 후 <다음>을 클릭합니다.
B) 1번 노드 VM 복제
vboxmanage clonemedium disk .\rac1.vdi ..\rac2\rac2.vdi
PS D:\VM\rac1> vboxmanage clonemedium disk .\rac1.vdi ..\rac2\rac2.vdi 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'VDI'. UUID: 28c8742c-e783-4dca-b95c-5919bfd1257e
1번 노드가 정지된 상태에서 1번 노드의 복제본을 rac2 디렉토리에 저장합니다.
1번 노드의 UUID값과 다른 이미지가 생성되도록 반드시 VirtualBox에서 제공하는 방식으로 복제합니다.
하드 디스크는 '기존의 가상 하드 디스크 파일 사용'을 선택합니다.
그리고 방금 복제한 가상 하드 디스크 파일을 선택하기 위해 폴더 모양의 아이콘을 클릭합니다.
vboxmanage 명령으로 디스크를 복제했다면, Not Attatched 항목에 rac2.vdi 파일이 존재합니다.
만약 목록에 없다면 <추가> 버튼을 클릭하여 복제한 이미지를 찾아 불러오면 됩니다.
rac2.vdi 파일을 선택한 후 <선택> 버튼을 클릭합니다.
<만들기>를 클릭하면, 지금까지 선택한 환경에 맞게 가상 머신이 생성됩니다.
C) 2번 노드 VM 환경 설정
기본적으로 생성된 가상 머신을 RAC 환경에 맞게 변경해야 하므로, 2번 노드를 선택하고 <설정>을 클릭합니다.
부팅 순서에서 플로피 디스크를 해제합니다.
1번 노드와 동일한 순서로 공유 디스크를 추가시켜 줍니다.
반드시 같은 순서대로 SATA 컨트롤러에 연결시켜야 합니다.
오디오는 사용하지 않을 것이므로 '오디오 사용하기'를 해제합니다.
어댑터 1의 네트워크 설정을 1번 노드와 동일하게 구성합니다.
본인이 사용할 네트워크 환경에 맞게 설정하면 됩니다.
RAC 노드간의 통신을 위해 어댑터 2를 활성화시킵니다.
어댑터 2번 항목에 가서 '네트워크 어댑터 사용하기'를 체크하고, 1번 노드와 동일하게 '호스트 전용 어댑터'로 구성합니다.
네트워크 구성까지 완료되었으면 <확인>을 클릭해서 변경한 설정 값을 저장하고, 가상머신을 기동합니다.
1번 노드와 동일하게 공유 폴더 기능을 설정합니다.
공유 폴더를 설정할 경우, 호스트 서버에 저장된 설치 파일을 업로드 없이 바로 사용할 수 있습니다.
D) 네트워크 설정 변경
네트워크 설정을 변경하기 위해 root 계정으로 접속한 후에 '프로그램' > '시스템 도구' > '설정'을 클릭합니다.
네트워크 항목으로 이동한 후에 각 이더넷 항목에 톱니바퀴 모양의 아이콘을 클릭하여 설정을 변경합니다.
참고로 VirtualBox를 기준으로 했을 떄, 이더넷 enp0s3은 Public 네트워크이고 enp0s8은 Private 네트워크의 인터페이스입니다.
이더넷 enp0s3의 IPv4 항목에서 주소를 "10.0.1.102"(2번 노드의 Public 네트워크 IP)로 변경한 후 <적용>을 클릭합니다.
리눅스 버전에 따라 네트워크 정보가 초기화되어 있을 수 있습니다.
그럴 때는 아래의 정보와 같이 입력합니다.
항목 | 입력값 | 비고 |
---|---|---|
주소 | 10.0.1.102 | 1번 노드 Public IP 주소 |
네트마스크 | 24 | 서브넷 마스크 값으로 255.255.255.0 사용 가능 |
게이트웨이 | 10.0.1.1 | Public 망의 게이트웨이 |
네임서버(DNS) | 127.0.0.1 | dnsmasq를 사용할 경우 loopback IP 사용 |
검색 도메인 | localdomain | 로컬 도메인 정보 입력 |
이더넷 enp0s8의 IPv4 항목에서 주소를 "10.0.5.102"(2번 노드의 Private 네트워크 IP)로 변경한 후 <적용>을 클릭합니다.
마찬가지로 네트워크 정보가 초기화 되었을 경우, 아래와 같이 입력합니다.
항목 | 입력값 | 비고 |
---|---|---|
주소 | 10.0.5.101 | 1번 노드 Private IP 주소 |
네트마스크 | 24 | 서브넷 마스크 값으로 255.255.255.0 사용 가능 |
각 이더넷 인터페이스를 껏다가 키면 변경된 설정이 적용됩니다.
또는 명령 프롬프트에서 아래 명령을 수행합니다.
systemctl restart network
ip addr show vi /etc/sysconfig/network-scripts/ifcfg-<public 인터페이스명> # IPADDR=XXX.XXX.XXX.XXX 부분 변경 vi /etc/sysconfig/network-scripts/ifcfg-<private 인터페이스명> # IPADDR=XXX.XXX.XXX.XXX 부분 변경 systemctl restart network ip addr show
[root@rac1 ~]# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:72:b8:d8 brd ff:ff:ff:ff:ff:ff inet 10.0.1.101/24 brd 10.0.1.255 scope global noprefixroute enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe72:b8d8/64 scope link valid_lft forever preferred_lft forever 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:fd:6d:a9 brd ff:ff:ff:ff:ff:ff inet 10.0.5.101/24 brd 10.0.5.255 scope global noprefixroute enp0s8 valid_lft forever preferred_lft forever inet6 fe80::cd39:da9a:86ab:40a8/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@rac1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 ... << 생략 >> ... IPADDR=10.0.1.102 ... << 생략 >> ... [root@rac1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8 ... << 생략 >> ... IPADDR=10.0.5.102 ... << 생략 >> ... [root@rac1 ~]# systemctl restart network [root@rac1 ~]# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:72:b8:d8 brd ff:ff:ff:ff:ff:ff inet 10.0.1.102/24 brd 10.0.1.255 scope global noprefixroute enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe72:b8d8/64 scope link valid_lft forever preferred_lft forever 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:fd:6d:a9 brd ff:ff:ff:ff:ff:ff inet 10.0.5.102/24 brd 10.0.5.255 scope global noprefixroute enp0s8 valid_lft forever preferred_lft forever inet6 fe80::cd39:da9a:86ab:40a8/64 scope link noprefixroute valid_lft forever preferred_lft forever
위의 GUI 방식보다 간단하게 CLI 모드에서 vi 편집기를 사용하여 IP를 수정할 수도 있습니다.
다만 Public과 Private 이더넷을 혼동하여 잘못 설정할 수 있으므로 주의가 필요합니다.
E) 호스트명 변경
hostnamectl status hostnamectl set-hostname node2 hostnamectl status
[root@node1 ~]# hostnamectl status Static hostname: node1 Icon name: computer-vm Chassis: vm Machine ID: 173acec393894224b4fb48c8781eab8a Boot ID: 14c258e655c845a2880fb1e88fa7b014 Virtualization: oracle Operating System: Oracle Linux Server 8.2 CPE OS Name: cpe:/o:oracle:linux:8:2:server Kernel: Linux 5.4.17-2011.1.2.el8uek.x86_64 Architecture: x86-64 [root@node1 ~]# hostnamectl set-hostname node2 [root@node1 ~]# hostnamectl status Static hostname: node2 Icon name: computer-vm Chassis: vm Machine ID: 173acec393894224b4fb48c8781eab8a Boot ID: 14c258e655c845a2880fb1e88fa7b014 Virtualization: oracle Operating System: Oracle Linux Server 8.2 CPE OS Name: cpe:/o:oracle:linux:8:2:server Kernel: Linux 5.4.17-2011.1.2.el8uek.x86_64 Architecture: x86-64
2번 노드의 호스트 명은 CLI 모드에서 간단한 명령어로 변경할 수 있습니다.
systemctl set-default multi-user.target
[root@node2 ~]# systemctl set-default multi-user.target Removed /etc/systemd/system/default.target. Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.
설치 과정 중에 리소스를 절약하기 위해 2번 노드는 텍스트 모드로 실행되도록 수정합니다.
{}
F) 사용자 환경 변수 변경
export ORACLE_HOSTNAME=rac2 export ORACLE_SID=racdb2
[root@node2 ~]# cat ~oracle/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs export TMP=/tmp export TMPDIR=$TMP export EDITOR=vi export ORACLE_HOSTNAME=node2 # 호스트명에 맞게 변경 export ORACLE_UNQNAME=racdb export ORACLE_BASE=/u01/app/oracle export GRID_HOME=/u01/app/19c/grid export DB_HOME=$ORACLE_BASE/product/19c/db_1 export ORACLE_HOME=$DB_HOME export ORACLE_SID=racdb2 # 2번 노드 racdb2 export ORACLE_TERM=xterm export BASE_PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_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 export NLS_LANG=AMERICAN_KOREA.AL32UTF8 export CV_ASSUME_DISTID=OEL7 PS1='[$ORACLE_SID:$PWD]> '
oracle 유저의 환경 설정을 2번 노드에 맞게 수정합니다.
alias grid_env='export ORACLE_HOME=$GRID_HOME;export ORACLE_SID=+ASM2;export PATH=$ORACLE_HOME/bin:$BASE_PATH' alias db_env='export ORACLE_HOME=$DB_HOME;export ORACLE_SID=racdb2;export PATH=$ORACLE_HOME/bin:$BASE_PATH'
[root@node2 ~]# cat ~oracle/.bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific environment PATH="$HOME/.local/bin:$HOME/bin:$PATH" export PATH # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and functions alias grid_env='export ORACLE_HOME=$GRID_HOME;export ORACLE_SID=+ASM2;export PATH=$ORACLE_HOME/bin:$BASE_PATH' alias db_env='export ORACLE_HOME=$DB_HOME;export ORACLE_SID=racdb2;export PATH=$ORACLE_HOME/bin:$BASE_PATH'
aslias 설정의 ORACLE_SID 정보도 2번 노드에 맞게 수정합니다.
{}
{}
10. 전체 노드 Grid Infrastructure 설치
A) 준비 작업
mkdir -p $GRID_HOME unzip <zip 파일이 있는 경로>/LINUX.X64_193000_grid_home.zip -d $GRID_HOME
$GRID_HOME/OPatch/opatch version mv $GRID_HOME/OPatch $GRID_HOME/OPatch.old unzip <zip 파일이 있는 경로>/p6880880_190000_Linux-x86-64.zip -d $GRID_HOME chown -R oracle:oinstall $GRID_HOME/OPatch $GRID_HOME/OPatch/opatch version
B) 설치 스크립트 실행
grid_env cd $GRID_HOME export CV_ASSUME_DISTID=OEL7 ./gridSetup.sh -applyRU <RU 압축 해제 경로>
{}
grid_env export CV_ASSUME_DISTID=OEL7 asmca
{}
11. 1번 노드 소프트웨어 설치
A) 준비 작업
mkdir -p $DB_HOME unzip <zip 파일이 있는 경로>/LINUX.X64_193000_db_home.zip -d $DB_HOME
$DB_HOME/OPatch/opatch version mv $DB_HOME/OPatch $DB_HOME/OPatch.old unzip <패치 파일 다운로드 경로>/p6880880_190000_Linux-x86-64.zip -d $DB_HOME chown -R oracle:oinstall $DB_HOME/OPatch $DB_HOME/OPatch/opatch version
B) 설치 스크립트 실행
cd $DB_HOME export CV_ASSUME_DISTID=OEL7 ./runInstaller -applyRU <RU 압축 해제 경로>
{}
12. 다른 노드로 Database 소프트웨어 복사
$ORACLE_HOME/bin/roohctl -enable
[sehadb:/home/oracle]> $ORACLE_HOME/bin/roohctl -enable 읽기 전용 Oracle 홈을 사용으로 설정하는 중입니다. 읽기 전용 Oracle 홈을 사용으로 설정하려면 orabasetab 파일을 업데이트하십시오. orabasetab 파일을 성공적으로 업데이트했습니다. 읽기 전용 Oracle 홈에 대한 부트스트랩 디렉토리를 생성하십시오. 부트스트랩 디렉토리를 성공적으로 생성했습니다. 부트스트랩 파일이 성공적으로 처리되었습니다. 읽기 전용 Oracle 홈을 성공적으로 사용으로 설정했습니다. 자세한 내용은 로그 파일 /u01/app/oracle/cfgtoollogs/roohctl/roohctl-200916오후040013.log을(를) 확인하십시오.
chown oracle:oinstall /u01/app/oracle
[root@node2 ~]# chown oracle:oinstall /u01/app/oracle
$DB_HOME/addnode/addnode.sh -silent CLUSTER_NEW_NODES=<추가할 노드명>
[sehadb:/home/oracle]> $DB_HOME/addnode/addnode.sh -silent CLUSTER_NEW_NODES=node2 구성 준비이(가) 진행 중입니다. 구성 준비을(를) 성공했습니다. .................................................. 7% 완료되었습니다. 원격 노드에 파일 복사이(가) 진행 중입니다. .................................................. 12% 완료되었습니다. .................................................. 17% 완료되었습니다. .............................. 원격 노드에 파일 복사을(를) 성공했습니다. 다음 위치에서 이 설치 세션의 로그를 찾을 수 있습니다. /u01/app/oraInventory/logs/addNodeActions2020-09-16_04-01-42PM.log 파일 인스턴스화이(가) 진행 중입니다. 파일 인스턴스화을(를) 성공했습니다. .................................................. 49% 완료되었습니다. 클러스터 인벤토리 저장 중이(가) 진행 중입니다. .................................................. 83% 완료되었습니다. 클러스터 인벤토리 저장 중을(를) 성공했습니다. /u01/app/oracle/product/19c/db_1의 클러스터 노드 추가을(를) 성공했습니다. 자세한 내용은 '/u01/app/oraInventory/logs/silentInstall2020-09-16_04-01-42PM.log'을(를) 확인하십시오. Oracle 기본 위치 설정이(가) 진행 중입니다. Oracle 기본 위치 설정을(를) 성공했습니다. .................................................. 90% 완료되었습니다. 읽기 전용 Oracle 홈 설정이(가) 진행 중입니다. 읽기 전용 Oracle 홈 설정을(를) 성공했습니다. .................................................. 97% 완료되었습니다. 루트 사용자로 다음 스크립트를 실행합니다. 1. /u01/app/oracle/product/19c/db_1/root.sh 다음 노드에서 /u01/app/oracle/product/19c/db_1/root.sh을(를) 실행하십시오. [node2] Successfully Setup Software. .................................................. 100% 완료되었습니다.
/u01/app/oracle/product/19c/db_1/root.sh
[root@node2 ~]# /u01/app/oracle/product/19c/db_1/root.sh Performing root user operation. The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/app/oracle/product/19c/db_1 Copying dbhome to /usr/local/bin ... Copying oraenv to /usr/local/bin ... Copying coraenv to /usr/local/bin ... 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.
{}
13. HA 설정
A) 초기 설정값 확인
srvctl config database -db <DB명>
[sehadb:/home/oracle]> srvctl config database -db sehadb 데이터베이스 고유 이름: sehadb 데이터베이스 이름: sehadb Oracle 홈: /u01/app/oracle/product/19c/db_1 Oracle 사용자: oracle Spfile: +DATA/SEHADB/PARAMETERFILE/spfile.265.1051451337 비밀번호 파일: 도메인: 시작 옵션: open 정지 옵션: immediate 데이터베이스 롤: PRIMARY 관리 정책: AUTOMATIC 서버 풀: 디스크 그룹: FRA,DATA 마운트 위치 경로: 서비스: 유형: SINGLE OSDBA 그룹: dba OSOPER 그룹: oper 데이터베이스 인스턴스: sehadb 구성된 노드: node1 CSS 중요: no CPU 개수: 0 메모리 대상: 0 최대 메모리: 0 데이터베이스 서비스에 대한 기본 네트워크 번호: 관리자 관리 데이터베이스입니다.
B) 패스워드 파일 ASM 영역으로 이동
asmcmd pwcopy <기존 패스워드 파일 경로> +DATA/<DB명>/<패스워드 파일명> srvctl modify database -db <DB명> -pwfile +DATA/<DB명>/<패스워드 파일명>
[sehadb:/home/oracle]> asmcmd pwcopy /u01/app/oracle/dbs/orapwsehadb +DATA/SEHADB/orapwsehadb copying /u01/app/oracle/dbs/orapwsehadb -> +DATA/SEHADB/orapwsehadb [sehadb:/home/oracle]> srvctl modify database -db sehadb -pwfile +DATA/SEHADB/orapwsehadb
C) 노드 간의 HA 설정 및 결과 확인
srvctl modify database -db <DB명> -node <노드1>,<노드2>,...<노드n> srvctl config database -db <DB명>
[sehadb:/home/oracle]> srvctl modify database -db sehadb -node node1,node2 [sehadb:/home/oracle]> srvctl config database -db sehadb 데이터베이스 고유 이름: sehadb 데이터베이스 이름: sehadb Oracle 홈: /u01/app/oracle/product/19c/db_1 Oracle 사용자: oracle Spfile: +DATA/SEHADB/PARAMETERFILE/spfile.265.1051451337 비밀번호 파일: +DATA/SEHADB/orapwsehadb 도메인: 시작 옵션: open 정지 옵션: immediate 데이터베이스 롤: PRIMARY 관리 정책: AUTOMATIC 서버 풀: 디스크 그룹: FRA,DATA 마운트 위치 경로: 서비스: 유형: SINGLE OSDBA 그룹: dba OSOPER 그룹: oper 데이터베이스 인스턴스: sehadb 구성된 노드: node1,node2 CSS 중요: no CPU 개수: 0 메모리 대상: 0 최대 메모리: 0 데이터베이스 서비스에 대한 기본 네트워크 번호: 관리자 관리 데이터베이스입니다.
{}
14. HA Relocate 테스트
A) 작업 전 확인
srvctl status database -db <DB명> crsctl stat res -t
[sehadb:/home/oracle]> srvctl status database -db sehadb sehadb 인스턴스가 node1 노드에서 실행 중임 [sehadb:/home/oracle]> crsctl stat res -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.LISTENER.lsnr ONLINE ONLINE node1 STABLE ONLINE ONLINE node2 STABLE ora.chad ONLINE ONLINE node1 STABLE ONLINE ONLINE node2 STABLE ora.net1.network ONLINE ONLINE node1 STABLE ONLINE ONLINE node2 STABLE ora.ons ONLINE ONLINE node1 STABLE ONLINE ONLINE node2 STABLE -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup) 1 ONLINE ONLINE node1 STABLE 2 ONLINE ONLINE node2 STABLE ora.CRS.dg(ora.asmgroup) 1 ONLINE ONLINE node1 STABLE 2 ONLINE ONLINE node2 STABLE ora.DATA.dg(ora.asmgroup) 1 ONLINE ONLINE node1 STABLE 2 ONLINE ONLINE node2 STABLE ora.FRA.dg(ora.asmgroup) 1 ONLINE ONLINE node1 STABLE 2 ONLINE ONLINE node2 STABLE ora.LISTENER_SCAN1.lsnr 1 ONLINE ONLINE node2 STABLE ora.LISTENER_SCAN2.lsnr 1 ONLINE ONLINE node1 STABLE ora.LISTENER_SCAN3.lsnr 1 ONLINE ONLINE node1 STABLE ora.asm(ora.asmgroup) 1 ONLINE ONLINE node1 Started,STABLE 2 ONLINE ONLINE node2 Started,STABLE ora.asmnet1.asmnetwork(ora.asmgroup) 1 ONLINE ONLINE node1 STABLE 2 ONLINE ONLINE node2 STABLE ora.cvu 1 ONLINE ONLINE node1 STABLE ora.node1.vip 1 ONLINE ONLINE node1 STABLE ora.node2.vip 1 ONLINE ONLINE node2 STABLE ora.qosmserver 1 ONLINE ONLINE node1 STABLE ora.scan1.vip 1 ONLINE ONLINE node2 STABLE ora.scan2.vip 1 ONLINE ONLINE node1 STABLE ora.scan3.vip 1 ONLINE ONLINE node1 STABLE ora.sehadb.db 1 ONLINE ONLINE node1 Open,HOME=/u01/app/o racle/product/19c/db _1,STABLE --------------------------------------------------------------------------------
B) 서비스 노드 전환 후 결과 확인
srvctl relocate database -db <DB명> -node <재배치할 노드> crsctl stat res -t
[sehadb:/home/oracle]> srvctl relocate database -db sehadb -node node2 [sehadb:/home/oracle]> crsctl stat res -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.LISTENER.lsnr ONLINE ONLINE node1 STABLE ONLINE ONLINE node2 STABLE ora.chad ONLINE ONLINE node1 STABLE ONLINE ONLINE node2 STABLE ora.net1.network ONLINE ONLINE node1 STABLE ONLINE ONLINE node2 STABLE ora.ons ONLINE ONLINE node1 STABLE ONLINE ONLINE node2 STABLE -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup) 1 ONLINE ONLINE node1 STABLE 2 ONLINE ONLINE node2 STABLE ora.CRS.dg(ora.asmgroup) 1 ONLINE ONLINE node1 STABLE 2 ONLINE ONLINE node2 STABLE ora.DATA.dg(ora.asmgroup) 1 ONLINE ONLINE node1 STABLE 2 ONLINE ONLINE node2 STABLE ora.FRA.dg(ora.asmgroup) 1 ONLINE ONLINE node1 STABLE 2 ONLINE ONLINE node2 STABLE ora.LISTENER_SCAN1.lsnr 1 ONLINE ONLINE node2 STABLE ora.LISTENER_SCAN2.lsnr 1 ONLINE ONLINE node1 STABLE ora.LISTENER_SCAN3.lsnr 1 ONLINE ONLINE node1 STABLE ora.asm(ora.asmgroup) 1 ONLINE ONLINE node1 Started,STABLE 2 ONLINE ONLINE node2 Started,STABLE ora.asmnet1.asmnetwork(ora.asmgroup) 1 ONLINE ONLINE node1 STABLE 2 ONLINE ONLINE node2 STABLE ora.cvu 1 ONLINE ONLINE node1 STABLE ora.node1.vip 1 ONLINE ONLINE node1 STABLE ora.node2.vip 1 ONLINE ONLINE node2 STABLE ora.qosmserver 1 ONLINE ONLINE node1 STABLE ora.scan1.vip 1 ONLINE ONLINE node2 STABLE ora.scan2.vip 1 ONLINE ONLINE node1 STABLE ora.scan3.vip 1 ONLINE ONLINE node1 STABLE ora.sehadb.db 1 ONLINE ONLINE node2 Open,HOME=/u01/app/o racle/product/19c/db _1,STABLE --------------------------------------------------------------------------------
{}