Rocky Linux에 Oracle 12c 설치하기

merci·2024년 1월 3일
0

이번에 리눅스가 설치되어 있는 환경에 오라클을 설치했습니다.

설치된 Linux OS 확인

$ cat /etc/os-release

NAME="Rocky Linux"
VERSION="8.8 (Green Obsidian)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Rocky Linux 8.8 (Green Obsidian)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:8:GA"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2029-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-8"
ROCKY_SUPPORT_PRODUCT_VERSION="8.8"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.8"

시스템 정보 확인

$ hostnamectl
   Static hostname: batch
Transient hostname: LARISSRCH
         Icon name: computer-vm
           Chassis: vm
        Machine ID: e8fbc820584545208c3bb6924bc80997
           Boot ID: 2e266d73a517422093c2cd6105666ee9
    Virtualization: xen
  Operating System: Rocky Linux 8.8 (Green Obsidian)
       CPE OS Name: cpe:/o:rocky:rocky:8:GA
            Kernel: Linux 4.18.0-477.13.1.el8_8.x86_64
      Architecture: x86-64

리눅스 커널 버전

$ uname -r
4.18.0-477.13.1.el8_8.x86_64

Rocky Linux 8.8을 확인 했으니 오라클 설치 파일을 다운 받습니다.

Oracle 12c 다운받기

https://edelivery.oracle.com/osdc/faces/SoftwareDelivery

원하는 버전을 선택하면 우상단에 생성된 continue 를 클릭합니다.

리눅스를 선택하고

zip 파일을 받습니다.

호스트 이름 설정

호스트 이름을 vi 에디터로 설정합니다.

$ vi /etc/hosts
192.68.60.104 batch.localdomain.com batch
$ vi /etc/hostname
batch

Linux 패키지 업데이트

$ dnf makecache
Rocky Linux 8 - AppStream                       191  B/s | 4.8 kB     00:25
Rocky Linux 8 - BaseOS                          1.3 kB/s | 4.3 kB     00:03
Rocky Linux 8 - Extras                          1.1 kB/s | 3.5 kB     00:03
Metadata cache created.
$ dnf updqte -y
$ reboot

Transparent Hugepages 비활성화

오라클은 자체적인 메모리 관리 방법과 알고리즘을 가지고 있으며, THP는 이와 충돌하여 성능 저하를 일으킬 수 있습니다.

최초 always로 되어 있습니다.

$ cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

아래 설정을 추가합니다.

$ vi /etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
$ grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done
$ systemctl reboot

never 변경을 확인합니다.

$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

시스템 파라미터 설정

$ vi /etc/sysctl.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

net.ipv4.conf.all.arp_notify = 1
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

Oracle 구성 설정

$ vi /etc/security/limits.d/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
oracle   soft   data     unlimited
oracle   hard   data     unlimited	

Oracle 그룹 추가

$ groupadd -g 1501 oinstall
$ groupadd -g 1502 dba
$ groupadd -g 1503 oper
$ groupadd -g 1504 backupdba
$ groupadd -g 1505 dgdba
$ groupadd -g 1506 kmdba
$ groupadd -g 1507 racdba
$ useradd -u 1501 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba oracle
% echo "oracle" | passwd oracle --stdin
Changing password for user oracle.
passwd: all authentication tokens updated successfully.

그룹확인

$ cat /etc/group | grep oinstall

그룹이 이미 있을 경우 변경

$ sudo groupmod -g [새로운 GID] [그룹 이름]

사용자가 이미 존재하면

$ sudo usermod -u 1501 -g oinstall -aG dba,oper,backupdba,dgdba,kmdba,racdba oracle

Oracle 설치를 위한 패키지 설치

dnf install -y bc
dnf install -y binutils
dnf install -y compat-openssl11
dnf install -y elfutils-libelf
dnf install -y fontconfig
dnf install -y glibc
dnf install -y glibc-devel
dnf install -y ksh
dnf install -y libaio
dnf install -y libasan
dnf install -y liblsan
dnf install -y libX11
dnf install -y libXau
dnf install -y libXi
dnf install -y libXrender
dnf install -y libXtst
dnf install -y libxcrypt-compat
dnf install -y libgcc
dnf install -y libibverbs
dnf install -y libnsl
dnf install -y librdmacm
dnf install -y libstdc++
dnf install -y libxcb
dnf install -y libvirt-libs
dnf install -y make
dnf install -y policycoreutils
dnf install -y policycoreutils-python-utils
dnf install -y smartmontools
dnf install -y sysstat
dnf install -y glibc-headers
dnf install -y ipmiutil
dnf install -y libnsl2
dnf install -y libnsl2-devel
dnf install -y net-tools
dnf install -y nfs-utils 
dnf install -y unixODBC

