0. 개요
테스트 환경을 구축하기 위해서 RHEL 8.8 을 구동하는 Linux 환경에 Oracle Database 19c 데이터베이스 환경을 구축해야 하는 상황이 발생했는데, 설치하면서 너무 삽질을 했었던 관계로 이를 정리하고자 포스트를 남긴다.
본 포스트에서는 필자가 수차례 실패하고 끝내 성공한 RHEL 8.8 환경에 Oracle Database 19c를 설치하기 위한 a부터 z까지의 모든 과정을 총정리할 필요가 있다고 사료되어, 초보자도 쉽게 따라할 수 있도록 상세히 작성하였으니 참고하면 좋을 것 같다.
1. 환경
본 포스트에서 진행한 환경은 아래와 동일한데, 대체적으로 Cent OS 7 버전 이상이나 RHEL 8 버전대 환경과 비슷한 환경을 사용하는 리눅스 사용자라면 모두 동일하게 적용될 내용으로 사료된다.
구분 | 버전 |
OS | RedHat Linux 8.8 64-bit |
DBMS | Oracle Database 19.3.0 (19c) |
원격접속 터미널 에뮬레이터 사용여부 | O |
원격접속 터미널 에뮬레이터 프로그램 | PuTTY |
실제 RHEL 서버에서 직접 터미널을 띄우고 작업하는 환경은 드물고, 원격으로 접속해 터미널 에뮬레이터를 통한 작업이 대다수이다.
따라서, 본 포스트에서도 PuTTY 터미널 에뮬레이터 프로그램을 이용해 서버에 원격접속 후 해당 절차를 진행하였으니 참고 바란다.
2. host 설정 변경
host
및 hostname
설정을 변경하지 않고 설치시, 설치 마지막 단계에서 INS-20802 오류가 발생한다. 해당 오류를 방지하기 위해 미리 사전 작업을 하도록 한다.
본 과정은 root 계정으로 진행한다.
2-1. hosts 추가
# vim /etc/hosts
vim
편집기를 이용하여 hosts
파일을 편집한다.
맨 아랫줄에 실제 서버 IP
와 hostname
을 추가한다. hostname
은 oracle
로 추가하자.
2-2. hostname 설정
# hostnamectl set-hostname oracle
hostname
을 oracle
로 설정한다.
# hostnamectl status
Static hostname
이 oracle
로 잘 출력되는지 여부를 확인한다.
3. THP 비활성화
Transparent Huge Page
는 RHEL에서 기본적으로 사용 설정이 되어있으나, Oracle에서 성능 이슈로 인해 비활성화를 권장하고 있는 기능이므로 사용을 비활성화하도록 하자.
본 과정은 root 계정으로 진행한다.
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
상기 명령어를 입력하여 THP
를 해제한다.
# cat /sys/kernel/mm/transparent_hugepage/enabled
never
가 []
대괄호로 감싸져 있는지 여부를 확인한다. 상기 사진처럼 되어 있으면 THP
가 정상적으로 비활성화 된 것이다.
# reboot
진행했었던 과정들이 반영될 수 있도록 RHEL을 재부팅 한다.
4. 필수 패키지 설치
Oracle Database를 설치하기 위한 필수 패키지들을 설치하는 과정이다.
본 과정은 root 계정으로 진행한다.
4-1. JAVA 설치
# yum install -y java-1.8.0-openjdk
설치 인스톨러가 JAVA로 구동되기 때문에, JDK 1.8 버전을 설치한다.
4-2. 그 외 필수 패키지 설치
# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libcap1-1.10-7.el7.x86_64.rpm
# yum -y localinstall compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
# yum -y localinstall compat-libcap1-1.10-7.el7.x86_64.rpm
compat-libstdc++
와 compat-libcap
을 wget
명령어를 통해 다운로드 받은 후, localinstall
명령어로 설치한다.
# yum install -y libnsl
# yum install -y libnsl.i686
# yum install -y libnsl2
# yum install -y libnsl2.i686
그 외 libnsl
, libnsl.i686
, libnsl2
, libnsl2.i686
패키지도 yum
명령어로 설치를 진행한다.
5. Oracle Database Preinstall 설치
Preinstall 패키지는, 복잡한 Oracle Database 설치 전 기본 세팅들을 자동 설정해 주는 RPM 패키지다. 해당 패키지를 설치하지 않고 직접 하나하나 설정해 줄 수도 있겠지만... 특별한 경우가 아니라면 비추한다. 웬만해서는 Preinstall 패키지를 통해 기본 세팅들을 자동 설정하는 것을 권장한다.
본 과정은 root 계정으로 진행한다.
# curl -o oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
curl
명령어를 통해 Preinstall 파일을 다운받는다.
# export CV_ASSUME_DISTID=RHEL7.6
RHEL 8 환경에서는 Oracle Database 설치 간 INS-08101 오류가 출력될 가능성이 있으므로, RHEL 버전을 7로 가정하는 충돌방지 커맨드를 실행하고 진행해야 한다. 해당 커맨드를 실행한다.
# yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
localinstall
명령어로 Preinstall 패키지를 설치한다.
6. oracle 사용자 및 그룹 생성 및 설정
Oracle Database 구동 및 설치에 필요한 oracle 사용자와 dba 그룹을 생성 및 설정하는 과정이다. 본 과정은 각 항목에 맞게 계정전환을 실시하면서 진행한다.
6-1. 사용자 및 그룹 생성
본 과정은 root 계정으로 진행한다.
# usermod -d dba -G dba oracle
# cat /etc/passwd | grep oracle
oracle:x:65535:65536::/home/oracle:/bin/bash
oracle 사용자와 dba 그룹을 생성하고, 홈 디렉토리를 확인한다. oracle 사용자의 홈 디렉토리는 /home/oracle
임을 알 수 있다.
# passwd oracle
oracle 사용자의 비밀 번호 변경 중
새 암호:
새 암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.
oracle 사용자의 비밀번호를 설정한다.
6-2. su 권한 부여
oracle 계정은 su
권한을 사용하여 root 계정에 접근할 수 있어야 한다. 그렇지 못할 경우, Oracle Database 설치 도중 INS-08101 오류가 발생하여 인스톨러가 종료되기 때문에 미리 사전에 조치하여 해당 오류를 방지하자.
본과정은 root 계정으로 진행한다.
# vim /etc/group
vim
편집기를 통해 group
파일을 편집한다.
wheel
그룹에 oracle
사용자를 추가하고, 저장한다.
# su oracle
$ su
암호 :
#
oracle 사용자로 계정 전환 후, 다시 su
명령어를 입력하여 oracle 계정 → root 계정으로 잘 전환되는지 확인한다.
6-3. .bash_profile 설정
Oracle Database 설치 및 구동에 관련된 환경 변수들을 사전에 설정해 두도록 한다.
본 과정은 oracle 계정으로 진행한다.
$ cd
$ vim .bash_profile
vim
편집기를 이용해 .bash_profile
파일을 수정한다.
# User specific environment and startup programs
주석 하단에 상기와 같이 환경변수 값을 추가한다.
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export LANG=C
export ORACLE_HOSTNAME=oracle
export ORACLE_UNQNAME=orcl
export ORACLE_BASE=/oracle_db/oracle
export ORACLE_HOME=$ORACLE_BASE/product/db_home
export ORA_INVENTORY=$ORACLE_BASE/oraInventory
export ORACLE_SID=orcl
export DATA_DIR=$ORACLE_BASE/app/oradata
export PATH=/usr/sbin:/usr/local/bin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
환경변수 명칭 | 설명 |
ORACLE_HOSTNAME | 호스트명 |
ORACLE_UNQNAME | 오라클DB 고유 이름값 |
ORACLE_BASE | 오라클DB 기본 경로 |
ORACLE_HOME | 오라클DB 설치 경로 |
ORA_INVENTORY | 오라클DB 인벤토리 저장 경로 |
ORACLE_SID | 오라클DB 접속을 위한 고유 식별자 |
DATA_DIR | 오라클DB DATA 저장 경로 |
PATH | 오라클DB bin 폴더 위치한 커맨드 파일 사용 위한 환경변수 |
LD_LIBRARY_PATH | 오라클 제품들이 사용할 참조 라이브러리 |
상기 .bash_profile
에서는 Oracle Database 설치 경로가 /oracle_db/oracle
이고, 설치 파일을 압축 해제 해 보관할 경로는 /oracle_db/oracle/product/db_home
으로 지정했다. 이는 사용자가 희망하는대로 변경이 가능하니, 본인의 조건에 맞게 변경하여 사용하여도 무관하다.
$ . .bash_profile
변경 내용을 즉시 적용한다.
7. Oracle Database 경로 생성 및 소유자 계정 설정
.bash_profile
에서 지정했었던 Oracle Database 설치 및 데이터 저장 경로를 생성하고, 소유자 계정을 변경하도록 한다.
본 과정은 root 계정으로 진행한다.
7-1. 경로 생성
# mkdir -p /oracle_db/oracle/product/db_home
$ORACLE_HOME
으로 설정했었던 경로를 생성한다.
7-2. 폴더 소유자 계정 설정
# chown -R oracle.dba /oracle_db
소유자 계정을 변경하지 않을 경우 INS-32012 오류가 발생하며 설치가 진행되지 않으므로, oracle_db 의 하위 모든 경로들의 소유자 계정을 dba 그룹의 oracle 계정으로 변경한다.
8. SELINUX 해제
SELINUX는 Linux의 보안을 보다 강화하고자 지정된 정책이 아니면 프로세스를 차단하거나 접근을 제한하는 Linux의 보안 강화 아키텍처인데, 이 때문에 프로세스가 비정상적으로 동작할 가능성이 있다. 따라서 Oracle 설치를 위해 SELINUX를 해제하도록 한다.
본 과정은 root 계정으로 진행한다.
# echo "SELINUX=disabled" > /etc/selinux/config
상기 명령어를 입력하여 SELINUX 설정을 disabled
로 변경하여, SELINUX를 해제한다.
# cat /etc/selinux/config | grep SELINUX
SELINUX=disabled
SELINUX 설정이 해제되었는지 확인한다.
# reboot
변경 내용이 저장될 수 있도록 시스템을 재부팅 한다.
9. PuTTY X11 Forwarding 설정
Oracle Database 설치 인스톨러는 X window 기반 GUI 설치 프로세스이므로, X11 Forwarding 설정을 해 주어야 GUI 설치 프로세스를 로컬 PC로 불러와 원격 설치가 가능하다.
상기 링크를 참고하여, Xming과 PuTTY를 이용하여 X11 Forwarding 설정을 진행하도록 하자.
본 과정은 root 계정으로 진행한다.
# firefox
설치가 완료되면 FireFox를 실행시켜, 로컬 PC에서 원격으로 GUI 화면을 제어할 수 있는지 여부를 확인한다.
10. Oracle Database 19c 설치
이제 Oracle Database를 설치하기 위한 기본적인 사전 작업은 모두 완료되었다. 이제 Oracle Database를 설치해보도록 하자. 본 과정은 각 항목에 맞게 계정 전환을 하며 진행한다.
10-1. 설치 파일 다운로드
▲ Oracle Database EE 19c 공식 다운로드 링크
설치파일을 다운로드 받기 위해 상기 주소로 접속한다.
스크롤을 조금 내리다 보면 Oracle Database 19c for Linux x86-64 항목을 발견할 수 있다. ZIP 버튼을 클릭해 다운받자. 파일명은 LINUX.X64_193000_db_home.zip
이다.
10-2. 설치 파일 서버로 복사
# ll /oracle_db/oracle/product/db_home/
합계 2987996
-rw-r--r-- 1 root root 3059705302 3월 29 23:08 LINUX.X64_193000_db_home.zip
SFTP 프로그램을 활용해서 서버로 복사한다. root 계정으로 SFTP 프로그램에 로그인 하여 진행한다.
다운받은 Oracle Database 19c 설치 압축 파일을 RHEL 서버의 $ORACLE_HOME
경로로 복사한다. 본 포스트에서는 $ORACLE_HOME
의 경로를 /oracle_db/oracle/product/db_home
으로 지정했기 때문에, 해당 경로로 복사했다.
10-3. 설치 파일 소유자 계정 설정
본 과정은 root 계정으로 진행한다.
# chown oracle.oinstall /oracle_db/oracle/product/db_home/LINUX.X64_193000_db_home.zip
Oracle Database 19c 설치 압축 파일의 소유자를 oinstall
그룹의 oracle
사용자로 변경한다.
10-4. 설치 파일 압축 해제
본 과정은 oracle 계정으로 진행한다.
# su oracle
$ unzip $ORACLE_HOME/LINUX.X64_193000_db_home.zip
$ORACLE_HOME
에 위치한 Oracle Database 19c 설치 파일을 압축 해제 한다.
10-5. 설치
본 과정은 oracle 계정으로 진행한다.
PuTTY 세션을 아예 종료 후, 새 세션을 실행시키고 oracle 계정으로 로그인 하자. 다른 계정에서 su
명령어를 통해 oracle 계정으로 전환하여 진행할 경우, Oracle Database 설치 간 오류가 발생할 수 있기 때문이다.
$ export CV_ASSUME_DISTID=RHEL7.6
RHEL 8 환경에서는 Oracle Database 설치 간 INS-08101 오류가 출력될 가능성이 있으므로, RHEL 버전을 7로 가정하는 충돌방지 커맨드를 실행하고 진행해야 한다. 해당 커맨드를 실행한다.
$ cd $ORACLE_HOME
$ORACLE_HOME
경로로 이동한다.
$ ./runInstaller
Launching Oracle Database Setup Wizard...
설치 스크립트를 실행한다.
Oracle Database 설치 스크립트가 정상적으로 실행 될 경우, Xming 을 통해 상기와 같이 GUI 환경이 출력된다.
데이터베이스를 생성하고 구성해야 하므로 Create and configure a single instance database
를 선택한다.
일반 테스트 환경에서 구성할 경우에는 Desktop class
를, 운용 데이터 센터 환경에서 다양한 고급 구성 옵션을 사용할 경우에는 Server class
를 선택한다.
필자의 경우 테스트 환경에서 진행할 것이므로 Desktop class
를 선택하여 진행했다.
설치 구성을 설정하는 화면이다. 아래의 도표를 참고하여 설정하자.
항목 | 설명 |
Oracle Base (자동 입력) | .bash_profile에서 설정했었던 ORACLE_BASE 환경변수 값 |
Software location (자동 입력) | .bash_profile에서 설정했었던 ORACLE_HOME 환경변수 값 |
Database file location (자동 입력) | .bash_profile에서 설정했었던 DATA_DIR 환경변수 값 |
Database edition | 오라클DB 버전 |
Character set | 데이터베이스 인코딩 (문자 집합) |
OSDBA group | 오라클 |
Global database name | 오라클DB 접속을 위한 고유 식별자 (=SID) |
Password | 오라클DB 비밀번호 |
oracle 계정의 .bash_profile
에서 설정했던 것들과 동일하게 설정을 진행하여야 한다.
Container database
는 보통 체크 해제를 하고 진행한다. 본 포스트에서는 테스트 삼아서 함께 설치를 진행했는데, 설치에 오류가 생기는 부분이 종종 있어 정말 필요한 경우가 아니라면 제외하는 것을 추천한다.
INS-30011
오류는 비밀번호가 Oracle 권장사항에 맞지 않아서 발생하는 것으로, Yes
버튼을 눌러 그냥 무시하고 넘어가도록 한다.
oracle 계정의 .bash_profile
에서 입력한 값과 동일하게 Inventory Directory
를 설정한다. 보통 자동입력 되어 있으며, oraInventory Group Name
만 dba
그룹인지 확인하고 설치를 계속 진행하면 된다.
Oracle Database 설치 스크립트를 실행하기 위해 시스템 권한이 필요한데, 이를 root
계정을 일부 전환하여 사용할 것인지 sudo
명령어를 사용해 진행할 것인지 묻는 화면이다.
Automatically run configuration scripts
를 체크하고, root
계정의 비밀번호를 입력하자.
설치 환경을 확인하는 프로세스가 진행되면, 일부 부분에서 잘못된 정의가 있다고 이를 무시할 것인지 여부를 물어보는 화면이다.
Swap Size
는 그냥 무시하고 넘어가도 Oracle Database 구동에 큰 상관이 없으니 Ignore All
을 체크하고 계속 진행하자.
정말 무시할 것인지 다시 한 번 확인하는 화면이다. Yes
버튼을 눌러 설치를 계속 진행한다.
사용자가 설정한 Oracle Databse 설치 설정값들을 정리하여 출력해 주는 화면이다. Install
버튼을 눌러 설치한다.
설치 스크립트를 실행하기 위해 root
계정이 필요한데, Oracle Database 설치 인스턴스가 root
계정에 접근해도 되는지 묻는 화면이다. Yes
버튼을 눌러 진행한다.
Oracle Database 설치가 완료되었다. Close
버튼을 눌러 설치 인스턴스를 종료한다.
11. Oracle Listener 상태 확인
외부에서 Oracle Database로 접근하기 위한 Listener가 정상 실행되고 있는지 상태를 확인한다. lnsrctl status [리스너명]
을 입력하면 되는데, 따로 설정한 것이 없고 Preinstall을 통해 진행했다면 기본적인 리스너명은 LISTENER로 설정되어 있다.
환경변수 값이 oracle 계정에만 설정되어 있기 때문에, 본 과정은 oracle 계정으로 진행한다.
# lsnrctl status LISTENER
HOST
명 oracle
로 1521
포트를 통해 LISTENER가 정상적으로 실행중인 것을 확인할 수 있다.
12. DB 실행
$ sqlplus
sqlplus
명령어를 통해 Oracle Database에 접속한다.
환경변수 값이 oracle 계정에만 설정되어 있기 때문에, 본 과정은 oracle 계정으로 진행한다.
user-name
은 시스템 관리 계정인 /as sysdba
로 입력하고 접속한다. Oracle Database에 Connect
되었다는 문구가 출력되면 성공한 것이다.