이번에 리눅스가 설치되어 있는 환경에 오라클을 설치했습니다.
$ 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
을 확인 했으니 오라클 설치 파일을 다운 받습니다.
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
$ 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
오라클은 자체적인 메모리 관리 방법과 알고리즘을 가지고 있으며, 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
$ 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
$ 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
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 정책 위반으로 인한 문제를 방지하기 위함
오라클 설치 후 enforcing
로 바꾸길 권고
$ sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
$ setenforce permissive
$ 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
실행 후 오라클 계정으로 전환
$ 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
서버가 종료되고 다시 켜질때 오라클을 자동으로 시작하는 방법입니다.
아래 방법을 추가하지 않는다면 sqlplus 에서 수동으로 오라클을 실행시켜야 합니다.
sqlplus / as sysdba
startup;
아래는 자동시작 설정입니다.
$ vi /etc/oratab
cdb1:/u01/app/oracle/product/12.1.0.2/db_1:Y
$ sqlplus / as sysdba
ALTER SYSTEM SET DB_CREATE_FILE_DEST='/u02/oradata' SCOPE=BOTH;
ALTER PLUGGABLE DATABASE PDB1 SAVE STATE;
오라클이 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 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = [호스트명])(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
CDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = [호스트명])(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = CDB1)
)
)
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;