SELinux 설정

SELinux 정책 위반으로 인한 문제를 방지하기 위함
오라클 설치 후 enforcing 로 바꾸길 권고

$ sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
$ setenforce permissive

Linux 방화벽 설정

$ firewall-cmd --permanent --add-port=1521/tcp
success
$ firewall-cmd --reload
success

또는

$ systemctl stop firewalld
$ systemctl disable firewalld

디렉토리 생성

$ mkdir -p /u01/app/oracle/product/12.2.0.1/db_1
$ mkdir -p /u02/oradata
$ chown -R oracle:oinstall /u01 /u02
$ chmod -R 775 /u01 /u02

오라클 유저 환경 설정

$ su - oracle
$ vi ~/.bash_profile

export TMP=/tmp
export TMPDIR=$TMP

export ORACLE_HOSTNAME=batch
export ORACLE_UNQNAME=cdb1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1/db_1
export ORA_INVENTORY=/u01/app/oraInventory
export ORACLE_SID=cdb1
export PDB_NAME=pdb1
export DATA_DIR=/u02/oradata
export NLS_LANG=KOREAN_KOREA.AL32UTF8

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

umask 022

ORACLE_SID가 설치될 오라클 데이터베이스의 이름이 됩니다.

$ source ~/.bash_profile

오라클 설치

$ unzip V839960-01.zip -d [압축을 풀 경로]
$ export CV_ASSUME_DISTID=RHEL8.8

압출을 푼 디렉토리로 가서 설치를 진행

$ ./runInstaller -ignorePrereq -waitforcompletion -silent \
oracle.install.option=INSTALL_DB_SWONLY \
ORACLE_HOSTNAME=${ORACLE_HOSTNAME} \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=${ORA_INVENTORY} \
ORACLE_HOME=${ORACLE_HOME} \
ORACLE_BASE=${ORACLE_BASE} \
oracle.install.db.InstallEdition=EE \
oracle.install.db.OSDBA_GROUP=dba \
oracle.install.db.OSBACKUPDBA_GROUP=backupdba \
oracle.install.db.OSDGDBA_GROUP=dgdba \
oracle.install.db.OSKMDBA_GROUP=kmdba \
oracle.install.db.OSRACDBA_GROUP=racdba \
JRE_LOCATION=/usr/bin/java \
oracle.installer.autoupdates.option=SKIP_UPDATES \
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \
DECLINE_SECURITY_UPDATES=true

tmp 디렉토리 권한때문에 안되면

$ chown -R oracle:oinstall /tmp/CVU_12.2.0.1.0_oracle
$ chmod -R 775 /tmp/CVU_12.2.0.1.0_oracle

설치가 완료되면

Oracle Database 12c의 설치을(를) 성공했습니다.
자세한 내용은 '/u01/app/oraInventory/logs/silentInstall2024-01-04_02-49-14PM.log'을(를) 확인하십시오.

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

다시 root 사용자로 전환

$ exit

root로 실행

$ /u01/app/oraInventory/orainstRoot.sh
$ /u01/app/oracle/product/12.1.0.2/db_1/root.sh

Oracle Database 생성

실행 후 오라클 계정으로 전환

$ su - oracle

리스너를 시작

$ lsnrctl start

DB 생성

$ 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                                                \
	 -automaticMemoryManagement false 											\
     -totalMemory 2000                                                         \
     -storageType FS                                                           \
     -datafileDestination "${DATA_DIR}"                                        \
     -redoLogFileSize 50                                                       \
     -emConfiguration NONE                                                     \
     -ignorePreReqs	
.
.
.
32% complete
36% complete
40% complete

Oracle 인스턴스 자동 시작 설정

서버가 종료되고 다시 켜질때 오라클을 자동으로 시작하는 방법입니다.
아래 방법을 추가하지 않는다면 sqlplus 에서 수동으로 오라클을 실행시켜야 합니다.

sqlplus / as sysdba

startup;

아래는 자동시작 설정입니다.

$ vi /etc/oratab

cdb1:/u01/app/oracle/product/12.1.0.2/db_1:Y

