ASM과 Oracle Restart 단일 인스턴스 구성
단일 서버에 Grid Infrastructure(Oracle Restart)와 ASM 디스크 그룹을 만들고 그 위에 CDB를 생성하는 구성의 개념과 핵심 명령
#핵심 요약
목표 구조: 단일 서버에 ASM 인스턴스 1개(+ASM), DB 인스턴스 1개, CDB 1개, PDB 1개 이상
파일시스템과 ASM 중 무엇을 고를지는 설치 사전 준비의 "저장 방식 선택"에 있음
순서: OS 환경 준비, ASM 라이브러리 구성, 디스크 파티션과 ASM 디스크 생성, Grid 설치, asmca로 디스크 그룹 생성, DB 소프트웨어 설치와 CDB 생성, 리스너와 접속 확인
설치가 꼬이면 OS를 다시 설치하지 않고 deconfig로 원복함
#개념과 동작 원리
Linux 서버
├─ Grid Infrastructure
│ ├─ Oracle Restart
│ └─ ASM 인스턴스 +ASM
│ ├─ +DATA
│ └─ +FRA (예시에서는 RECO 디스크로 생성)
└─ Oracle Database
└─ ORCL 인스턴스
└─ ORCL CDB
├─ CDB$ROOT
├─ PDB$SEED
└─ ORCLPDB실습의 디스크 구성: CRS용 3개(각 1GB), DATA용 20GB(최소 20GB), RECO용 20GB
#주요 용어와 구성 요소
| 용어 | 설명 |
|---|---|
| Grid Infrastructure, Oracle Restart | ASM과 리스너 등 리소스를 관리하는 소프트웨어 실습에서는 단일 서버에 구성 |
ASMLIB(oracleasm) |
ASM 디스크를 만들고 관리하는 도구 실습에서는 oracleasm configure -i로 소유자 oracle, 그룹 asmadmin을 지정 |
asmadmin, asmdba, asmoper |
ASM 관리용 OS 그룹 |
GRID_HOME |
실습에서는 /app/grid환경변수 grid_env와 db_env 별칭으로 전환 |
asmca |
ASM 디스크 그룹을 만드는 GUI 도구 |
gridSetup.sh |
Grid 설치 시작 스크립트(대문자 S) |
#필수 명령어 또는 SQL
#OS 환경 준비 (root)
# 이름 서버를 추가해야 하면 조직의 DNS 정책을 확인한다.
vi /etc/hosts
hostnamectl set-hostname <HOST>
yum -y install oracle-database-preinstall-19c결과 해석:
실습의 SELinux와 방화벽 비활성화 단계(/etc/selinux/config를 SELINUX=disabled로, systemctl stop firewalld, reboot)와 공개 DNS 추가는 설치 사전 준비에서 필수 절차가 아니라고 정리한 항목임
수업 자료에는 SELINUX=disable로 적힌 줄이 있고 설명에서는 disabled로 변경한다고 되어 있어 표기가 다름
Oracle Linux 문서에 기재된 비활성화 값은 disabled임
수업 자료의 disable과 다르므로 SELINUX=disable을 설정값으로 사용하지 않음
이 표기 확인은 ASM 설치에 SELinux 비활성화가 필수라는 뜻은 아님
Oracle Linux 7의 비활성화 예시는 재부팅을 포함함
Oracle Linux 8.9에서는 설정 파일의 SELINUX=disabled만으로 완전히 비활성화하는 방식이 deprecated이며 완전 비활성화는 커널의 selinux=0으로 구분함
다른 OS 버전에 이 실습의 설정 방식을 그대로 적용하지 않음
ASM 패키지 설치
yum install -y oraclelinux-release-el7
yum install -y oracleasm-support oracleasmlib oracleasm
# oracleasmlib가 없으면 ol7_addons 저장소를 활성화
yum-config-manager --enable ol7_addons
yum install -y oracleasm-support oracleasmlib
rpm -qa | grep -i asm결과 해석:
ASM용 그룹과 디렉터리
groupadd asmadmin
groupadd asmdba
groupadd asmoper
usermod -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba,asmdba,asmoper oracle
mkdir -p /app/grid
chown -R oracle:oinstall /app
chmod -R 775 /app결과 해석: 개별 실행 출력은 기재 없음
#ASM 라이브러리 구성 (root)
oracleasm configure -i
# 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]: y
oracleasm init
oracleasm status
oracleasm configure결과 해석: 개별 실행 출력은 기재 없음
#디스크 파티션과 ASM 디스크 (root)
가상 디스크를 추가한 뒤(실습은 sdb부터 sdf까지 5개, OS는 sda에 설치됨) 각각 파티션을 만듦
sda와 sda1, sda2는 OS 영역이므로 건드리지 않음
ls /dev/sd*
lsblkfdisk /dev/sdb
# n, p, 1, Enter, Enter, w (sdb부터 sdf까지 같은 방식으로 반복)결과 해석:
oracleasm createdisk crs1 /dev/sdb1
oracleasm createdisk crs2 /dev/sdc1
oracleasm createdisk crs3 /dev/sdd1
oracleasm createdisk data /dev/sde1
oracleasm createdisk reco /dev/sdf1
oracleasm scandisks
oracleasm listdisks
ls -l /dev/oracleasm/disks/결과 해석: 개별 실행 출력은 기재 없음
#압축 해제와 Grid 설치 (oracle)
cd /app/grid
unzip LINUX.X64_193000_grid_home.zip
echo $DISPLAY
./gridSetup.sh결과 해석:
실습의 .bash_profile에는 ORACLE_BASE, ORACLE_HOME, GRID_HOME, ORACLE_SID와 다음 별칭이 있음
alias grid_env='export ORACLE_HOME=$GRID_HOME; export ORACLE_SID=+ASM; export PATH=$GRID_HOME/bin:$PATH'
alias db_env='export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/db_1; export ORACLE_SID=orcl'결과 해석:
설치 중 CV_ASSUME_DISTID를 지정하고(RHEL7.6) 로캘을 영어로 맞추는 값이 수업 자료에 있음
#디스크 그룹 생성
grid_env
asmca
# 20G 디스크를 DATA, RECO 디스크 그룹으로 각각 생성결과 해석: 개별 실행 출력은 기재 없음
#설치 확인
crsctl stat res -t결과 해석:
실습의 정상 기준: ora.CRS.dg, ora.DATA.dg, ora.RECO.dg, ora.LISTENER.lsnr, ora.asm이 ONLINE이고 ora.cssd, ora.evmd가 ONLINEora.ons와 ora.diskmon은 OFFLINE이었음
#DB 소프트웨어 설치와 접속
db_env
mkdir -p $ORACLE_HOME
mv LINUX.X64_193000_db_home.zip $ORACLE_HOME
cd $ORACLE_HOME
unzip -q LINUX.X64_193000_db_home.zip
./runInstaller결과 해석:
설치 화면에서 컨테이너 데이터베이스를 선택하고 저장소는 ASM 디스크 그룹을 지정했음
ps -ef | grep pmon
. oraenv
# ORACLE_SID = [orcl] ? orcl
sqlplus <USERNAME>/<PASSWORD> as sysdba
lsnrctl statusselect instance_name, status from v$instance;
show con_name결과 해석:
리스너 HOST 수정과 방화벽 포트
cd /app/grid/network/admin/
vi listener.ora
# ADDRESS = (PROTOCOL = TCP)(HOST = <IP>)(PORT = 1521)
lsnrctl stop
lsnrctl start
lsnrctl status결과 해석:
실습에서는 이 listener.ora를 $ORACLE_HOME/network/admin/에 복사하지 말라고 표시했음
Grid 홈의 listener.ora를 쓰는 구성이기 때문으로 보이나 이유는 수업 자료에 설명이 없음
firewall-cmd --permanent --add-port=1521/tcp
firewall-cmd --reload결과 해석:
원격 접속 확인은 sqlplus <USERNAME>/<PASSWORD>@<IP>/orcl as sysdba 형식으로 했음
#재설치가 필요할 때 (deconfig)
<GRID_HOME>/crs/install/roothas.sh -deconfig -force
<GRID_HOME>/deinstall/deinstall
rm -rf <GRID_HOME>/*결과 해석:
ASM 디스크 헤더까지 지울 때
oracleasm deletedisk CRS1
dd if=/dev/zero of=/dev/sdb1 bs=1M count=100결과 해석:
#구문과 옵션 설명
| 구문 | 의미 | 바꿀 입력값 |
|---|---|---|
oracleasm configure -i |
ASM 라이브러리 소유자, 그룹, 부팅 시 구동과 스캔 설정 | 소유자, 그룹 |
oracleasm createdisk <이름> <장치> |
파티션을 ASM 디스크로 표시 | 이름, 파티션 |
oracleasm scandisks, listdisks |
ASM 디스크 스캔과 목록 | |
crsctl stat res -t |
리소스 상태 | |
roothas.sh -deconfig -force |
Oracle Restart 구성 해제 | 강제 해제(-force) |
#사용 조건과 주의사항
실습의 환경은 OL 7 계열(OracleLinux-R7-U9)과 Oracle 19c, 가상 디스크 구성이며 다른 OS에서는 oracleasm 패키지와 설치 방식이 다를 수 있음(확인 불가)
실습의 sqlplus sys/<PASSWORD>@<IP>/orcl 형태처럼 비밀번호를 명령행에 쓰면 셸 히스토리에 남음