목차
사전 준비(오프라인)
RHEL 8.6 ISO로 로컬 DNF 저장소 만들기
필수 OS 패키지(오프라인 설치)
OS 계정/디렉터리/커널 파라미터/리밋 설정
Oracle Home 압축 해제 및 환경 변수
응답 파일(db_install.rsp) 작성
Silent 설치 실행(runInstaller)
리스너(netca) & 데이터베이스 생성(dbca)
오프라인 RU 패치(선택)
사후 점검 & 서비스/방화벽
자주 발생하는 문제 해결
참고 문서
1) 사전 준비(오프라인)
설치 파일을 미리 다운로드(온라인 PC) 후, USB/내부망으로 옮깁니다.
LINUX.X64_193000_db_home.zip (Oracle Database 19c 소프트웨어)
(선택) 19c RU 패치(zip) – RHEL8에서는 최소 19.7 이상 적용 권장
(선택) OPatch 최신 버전(zip)
RHEL 8.6 DVD ISO 파일 준비 (예: rhel-8.6-x86_64-dvd.iso).
서버 최소 사양 권장
RAM 8GB 이상, SWAP은 RAM과 동일(16GB 이상 RAM이면 16GB 권장)
디스크: /u01(Oracle 바이너리) 30GB+, /u02(데이터) 50GB+, /u03(FRA) 50GB+ (환경에 맞게 조정)
루트 권한 확보 및 unzip 유틸리티 준비.
RU(Release Update) 권장
RHEL8 환경에선 19.7 이상의 RU를 적용한 19c를 권장합니다. 기본 19.3만 설치해도 동작할 수 있으나, 최신 RU가 안정성과 호환성 면에서 유리합니다.
2) RHEL 8.6 ISO로 로컬 DNF 저장소 만들기
오프라인 서버에서 RHEL ISO를 마운트하여 BaseOS/AppStream 로컬 저장소를 구성합니다.
mkdir -p /mnt/disc
mount -o loop /path/to/rhel-8.6-x86_64-dvd.iso /mnt/disc
cp -v /mnt/disc/media.repo /etc/yum.repos.d/rhel8-offline.repo
chmod 644 /etc/yum.repos.d/rhel8-offline.repo
cat > /etc/yum.repos.d/rhel8-offline.repo <<'EOF'
[InstallMedia-BaseOS]
name=Red Hat Enterprise Linux 8 - BaseOS
metadata_expire=-1
gpgcheck=1
enabled=1
baseurl=file:///mnt/disc/BaseOS/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[InstallMedia-AppStream]
name=Red Hat Enterprise Linux 8 - AppStream
metadata_expire=-1
gpgcheck=1
enabled=1
baseurl=file:///mnt/disc/AppStream/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
EOF
dnf clean all
dnf repolist
로컬 디스크로 복사(선택)
ISO의 BaseOS/AppStream 디렉터리를 /opt/repo/로 복사 후 baseurl=file:///opt/repo/BaseOS/처럼 지정하면 ISO 마운트 없이도 설치할 수 있습니다.
3) 필수 OS 패키지 설치
Oracle 19c가 RHEL8에서 요구하는 패키지 목록은 다음과 같습니다(가능하면 최신 버전 설치).
필수 패키지
bc, binutils, elfutils-libelf, elfutils-libelf-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
오프라인 설치 예:
dnf install -y bc binutils elfutils-libelf elfutils-libelf-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 unzip
의존성 누락시
일부 패키지는 ISO에 없을 수 있습니다. 이런 경우 dnf download --resolve 또는 repotrack으로 온라인 PC에서 필요한 RPM을 모두 내려받아 USB 등으로 옮겨, dnf install /path/*.rpm으로 설치하세요.
4) OS 계정/디렉터리/커널 파라미터/리밋 설정
4.1 그룹/계정/디렉터리
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
useradd -u 54321 -g oinstall -G dba,oper oracle
passwd oracle
mkdir -p /u01/app/oracle/product/19c/dbhome_1
mkdir -p /u01/app/oraInventory
mkdir -p /u02/oradata
mkdir -p /u03/fra
chown -R oracle:oinstall /u01 /u02 /u03
chmod -R 775 /u01 /u02 /u03
4.2 커널 파라미터
다음은 19c에서 일반적으로 사용하는 값 예시입니다. 메모리 용량에 맞게 shmmax/shmall은 조정하세요.
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152 # 예: 8GB/4KB
kernel.shmmax = 8589934592 # 예: 8GB
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
sysctl --system
shm 계산 팁
shmmax는 단일 공유 메모리 세그먼트 최대값(바이트)이며, shmall은 시스템 전체 공유 메모리 페이지 수입니다(보통 4KB 페이지 기준 shmall = shmmax/4096).
4.3 리소스 리밋
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
4.4 SELinux/파이어월(선택)
setenforce 0
sed -ri 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
5) Oracle Home 압축 해제 & 환경 변수
su - oracle
cat >> ~/.bash_profile <<'EOF'
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export ORACLE_SID=orcl
export PATH=PATH
export LD_LIBRARY_PATH=LD_LIBRARY_PATH
EOF
source ~/.bash_profile
unzip /path/to/LINUX.X64_193000_db_home.zip -d ORACLE_HOME/install/response/db_install.rsp 템플릿을 복사·편집합니다.
cp $ORACLE_HOME/install/response/db_install.rsp ~/db_install.rsp
cat > ~/db_install.rsp <<'EOF'
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
DECLINE_SECURITY_UPDATES=true
EOF
7) Silent 설치 실행(runInstaller)
su - oracle
cd $ORACLE_HOME
./runInstaller -silent -responseFile /home/oracle/db_install.rsp -waitforcompletion
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19c/dbhome_1/root.sh
INS-08101 등 OS 지원 체크 오류
최신 RU 기반의 설치 이미지를 사용하면 해결되는 경우가 많습니다. 필요한 경우 export CV_ASSUME_DISTID=OL7을 일시 지정 후 설치를 재시도합니다.
8) 리스너 설정(netca) & DB 생성(dbca)
8.1 리스너(1521) 생성
su - oracle
$ORACLE_HOME/bin/netca -silent -responseFile $ORACLE_HOME/assistants/netca/netca.rsp
lsnrctl status
8.2 데이터베이스 생성(DBCA, CDB+PDB 예시)
su - oracle
dbca -silent -createDatabase \
-gdbName orcl \
-sid orcl \
-createAsContainerDatabase true \
-numberOfPDBs 1 \
-pdbName pdb1 \
-sysPassword "ChangeMe#1" \
-systemPassword "ChangeMe#1" \
-pdbAdminPassword "ChangeMe#1" \
-datafileDestination /u02/oradata \
-recoveryAreaDestination /u03/fra \
-storageType FS \
-characterSet AL32UTF8 \
-nationalCharacterSet AL16UTF16 \
-sampleSchema false \
-automaticMemoryManagement false \
-initParams processes=500
9) (선택) 오프라인 RU 패치 적용
OPatch 최신 버전 압축 해제
su - oracle
cd (date +%Y%m%d)
unzip /path/to/OPatch_latest.zip -d ORACLE_HOME RU 패치 zip을 /u01/patches로 복사 및 해제 mkdir -p /u01/patches && cd /u01/patches unzip /path/to/p########_190000_Linux-x86-64.zip 적용 export PATH=ORACLE_HOME/OPatch:$PATH
opatch version
opatch lsinventory
opatch apply
$ORACLE_HOME/OPatch/datapatch -verbose
10) 사후 점검 & 서비스/방화벽
echo $ORACLE_HOME
echo $ORACLE_SID
lsnrctl status
sqlplus / as sysdba <<SQL
select name, open_mode, cdb from v$database;
show pdbs;
exit
SQL
11) 트러블슈팅
INS-08101 (supportedOSCheck): 최신 RU 기반 설치 파일 사용. 필요 시 export CV_ASSUME_DISTID=OL7 후 재시도.
libnsl 등 누락: ISO에 없으면 온라인 PC에서 RPM을 의존성 포함 수집 후 옮겨 설치.
X 라이브러리 관련: libXrender, libXtst, libXi, libX11, libxcb, libXau 설치 여부 확인.
SELinux: 설치 시 문제 시 퍼미시브로 전환해 테스트.
12) 참고 문서(요약)
Oracle 19c Linux 설치 가이드, RHEL8 지원 패키지 목록
Response File(무인 설치) 작성/실행 방법
RHEL 8 ISO로 로컬 DNF 저장소 구성 방법
RHEL 8 커널 파라미터 설정 가이드
RHEL8에서 19c RU(19.7+) 권장 배경
중요 Oracle Database 소프트웨어 및 RU 패치는 Oracle 라이선스/계정이 필요한 경우가 있습니다. 사내 정책 및 라이선스 조건을 준수하세요.
[appuser@apppkg-server oracle-rpms]$ sudo dnf download --resolve --destdir=. bc binutils elfutils-libelf elfutils-libelf-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 unzip
Failed to set locale, defaulting to C.UTF-8
Updating Subscription Management repositories.
Last metadata expiration check: 0:20:38 ago on Sun Sep 14 03:17:09 2025.
(1/70): glibc-2.28-251.el8_10.25.i686.rpm 4.2 MB/s | 1.9 MB 00:00
(2/70): libxcb-1.13.1-1.el8.i686.rpm 535 kB/s | 248 kB 00:00
(3/70): glibc-2.28-251.el8_10.25.x86_64.rpm 4.3 MB/s | 2.2 MB 00:00
(4/70): sysstat-11.7.3-13.el8_10.x86_64.rpm 2.8 MB/s | 427 kB 00:00
(5/70): glibc-devel-2.28-251.el8_10.25.x86_64.rpm 495 kB/s | 89 kB 00:00
(6/70): librdmacm-48.0-1.el8.i686.rpm 612 kB/s | 84 kB 00:00
(7/70): glibc-devel-2.28-251.el8_10.25.i686.rpm 263 kB/s | 88 kB 00:00
(8/70): librdmacm-48.0-1.el8.x86_64.rpm 564 kB/s | 79 kB 00:00
(9/70): glibc-gconv-extra-2.28-251.el8_10.25.i686.rpm 8.7 MB/s | 1.6 MB 00:00
(10/70): glibc-gconv-extra-2.28-251.el8_10.25.x86_64.rpm 8.6 MB/s | 1.6 MB 00:00
(11/70): glibc-common-2.28-251.el8_10.25.x86_64.rpm 4.5 MB/s | 1.0 MB 00:00
(12/70): libxcrypt-4.1.1-6.el8.i686.rpm 489 kB/s | 74 kB 00:00
(13/70): libxcrypt-devel-4.1.1-6.el8.x86_64.rpm 176 kB/s | 25 kB 00:00
(14/70): libxcrypt-devel-4.1.1-6.el8.i686.rpm 184 kB/s | 25 kB 00:00
(15/70): glibc-headers-2.28-251.el8_10.25.i686.rpm 3.3 MB/s | 494 kB 00:00
(16/70): python3-policycoreutils-2.9-26.el8_10.noarch.rpm 9.8 MB/s | 2.3 MB 00:00
(17/70): glibc-headers-2.28-251.el8_10.25.x86_64.rpm 1.6 MB/s | 494 kB 00:00
(18/70): elfutils-libelf-0.190-2.el8.x86_64.rpm 1.5 MB/s | 233 kB 00:00
(19/70): kernel-headers-4.18.0-553.74.1.el8_10.x86_64.rpm 23 MB/s | 12 MB 00:00
(20/70): elfutils-libelf-0.190-2.el8.i686.rpm 1.0 MB/s | 240 kB 00:00
(21/70): elfutils-libelf-devel-0.190-2.el8.i686.rpm 458 kB/s | 62 kB 00:00
(22/70): elfutils-libelf-devel-0.190-2.el8.x86_64.rpm 460 kB/s | 62 kB 00:00
(23/70): lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64.rpm 431 kB/s | 59 kB 00:00
(24/70): elfutils-libs-0.190-2.el8.x86_64.rpm 2.1 MB/s | 305 kB 00:00
(25/70): xz-libs-5.2.4-3.el8.i686.rpm 723 kB/s | 102 kB 00:00
(26/70): libxcb-1.13.1-1.el8.x86_64.rpm 1.6 MB/s | 229 kB 00:00
(27/70): libgcc-8.5.0-10.el8.i686.rpm 579 kB/s | 88 kB 00:00
(28/70): binutils-2.30-125.el8_10.x86_64.rpm 19 MB/s | 5.8 MB 00:00
(29/70): make-4.2.1-11.el8.x86_64.rpm 2.1 MB/s | 498 kB 00:00
(30/70): libXau-1.0.9-3.el8.i686.rpm 272 kB/s | 38 kB 00:00
(31/70): libX11-1.6.8-9.el8_10.x86_64.rpm 4.0 MB/s | 612 kB 00:00
(32/70): libX11-1.6.8-9.el8_10.i686.rpm 4.1 MB/s | 640 kB 00:00
(33/70): libX11-1.6.8-5.el8.i686.rpm 3.6 MB/s | 639 kB 00:00
(34/70): libX11-common-1.6.8-9.el8_10.noarch.rpm 1.1 MB/s | 159 kB 00:00
(35/70): libXrender-0.9.10-7.el8.x86_64.rpm 214 kB/s | 33 kB 00:00
(36/70): libXext-1.3.4-1.el8.i686.rpm 343 kB/s | 48 kB 00:00
(37/70): libXi-1.7.10-1.el8.x86_64.rpm 358 kB/s | 49 kB 00:00
(38/70): glibc-langpack-en-2.28-251.el8_10.25.x86_64.rpm 5.3 MB/s | 833 kB 00:00
(39/70): libnl3-3.5.0-1.el8.i686.rpm 2.3 MB/s | 341 kB 00:00
(40/70): libXau-1.0.9-3.el8.x86_64.rpm 267 kB/s | 37 kB 00:00
(41/70): libXi-1.7.10-1.el8.i686.rpm 357 kB/s | 51 kB 00:00
(42/70): unzip-6.0-48.el8_10.x86_64.rpm 1.3 MB/s | 196 kB 00:00
(43/70): zlib-1.2.11-18.el8_5.i686.rpm 509 kB/s | 105 kB 00:00
(44/70): bzip2-libs-1.0.6-26.el8.i686.rpm 351 kB/s | 49 kB 00:00
(45/70): libnsl-2.28-251.el8_10.25.x86_64.rpm 790 kB/s | 111 kB 00:00
(46/70): libnsl-2.28-251.el8_10.25.i686.rpm 820 kB/s | 115 kB 00:00
(47/70): libstdc++-devel-8.5.0-28.el8_10.i686.rpm 11 MB/s | 2.1 MB 00:00
(48/70): libstdc++-devel-8.5.0-28.el8_10.x86_64.rpm 11 MB/s | 2.1 MB 00:00
(49/70): libXrender-0.9.10-7.el8.i686.rpm 240 kB/s | 34 kB 00:00
(50/70): glibc-2.28-189.1.el8.i686.rpm 11 MB/s | 2.0 MB 00:00
(51/70): bc-1.07.1-5.el8.x86_64.rpm 895 kB/s | 129 kB 00:00
(52/70): libgcc-8.5.0-28.el8_10.x86_64.rpm 593 kB/s | 82 kB 00:00
(53/70): libXtst-1.2.3-7.el8.x86_64.rpm 151 kB/s | 22 kB 00:00
(54/70): libXtst-1.2.3-7.el8.i686.rpm 147 kB/s | 22 kB 00:00
(55/70): libgcc-8.5.0-28.el8_10.i686.rpm 646 kB/s | 90 kB 00:00
(56/70): smartmontools-7.1-3.el8.x86_64.rpm 3.6 MB/s | 558 kB 00:00
(57/70): ksh-20120801-267.el8.x86_64.rpm 5.3 MB/s | 928 kB 00:00
(58/70): libstdc++-8.5.0-28.el8_10.x86_64.rpm 3.1 MB/s | 474 kB 00:00
(59/70): policycoreutils-2.9-26.el8_10.x86_64.rpm 1.3 MB/s | 377 kB 00:00
(60/70): libstdc++-8.5.0-28.el8_10.i686.rpm 3.4 MB/s | 510 kB 00:00
(61/70): libibverbs-48.0-1.el8.x86_64.rpm 2.7 MB/s | 404 kB 00:00
(62/70): libibverbs-48.0-1.el8.i686.rpm 2.8 MB/s | 446 kB 00:00
(63/70): policycoreutils-python-utils-2.9-26.el8_10.noarch.rpm 1.5 MB/s | 254 kB 00:00
(64/70): libzstd-1.4.4-1.el8.i686.rpm 1.8 MB/s | 270 kB 00:00
(65/70): libzstd-devel-1.4.4-1.el8.x86_64.rpm 319 kB/s | 44 kB 00:00
(66/70): libaio-0.3.112-1.el8.i686.rpm 239 kB/s | 33 kB 00:00
(67/70): libaio-0.3.112-1.el8.x86_64.rpm 228 kB/s | 33 kB 00:00
(68/70): libaio-devel-0.3.112-1.el8.x86_64.rpm 119 kB/s | 19 kB 00:00
(69/70): libaio-devel-0.3.112-1.el8.i686.rpm 138 kB/s | 19 kB 00:00
(70/70): zlib-devel-1.2.11-18.el8_5.x86_64.rpm 21 kB/s | 58 kB 00:02
[appuser@apppkg-server oracle-rpms]$