sqlplus로 유저 생성

$ sqlplus / as sysdba
ALTER SYSTEM SET DB_CREATE_FILE_DEST='/u02/oradata' SCOPE=BOTH;
ALTER PLUGGABLE DATABASE PDB1 SAVE STATE;

Oracle Database Server Auto Start 설정

오라클이 systemd를 지원한다면 아래의 방법으로도 자동 시작 설정이 가능합니다.

$ su -
$ vi /usr/lib/systemd/system/dbora.service

[Unit]
Description=Oracle Database Service
After=network.target

[Service]
Type=forking
ExecStart=/u01/app/oracle/product/12.1.0.2/db_1/bin/dbstart /u01/app/oracle/product/12.1.0.2/db_1
ExecStop=/u01/app/oracle/product/12.1.0.2/db_1/bin/dbshut /u01/app/oracle/product/12.1.0.2/db_1
User=oracle
TimeoutSec=300s

[Install]
WantedBy=multi-user.target

설정 활성화

$ systemctl enable --now dbora.service
$ systemctl status dbora.service
● dbora.service - Oracle Database Service
   Loaded: loaded (/usr/lib/systemd/system/dbora.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2024-01-04 15:17:11 KST; 28s ago
  Process: 20682 ExecStart=/u01/app/oracle/product/12.1.0.2/db_1/bin/dbstart /u01/app/oracle/product/12.1.0.2/db_1 (code=exited, status=0/SUCCESS)
    Tasks: 62 (limit: 48669)
   Memory: 1.7G
   CGroup: /system.slice/dbora.service
           ├─20791 ora_pmon_cdb1
           ├─20793 ora_clmn_cdb1
           ├─20795 ora_psp0_cdb1
           ├─20797 ora_vktm_cdb1
           ├─20801 ora_gen0_cdb1
           ├─20803 ora_mman_cdb1
           ├─20807 ora_gen1_cdb1
           ├─20811 ora_diag_cdb1
           ├─20813 ora_ofsd_cdb1
           ├─20817 ora_dbrm_cdb1
           ├─20819 ora_vkrm_cdb1
           ├─20821 ora_svcb_cdb1
           ├─20823 ora_pman_cdb1
           ├─20825 ora_dia0_cdb1
           ├─20827 ora_dbw0_cdb1
           ├─20829 ora_lgwr_cdb1

https://centlinux.com/install-oracle-21c-on-linux/ 참고

문자셋 번경

문자셋 확인

SQL > 
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_CHARACTERSET
AL32UTF8

------------

원하는 문자셋으로 변경

UPDATE sys.props$ SET value$ = 'AL32UTF8' WHERE name = 'NLS_NCHAR_CHARACTERSET';
update props$ set VALUE$='KOREAN_KOREA.AL32UTF8' where name='NLS_LANGUAGE';
UPDATE props$ SET value$ = 'AL32UTF8' WHERE name = 'NLS_NCHAR_CHARACTERSET';
commit;

필요하다면

$ echo $LANG
ko_KR.UTF-8

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

db 이름 확인

$ SELECT name FROM v$database;

네트워크 설정

클라이언트가 외부에서 Oracle에 연결하기 위해서는
$ORACLE_HOME/network/admin 디렉토리의
listener.ora
tnsnames.ora
sqlnet.ora
파일을 설정해야 합니다.

$ cd $ORACLE_HOME/network/admin

samples 디렉토리에 예가 있으니 필요하면 복사합니다.

$ cp tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora
  • listener.ora
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = [호스트명])(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
  • tnsnames.ora
CDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = [호스트명])(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = CDB1)
    )
  )
  • sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

유저 생성

alter session set "_ORACLE_SCRIPT" = true;
create user PIO identified by PIO01;
grant connect, resource, dba to PIO;
commit;

생성 확인

select username from all_users;

참고 https://centlinux.com/install-oracle-21c-on-linux/

유저 패스워드 만료

오라클이 설치된 서버로 접속 후 유저 변경

su - oracle

SYSDBA 접속

sqlplus / as sysdba

계정 상태 확인

SELECT username, account_status, profile
FROM   dba_users
WHERE  username = [account];

EXPIRED, LOCKED, EXPIRED & LOCKED 등의 상태라면 아래 진행

ALTER USER [account] IDENTIFIED BY "[new password]";
ALTER USER [account] ACCOUNT UNLOCK;
profile
작은것부터

0개의 댓글