CentOS에 Oracle 19C 설치

Oracle 19c는 다중 모델을 목적으로 나온 데이터베이스입니다.
최근 오라클 19c로 전환하여 사용하는 곳이 증가하였습니다.
19c를 테스트 목적으로 설치를 진행하였으며, 설치하는 과정을 작성하였습니다.

/app 아래 설치하고자 경로를 일부 변경하였습니다.
오라클 19c 설치 파일은 오라클 홈페이지에서 받을 수 있습니다.

사전 설치

호스트 명 설정

호스트 명의 "oracledb"로 설정하였습니다.

$ hostnamectl set-hostname oracledb
$ echo "192.168.0.4 nakanara.com nakanara" >> /etc/hosts

자동 설정

yum을 통하여 Oracle 설치에 필요한 내용을 설치합니다.
패키지를 통한 자동 설정이 아닌 수동 설정을 할 경우 "수동 설정"으로 진행합니다.

$ yum install -y oracle-database-preinstall-19c
# or
$ yum install -y https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

수동 설정

oracle-database-preinstall-19c 패키지로 진행하지 않은 경우 진행하세요.

관련 패키지 설치

  1. 관련 패키지 설치

습관처럼 yum으로 바로 설치하지 않고, 다운로드 후 설치를 진행하였습니다.

yum install -y --downloadonly --downloaddir=/app/oracle_rpm \
bc \
binutils \
compat-libcap1 \
compat-libstdc++-33 \
dtrace-utils \
elfutils-libelf \
elfutils-libelf-devel \
fontconfig-devel \
glibc \
glibc-devel \
ksh \
libaio \
libaio-devel \
libdtrace-ctf-devel \
libXrender \
libXrender-devel \
libX11 \
libXau \
libXi \
libXtst \
libgcc \
librdmacm-devel \
libstdc++ \
libstdc++-devel \
libxcb \
make \
net-tools \
smartmontools \
sysstat \
unzip \
libnsl \
libnsl2 \ 
unixODBC
$ ll

