
Linux 서버에 Oracle Database 19c 설치하기
이번 글에서는 Linux 서버에 Oracle Database 19c를 설치하는 방법을 정리한다.
서버 환경에서는 GUI 화면을 사용할 수 없는 경우가 많으므로, Oracle 설치 프로그램인 runInstaller를 Silent 모드로 실행한다.
설치 과정은 다음 순서로 진행한다.
- 운영체제 및 서버 사양 확인
- Oracle 설치에 필요한 패키지 설치
- Oracle 그룹 및 사용자 생성
- Oracle 설치 디렉터리 생성
- 환경변수 설정
- Oracle Database 소프트웨어 설치
- Listener 생성
- 데이터베이스 생성
- 외부 접속 및 방화벽 설정
- 설치 상태 확인
1. 설치 환경
이번 글에서 사용하는 설치 환경은 다음과 같다.
| 항목 | 설정값 |
|---|---|
| Database | Oracle Database 19c |
| 운영체제 | Oracle Linux 8 또는 RHEL 계열 Linux |
| 설치 방식 | Silent Install |
| Oracle 사용자 | oracle |
| 기본 그룹 | oinstall |
| DBA 그룹 | dba |
| ORACLE_BASE | /u01/app/oracle |
| ORACLE_HOME | /u01/app/oracle/product/19.0.0/dbhome_1 |
| Oracle SID | ORCL |
| PDB 이름 | ORCLPDB |
| Listener Port | 1521 |
Oracle Database 19c 공식 지원 목록에는 Oracle Linux, Red Hat Enterprise Linux, SUSE Linux Enterprise Server 등이 포함되어 있다. Rocky Linux는 공식 지원 목록에 직접 명시되어 있지 않으므로 운영 환경에서는 Oracle Linux 또는 RHEL을 사용하는 것이 안전하다.
Rocky Linux에서도 설치를 시도할 수 있지만 운영체제 검사, 패키지 호환성,
libnsl.so.1등의 문제가 발생할 수 있다.
2. 서버 사양 확인
Oracle Database 19c는 최소 1GB 이상의 메모리가 필요하며 2GB 이상이 권장된다. 실습용 가상머신이라면 최소 4GB 정도를 할당하는 것이 좋다. /tmp에는 최소 1GB 이상의 여유 공간이 필요하다.
서버 사양을 확인한다.
free -h
df -h
df -h /tmp
df -h /dev/shm
uname -m
정상적인 64비트 x86 서버라면 다음과 같이 출력된다.
x86_64
메모리와 Swap 크기를 별도로 확인하려면 다음 명령어를 사용한다.
grep MemTotal /proc/meminfo
grep SwapTotal /proc/meminfo
운영체제 정보도 확인한다.
cat /etc/os-release
uname -r
3. 호스트 이름 설정
Oracle 설치 전에 서버의 호스트 이름과 /etc/hosts 설정을 확인한다.
hostnamectl
hostname
필요한 경우 호스트 이름을 설정한다.
hostnamectl set-hostname oracle19c.localdomain
서버 IP를 확인한다.
ip addr
/etc/hosts 파일을 수정한다.
vi /etc/hosts
다음과 같이 서버 IP와 호스트 이름을 등록한다.
127.0.0.1 localhost localhost.localdomain
192.168.0.100 oracle19c.localdomain oracle19c
192.168.0.100 부분은 실제 Oracle 서버 IP로 변경한다.
설정 결과를 확인한다.
ping -c 3 oracle19c
4. 필수 패키지 설치
Oracle Linux 8
Oracle Linux에서는 Oracle이 제공하는 사전 설치 패키지를 사용하는 것이 가장 간단하다.
dnf install -y oracle-database-preinstall-19c
dnf install -y unzip
oracle-database-preinstall-19c 패키지는 Oracle 설치에 필요한 패키지와 커널 파라미터, 사용자 제한 설정 등을 자동으로 구성한다.
설치 상태를 확인한다.
rpm -qa | grep oracle-database-preinstall
RHEL 또는 Rocky Linux 계열
Oracle Linux 사전 설치 패키지를 사용할 수 없다면 필요한 패키지를 직접 설치해야 한다.
dnf install -y \
bc \
binutils \
elfutils-libelf \
elfutils-libelf-devel \
fontconfig \
gcc \
gcc-c++ \
glibc \
glibc-devel \
ksh \
libaio \
libaio-devel \
libgcc \
libnsl \
libstdc++ \
libstdc++-devel \
libX11 \
libXau \
libXi \
libXrender \
libXtst \
libxcb \
make \
policycoreutils \
policycoreutils-python-utils \
smartmontools \
sysstat \
unzip
RHEL 9 계열에서는 다음 패키지가 추가로 필요할 수 있다.
dnf install -y \
compat-openssl11 \
libxcrypt-compat \
libasan \
liblsan \
libibverbs \
librdmacm \
libvirt-libs
RHEL 9에서 Oracle Database 19c를 설치할 경우 19.19 이상의 릴리스 업데이트가 필요하며, Oracle 공식 문서에 필요한 패키지 목록이 정리되어 있다.
libnsl.so.1 오류 확인
설치 중 다음 오류가 발생할 수 있다.
error while loading shared libraries: libnsl.so.1
이 경우 libnsl 패키지를 설치한다.
dnf install -y libnsl
라이브러리가 등록되었는지 확인한다.
ldconfig -p | grep libnsl
5. Oracle 그룹 생성
Oracle 설치를 위한 그룹을 생성한다.
groupadd oinstall
groupadd dba
각 그룹의 역할은 다음과 같다.
| 그룹 | 역할 |
|---|---|
oinstall |
Oracle 소프트웨어 및 Inventory 관리 |
dba |
Oracle 데이터베이스 관리자 권한 |
oper |
제한적인 데이터베이스 운영 권한 |
6. Oracle 사용자 생성
Oracle 설치 전용 사용자를 생성한다.
useradd -g oinstall -G dba oracle
Oracle 사용자 비밀번호를 설정한다.
passwd oracle
사용자 정보를 확인한다.
id oracle
정상적인 출력 예시는 다음과 같다.
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba)
기존 Oracle 사용자의 그룹 변경
oracle 사용자가 이미 존재한다면 다음 명령어를 사용한다.
usermod -g oinstall -aG dba oracle
옵션의 의미는 다음과 같다.
| 옵션 | 설명 |
|---|---|
-g oinstall |
기본 그룹을 oinstall로 설정 |
-aG dba |
기존 보조 그룹을 유지하면서 dba 그룹 추가 |
oracle |
설정 대상 사용자 |
다음 명령어도 사용할 수 있다.
usermod -g oinstall -G dba oracle
하지만 -G만 사용하면 기존에 등록되어 있던 다른 보조 그룹이 제거될 수 있다. 기존 그룹을 유지하려면 -aG를 사용하는 것이 안전하다.
그룹 설정 후에는 oracle 사용자가 다시 로그인해야 변경 내용이 적용된다.
su - oracle
id
7. Oracle 설치 디렉터리 생성
root 사용자로 Oracle 설치 디렉터리를 생성한다.
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/oracle/oradata
mkdir -p /u01/app/oracle/fast_recovery_area
각 디렉터리의 용도는 다음과 같다.
| 경로 | 용도 |
|---|---|
/u01/app/oracle |
Oracle 기본 위치인 ORACLE_BASE |
/u01/app/oracle/product/19.0.0/dbhome_1 |
Oracle 실행 파일이 설치되는 ORACLE_HOME |
/u01/app/oraInventory |
설치된 Oracle 제품 정보 관리 |
/u01/app/oracle/oradata |
데이터베이스 데이터 파일 저장 |
/u01/app/oracle/fast_recovery_area |
복구 관련 파일 저장 |
디렉터리 소유자를 변경한다.
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app
설정 결과를 확인한다.
ls -ld /u01/app
ls -ld /u01/app/oracle
ls -ld /u01/app/oraInventory
8. Oracle 설치 파일 압축 해제
Oracle 공식 사이트에서 다음 설치 파일을 내려받는다.
LINUX.X64_193000_db_home.zip
Oracle Database 19c는 설치 파일을 최종 ORACLE_HOME 디렉터리에 압축 해제한 후 해당 위치에서 runInstaller를 실행하는 이미지 기반 설치 방식이다.
설치 파일을 서버로 전송한 후 압축을 해제한다.
su - oracle
cd /u01/app/oracle/product/19.0.0/dbhome_1
unzip /home/oracle/LINUX.X64_193000_db_home.zip
설치 파일을 확인한다.
ls -l runInstaller
ls -l install/response/db_install.rsp
정상적으로 압축이 해제되었다면 다음 파일이 존재한다.
/u01/app/oracle/product/19.0.0/dbhome_1/runInstaller
/u01/app/oracle/product/19.0.0/dbhome_1/install/response/db_install.rsp
9. Oracle 환경변수 설정
oracle 사용자의 환경변수를 설정한다.
su - oracle
vi ~/.bash_profile
파일 마지막에 다음 내용을 추가한다.
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib64:/usr/lib64
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
환경변수를 적용한다.
source ~/.bash_profile
설정값을 확인한다.
echo $ORACLE_BASE
echo $ORACLE_HOME
echo $ORACLE_SID
echo $PATH
정상적인 결과는 다음과 같다.
/u01/app/oracle
/u01/app/oracle/product/19.0.0/dbhome_1
ORCL
10. Oracle Database 소프트웨어 설치
Oracle 사용자로 전환한다.
su - oracle
source ~/.bash_profile
Oracle Home으로 이동한다.
cd $ORACLE_HOME
다음 명령어를 실행해 Oracle Database 소프트웨어를 설치한다.
./runInstaller \
-silent \
-waitforcompletion \
-responseFile "$ORACLE_HOME/install/response/db_install.rsp" \
oracle.install.option=INSTALL_DB_SWONLY \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=/u01/app/oraInventory \
ORACLE_HOME="$ORACLE_HOME" \
ORACLE_BASE="$ORACLE_BASE" \
oracle.install.db.InstallEdition=EE \
oracle.install.db.OSDBA_GROUP=dba \
oracle.install.db.OSOPER_GROUP=dba \
oracle.install.db.OSBACKUPDBA_GROUP=dba \
oracle.install.db.OSDGDBA_GROUP=dba \
oracle.install.db.OSKMDBA_GROUP=dba \
oracle.install.db.OSRACDBA_GROUP=dba \
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \
DECLINE_SECURITY_UPDATES=true
-silent 옵션을 사용하면 DISPLAY 환경변수 없이도 설치할 수 있다. 응답 파일은 반드시 상대 경로가 아닌 절대 경로로 지정해야 한다.
설치 옵션 설명
| 옵션 | 설명 |
|---|---|
-silent |
설치 화면 없이 실행 |
-waitforcompletion |
설치가 끝날 때까지 명령어 대기 |
-responseFile |
설치 응답 파일 경로 |
INSTALL_DB_SWONLY |
데이터베이스를 생성하지 않고 소프트웨어만 설치 |
UNIX_GROUP_NAME |
Oracle Inventory 관리 그룹 |
INVENTORY_LOCATION |
Oracle Inventory 저장 위치 |
ORACLE_HOME |
Oracle 실행 파일 설치 위치 |
ORACLE_BASE |
Oracle 기본 디렉터리 |
InstallEdition=EE |
Enterprise Edition 설치 |
Standard Edition 2를 설치하려면 다음 값을 사용한다.
oracle.install.db.InstallEdition=SE2
11. INS-32013 오류 해결
다음과 같은 오류가 발생할 수 있다.
[FATAL] [INS-32013] Oracle 기본 위치가 비어 있습니다.
이 오류는 ORACLE_BASE가 설정되지 않았거나 runInstaller 실행 시 Oracle 기본 위치가 전달되지 않아 발생한다.
환경변수를 확인한다.
echo $ORACLE_BASE
echo $ORACLE_HOME
값이 비어 있다면 설정한다.
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
다음과 같이 설치 명령어에도 ORACLE_BASE와 ORACLE_HOME을 명시한다.
./runInstaller \
-silent \
-responseFile "$ORACLE_HOME/install/response/db_install.rsp" \
ORACLE_BASE="$ORACLE_BASE" \
ORACLE_HOME="$ORACLE_HOME"
단, 위 명령어에는 설치에 필요한 나머지 옵션도 함께 지정해야 하므로 실제 설치 시에는 앞에서 작성한 전체 명령어를 사용한다.
12. root 스크립트 실행
Oracle 소프트웨어 설치가 완료되면 다음과 같은 안내가 출력된다.
As a root user, execute the following script(s):
1. /u01/app/oraInventory/orainstRoot.sh
2. /u01/app/oracle/product/19.0.0/dbhome_1/root.sh
root 사용자로 전환한다.
su -
안내된 스크립트를 실행한다.
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
Oracle Universal Installer 설치 후에는 orainstRoot.sh와 root.sh를 실행해야 한다.
13. Oracle Listener 생성
Oracle 데이터베이스에 외부 프로그램이 접속하려면 Listener가 필요하다.
oracle 사용자로 전환한다.
su - oracle
source ~/.bash_profile
NETCA를 Silent 모드로 실행한다.
netca -silent \
-responseFile "$ORACLE_HOME/assistants/netca/netca.rsp"
Listener 상태를 확인한다.
lsnrctl status
Listener가 실행되지 않았다면 다음 명령어로 시작한다.
lsnrctl start
중지하려면 다음 명령어를 사용한다.
lsnrctl stop
기본 Listener 포트는 1521이다.
포트가 열려 있는지 확인한다.
ss -lntp | grep 1521
14. Oracle 데이터베이스 생성
Oracle 소프트웨어를 설치한 후 DBCA를 사용해 데이터베이스를 생성한다.
Oracle DBCA는 -silent -createDatabase 옵션을 사용해 화면 없이 데이터베이스를 생성할 수 있다.
다음 예제에서는 아래와 같이 데이터베이스를 생성한다.
| 항목 | 설정값 |
|---|---|
| 데이터베이스 이름 | ORCL |
| SID | ORCL |
| PDB | ORCLPDB |
| 문자셋 | AL32UTF8 |
| 메모리 | 2048MB |
| 데이터 저장 경로 | /u01/app/oracle/oradata |
다음 명령어를 실행한다.
dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname ORCL \
-sid ORCL \
-createAsContainerDatabase true \
-numberOfPDBs 1 \
-pdbName ORCLPDB \
-sysPassword 'Oracle비밀번호변경1!' \
-systemPassword 'Oracle비밀번호변경1!' \
-pdbAdminPassword 'Oracle비밀번호변경1!' \
-databaseType MULTIPURPOSE \
-memoryMgmtType auto_sga \
-totalMemory 2048 \
-storageType FS \
-datafileDestination /u01/app/oracle/oradata \
-recoveryAreaDestination /u01/app/oracle/fast_recovery_area \
-characterSet AL32UTF8 \
-nationalCharacterSet AL16UTF16 \
-emConfiguration NONE
예제에 작성된 비밀번호는 반드시 실제 운영 환경에 맞는 안전한 비밀번호로 변경해야 한다.
명령어에 비밀번호를 직접 작성하면 Shell History에 남을 수 있으므로 운영 환경에서는 응답 파일이나 별도의 보안 관리 방식을 사용하는 것이 좋다.
15. 데이터베이스 실행 상태 확인
Oracle 프로세스를 확인한다.
ps -ef | grep pmon | grep -v grep
정상적으로 데이터베이스가 실행되고 있다면 다음과 같이 출력된다.
oracle 12345 1 0 16:20 ? 00:00:00 ora_pmon_ORCL
sqlplus로 접속한다.
sqlplus / as sysdba
인스턴스 상태를 확인한다.
SELECT instance_name, status
FROM v$instance;
정상적인 결과는 다음과 같다.
INSTANCE_NAME STATUS
---------------- ------------
ORCL OPEN
데이터베이스 이름과 상태를 확인한다.
SELECT name, open_mode
FROM v$database;
16. PDB 상태 확인
Oracle 19c에서는 CDB와 PDB 구조를 사용한다.
PDB 목록을 확인한다.
SHOW PDBS;
다음과 같이 MOUNTED 상태로 표시될 수 있다.
CON_ID CON_NAME OPEN MODE
------ --------- ----------
2 PDB$SEED READ ONLY
3 ORCLPDB MOUNTED
PDB를 실행한다.
ALTER PLUGGABLE DATABASE ORCLPDB OPEN;
서버가 다시 시작된 후에도 자동으로 열리도록 상태를 저장한다.
ALTER PLUGGABLE DATABASE ORCLPDB SAVE STATE;
다시 확인한다.
SHOW PDBS;
정상 상태는 다음과 같다.
ORCLPDB READ WRITE
SQL*Plus를 종료한다.
EXIT;
17. Listener 서비스 등록 확인
Listener에 데이터베이스 서비스가 등록됐는지 확인한다.
lsnrctl status
정상이라면 다음과 같은 서비스가 표시된다.
Service "ORCL" has 1 instance(s).
Service "ORCLPDB" has 1 instance(s).
서비스가 표시되지 않는다면 SQL*Plus에 접속한다.
sqlplus / as sysdba
서비스를 Listener에 다시 등록한다.
ALTER SYSTEM REGISTER;
다시 확인한다.
lsnrctl status
18. 외부 접속을 위한 방화벽 설정
DBeaver, SQL Developer 등의 외부 프로그램에서 Oracle 서버에 접속하려면 TCP 1521 포트를 허용해야 한다.
root 사용자로 실행한다.
firewall-cmd --permanent --add-port=1521/tcp
firewall-cmd --reload
허용된 포트를 확인한다.
firewall-cmd --list-ports
다음과 같이 표시되면 정상이다.
1521/tcp
방화벽 서비스가 실행 중인지 확인한다.
systemctl status firewalld
.
20. 데이터베이스 시작 및 종료
데이터베이스 시작
sqlplus / as sysdba
STARTUP;
PDB도 실행한다.
ALTER PLUGGABLE DATABASE ALL OPEN;
데이터베이스 종료
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
Listener 시작
lsnrctl start
Listener 종료
lsnrctl stop
Listener 재시작
lsnrctl stop
lsnrctl start
21. 서버 시작 시 Oracle 자동 실행 설정
서버가 재부팅되었을 때 Oracle 데이터베이스가 자동으로 실행되도록 설정할 수 있다.
root 사용자로 /etc/oratab 파일을 수정한다.
vi /etc/oratab
다음 내용을 확인한다.
ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:N
마지막 값을 N에서 Y로 변경한다.
ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y
Systemd 서비스 파일을 생성한다.
vi /etc/systemd/system/oracle-db.service
다음 내용을 작성한다.
[Unit]
Description=Oracle Database 19c
After=network.target
[Service]
Type=forking
User=oracle
Group=oinstall
ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbstart /u01/app/oracle/product/19.0.0/dbhome_1
ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbshut /u01/app/oracle/product/19.0.0/dbhome_1
RemainAfterExit=yes
TimeoutStartSec=300
TimeoutStopSec=300
[Install]
WantedBy=multi-user.target
Systemd 설정을 다시 읽는다.
systemctl daemon-reload
Oracle 서비스를 활성화하고 실행한다.
systemctl enable oracle-db
systemctl start oracle-db
상태를 확인한다.
systemctl status oracle-db