합계 33676
-rw-r--r--. 1 root root   65788  7월  4  2014 dejavu-fonts-common-2.33-6.el7.noarch.rpm
-rw-r--r--. 1 root root 1482820  7월  4  2014 dejavu-sans-fonts-2.33-6.el7.noarch.rpm
-rw-r--r--. 1 root root   40716 10월 15  2020 elfutils-libelf-devel-0.176-5.el7.x86_64.rpm
-rw-r--r--. 1 root root   58112 10월 15  2020 expat-devel-2.1.0-12.el7.x86_64.rpm
-rw-r--r--. 1 root root  260512 11월 12  2018 fontconfig-2.13.0-4.3.el7.x86_64.rpm
-rw-r--r--. 1 root root  141248 11월 12  2018 fontconfig-devel-2.13.0-4.3.el7.x86_64.rpm
...
$ yum install -y /app/oracle_rpm/*.rpm

Installed:
  dejavu-fonts-common.noarch 0:2.33-6.el7    dejavu-sans-fonts.noarch 0:2.33-6.el7          elfutils-libelf-devel.x86_64 0:0.176-5.el7                expat-devel.x86_64 0:2.1.0-12.el7       fontconfig.x86_64 0:2.13.0-4.3.el7
  fontconfig-devel.x86_64 0:2.13.0-4.3.el7   fontpackages-filesystem.noarch 0:1.44-8.el7    freetype-devel.x86_64 0:2.8-14.el7_9.1                    glibc-devel.x86_64 0:2.17-324.el7_9     glibc-headers.x86_64 0:2.17-324.el7_9
  ...

Complete!

사전 환경 설정

  1. 커널 매개 변수 조정

/etc/sysctl.d/98-oracle.conf 파일에 다음의 내용 추가합니다.

$ vi /etc/sysctl.d/98-oracle.conf
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500

커널 매개 변수 로드

$ /sbin/sysctl -p /etc/sysctl.d/98.oracle.conf
  1. 보안 제한 설정

/etc/security/limits.d/30-oracle.conf 파일 내용 추가합니다.

$ vi /etc/security/limits.d/30-oracle.conf 

파일 추가 내용

oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc    16384
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768
oracle   hard   memlock    134217728
oracle   soft   memlock    134217728
  1. 사용자 및 그룹 생성
$ groupadd -g 54321 oinstall
$ groupadd -g 54322 dba
$ groupadd -g 54323 oper

$ useradd -u 54321 -g oinstall -G dba,oper oracle
$ passwd oracle
  1. SELinux 모드 구성

SELINUX=permissive 모드로 설정되어 있는지 확인하고, 설정되어 있지 않다면 영구적으로 permissive 모드로 설정을 변경합니다.

$ cat /etc/sysconfig/selinux
$ sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/sysconfig/selinux
$ setenforce permissive
  1. 방화벽 설정

1521/TCP 포트를 허용합니다.

$ firewall-cmd --permanent --add-port=1521/tcp
success
$ firewall-cmd --reload
success
  1. Oracle 디렉토리 생성 및 권한 설정

설치할 디렉토리 생성 및 권한 설정합니다.
/app경로 아래 DB 엔진이 설치될 /oracle과 데이터가 저장될 /oradata를 생성하였습니다.

$ mkdir -p /app/oracle/product/19.3.0/dbhome_1
$ mkdir -p /app/oradata
$ mkdir -p /app/oraInventory
$ chown -R oracle:oinstall /app/oracle /app/oradata /app/oraInventory
$ chmod -R 775 /app/oracle /app/oradata /app/oraInventory

오라클 사용자 구성

  1. Oracle 사용자 접속
$ su - oracle
  1. 오라클 환경 변수 /home/oracle/scripts/setEnv.sh 파일 생성

오라클 관련 환경 설정 변수를 setEnv에 설정합니다.

$ cd ~
$ mkdir scripts
$ cat > /home/oracle/scripts/setEnv.sh <<EOF
# Oracle Settings
export TMP=/tmp
export TMPDIR=$TMP

export ORACLE_HOSTNAME=nakanara.com # hostname 참조
export ORACLE_UNQNAME=cdb1 # 고유 ID
export ORACLE_BASE=/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORA_INVENTORY=/app/oraInventory
export ORACLE_SID=cdb1 # sid
export PDB_NAME=pdb1 
export DATA_DIR=/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
EOF
  1. .bash_profile에 setEnv.sh 내용 추가

setEnv.sh내용을 .bash_profile 하단에 추가합니다.

$ ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile

수정한 .bash_profile을 현재 세션에 적용합니다.

$ source ~/.bash_profile
  1. 추가 스크립트 생성

start_all.sh, stop_all.sh 스크립트 생성합니다.

$ cat > /home/oracle/scripts/start_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh

export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

dbstart \$ORACLE_HOME
EOF
$ cat > /home/oracle/scripts/stop_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh

export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

dbshut \$ORACLE_HOME
EOF

파일에 대한 권한을 변경합니다.

$ chown -R oracle:oinstall /home/oracle/scripts
$ chmod u+x /home/oracle/scripts/*.sh

오라클 설치

Oracle 19c 압축파일을 ORACLE_HOME에 압축을 풉니다.

$ unzip LINUX.X64_193000_db_home.zip -d $ORACLE_HOME

설치를 진행합니다.

$ cd $ORACLE_HOME

$ ./runInstaller -ignorePrereq -waitforcompletion -silent                      \
    -responseFile ${ORACLE_HOME}/install/response/db_install.rsp               \
    oracle.install.option=INSTALL_DB_SWONLY                                    \
    ORACLE_HOSTNAME=${ORACLE_HOSTNAME}                                         \
    UNIX_GROUP_NAME=oinstall                                                   \
    INVENTORY_LOCATION=${ORA_INVENTORY}                                        \
    SELECTED_LANGUAGES=en,en_GB,ko                                             \
    ORACLE_HOME=${ORACLE_HOME}                                                 \
    ORACLE_BASE=${ORACLE_BASE}                                                 \
    oracle.install.db.InstallEdition=EE                                        \
    oracle.install.db.OSDBA_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

실행 결과

Oracle Database 설정 마법사 실행 중...

[WARNING] [INS-13014] 대상 환경이 일부 선택적 요구 사항을 충족하지 않습니다.
   원인: 일부 선택적 필요 조건이 충족되지 않았습니다. 자세한 내용은 로그를 참조하십시오. installActions2021-06-01_01-33-53PM.log
   작업: installActions2021-06-01_01-33-53PM.log 로그에서 실패한 필요 조건 검사 목록을 확인하십시오. 로그 파일 또는 설치 설명서에서 필요 조건을 충족하는 적합한 구성을 찾아 수동으로 오류를 수정하십시오.
이 세션에 대한 응답 파일을 다음에서 찾을 수 있습니다.
 /app/oracle/product/19.3.0/dbhome_1/install/response/db_2021-06-01_01-33-53PM.rsp

다음 위치에서 이 설치 세션의 로그를 찾을 수 있습니다.
 /tmp/InstallActions2021-06-01_01-33-53PM/installActions2021-06-01_01-33-53PM.log

루트 사용자로 다음 스크립트를 실행합니다.
        1. /app/oraInventory/orainstRoot.sh
        2. /app/oracle/product/19.3.0/dbhome_1/root.sh

다음 노드에서 /app/oraInventory/orainstRoot.sh을(를) 실행하십시오.
[oracledb]
다음 노드에서 /app/oracle/product/19.3.0/dbhome_1/root.sh을(를) 실행하십시오.
[oracledb]

설치 후 root로 접속하여 스크립트를 실행합니다.

$ su -
$ /app/oraInventory/orainstRoot.sh
다음 권한 변경 중/app/oraInventory.
그룹에 대한 읽기, 쓰기 권한을 추가하는 중입니다.
월드에 대한 읽기, 쓰기, 실행 권한을 제거하는 중입니다.

그룹 이름 변경 중 /app/oraInventory 대상 oinstall.
스크립트 실행이 완료되었습니다.


$ /app/oracle/product/19.3.0/dbhome_1/root.sh
Check /app/oracle/product/19.3.0/dbhome_1/install/root_oracledb.nakanara.io_2021-06-01_13-59-05-740560635.log for the output of root script

오라클 실행

oracle 사용자로 접속 후 데이터베이스를 시작한다.

$ su - oracle
$ lsnrctl start


LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 01-JUN-2021 14:00:10

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Starting /app/oracle/product/19.3.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Log messages written to /app/oracle/diag/tnslsnr/oracledb/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracledb.nakanara.com)(PORT=1521)))

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                01-JUN-2021 14:00:10
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /app/oracle/diag/tnslsnr/oracledb/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=nakanara.com)(PORT=1521)))
The listener supports no services
The command completed successfully

데이터 베이스 생성하기

dbca -silent -createDatabase                                                   \
     -templateName General_Purpose.dbc                                         \
     -gdbname ${ORACLE_SID} -sid  ${ORACLE_SID} -responseFile NO_VALUE         \
     -characterSet AL32UTF8                                                    \
     -sysPassword SysPassword1                                                 \
     -systemPassword SysPassword1                                              \
     -createAsContainerDatabase true                                           \
     -numberOfPDBs 1                                                           \
     -pdbName ${PDB_NAME}                                                      \
     -pdbAdminPassword PdbPassword1                                            \
     -databaseType MULTIPURPOSE                                                \
     -memoryMgmtType auto_sga                                                  \
     -totalMemory 2000                                                         \
     -storageType FS                                                           \
     -datafileDestination "${DATA_DIR}"                                        \
     -redoLogFileSize 50                                                       \
     -emConfiguration NONE                                                     \
     -ignorePreReqs


DB 작업 준비
8% 완료
데이터베이스 파일 복사 중
31% 완료
Oracle 인스턴스 생성 및 시작 중
32% 완료
36% 완료
40% 완료
43% 완료
46% 완료
데이터베이스 생성 완료 중
51% 완료
53% 완료
54% 완료
플러그인할 수 있는 데이터베이스 생성 중
58% 완료
77% 완료
사후 구성 작업 실행 중
100% 완료
데이터베이스 생성이 완료되었습니다. 자세한 내용은 다음의 로그 파일에서 확인하십시오.
 /app/oracle/cfgtoollogs/dbca/cdb1
데이터베이스 정보:
전역 데이터베이스 이름:cdb1
SID(시스템 식별자):cdb1
자세한 내용은 로그 파일 "/app/oracle/cfgtoollogs/dbca/cdb1/cdb1.log"을(를) 참조하십시오.

자동 실행 설정

/etc/oratab 파일의 각 인스턴스별 재시작 플래그가 N을 Y로 설정하여 자동 재시작되도록 수정합니다.

$ vi /etc/oratab

# 전체 변경
$ sed -i 's/:N$/:Y/g' /etc/oratab

cdb1:/app/oracle/product/19.3.0/dbhome_1:Y

OMF(Oracle Managed Files)를 활성화하여 데이터베이스 및 데이터베이스 파일 생성을 단순화합니다.

$ sqlplus / as sysdba <<EOF
alter system set db_create_file_dest='${DATA_DIR}';
alter pluggable database ${PDB_NAME} save state;
exit;
EOF

SQL로 설정할 경우 아래처럼 진행하시면 됩니다.

alter system set db_create_file_dest='/app/oradata';
System altered.
alter pluggable database pdb1 save state;
Pluggable database altered.

현재 DB 상태 확인

sqlplus / as sysdba

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB19C                         READ WRITE NO

삭제

오라클 삭제 후 다시 설치를 하기 위한 목적일 경우 deinstall을 실행하면 됩니다.

$ /app/oracle/product/19.3.0/dbhome_1/deinstall

참고

#oracle19c #oracle #install #centos #centos7

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기