مقدمه
راه‌اتدازی دیتابیس 19C برروی سیستم عامل Oracle Linux 8 پشتیبانی می‌شود ولی در صورت راه اندازی برروی UEK6 و دیتابیس ورژن 19.7. عملیات نصب بدون path انجام می‌شود ولی بدون آن‌ها پشتیبانی نمی‌شود.
این مقاله بر اساس نصب سرور با حداقل مقدار swap 2GB و تنظیم امنیت permissive می‌باشد.

Oracle Database 19c Installation On Oracle Linux 8 (OL8)

Hosts File:
فایل “/etc/hosts” باید شامل مقدار کامل و صحیح نام سرور باشد:

مثال:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

192.168.56.107 ol8-19.localdomain ol8-19

تنظیم نام صحیح در فایل “/etc/hostname”:

ol8-19.localdomain

Oracle Installation Prerequisites:
بمنظور تکمیل پیش‌نیازها ، از انجام تنظیمات بصورت اتوماتیک و یا دستی استفاده می‌کنیم.
Automatic Setup:
در صورتی که برای انجام تنظیمات پیش‌نیاز از “oracle-database-preinstall-19c” استفاده می‌کنید، دستور زیر را اجرا کنید:

dnf install -y oracle-database-preinstall-19c

در صورت استفاده از RHET8 و یا CentOS8 می‌توان از فایل RPM را با استفاده از ریپوزیتوری OL8 دریافت و نصب کرد و دیگر وابستگی‌ها را از طریق ریپوزیتوری معمول دریافت کرد.

dnf install -y https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el8.x86_64.rpm

Manual Setup:
در صورت عدم استفاده از پکیج “oracle-database-preinstall-19c” برای انجام تنظیمات پیش‌نیاز، باید تنظیمات زیر را بصورت دستی انجام دهید.
خطوط زیر را به فایل “/etc/sysctl.conf” و یا فایل “/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

Or

/sbin/sysctl -p /etc/sysctl.d/98-oracle.conf

تنظیمات زیر را به فایل “/etc/security/limits.d/oracle-database-preinstall-19c.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

در زیر لیست پکیج‌های موردنیاز برای نصب آورده شده است. در صورت عدم نصب برخی پکیج‌ها مسئله‌ای برای عملیات نصب ایجاد نمی‌شود:

dnf install -y bc

dnf install -y binutils

dnf install -y compat-libcap1

dnf install -y compat-libstdc++-33

dnf install -y dtrace-modules

dnf install -y dtrace-modules-headers

dnf install -y dtrace-modules-provider-headers

dnf install -y dtrace-utils

dnf install -y elfutils-libelf

dnf install -y elfutils-libelf-devel

dnf install -y fontconfig-devel

dnf install -y glibc

dnf install -y glibc-devel

dnf install -y ksh

dnf install -y libaio

dnf install -y libaio-devel

dnf install -y libdtrace-ctf-devel

dnf install -y libXrender

dnf install -y libXrender-devel

dnf install -y libX11

dnf install -y libXau

dnf install -y libXi

dnf install -y libXtst

dnf install -y libgcc

dnf install -y librdmacm-devel

dnf install -y libstdc++

dnf install -y libstdc++-devel

dnf install -y libxcb

dnf install -y make

dnf install -y net-tools # Clusterware

dnf install -y nfs-utils # ACFS

dnf install -y python # ACFS

dnf install -y python-configshell # ACFS

dnf install -y python-rtslib # ACFS

dnf install -y python-six # ACFS

dnf install -y targetcli # ACFS

dnf install -y smartmontools

dnf install -y sysstat

Added by me.

dnf install -y unixODBC

New for OL8

dnf install -y libnsl

dnf install -y libnsl.i686

dnf install -y libnsl2

dnf install -y libnsl2.i686

ساخت گروه‌ها و یوزرهای مورد نیاز:

groupadd -g 54321 oinstall

groupadd -g 54322 dba

groupadd -g 54323 oper

groupadd -g 54324 backupdba

groupadd -g 54325 dgdba

groupadd -g 54326 kmdba

groupadd -g 54327 asmdba

groupadd -g 54328 asmoper

groupadd -g 54329 asmadmin

groupadd -g 54330 racdba

useradd -u 54321 -g oinstall -G dba,oper oracle

موارد کامنت شده شامل گروه‌های اضافی غیر ضروری می‌باشند.

Additional Setup
تنظیم پسورد برای یوزر “oracle” :

passwd oracle

انجام تنظیمات امنیتی به با استفاده از اعمال تغییرات در فایل “/etc/selinux/config” :

SELINUX=permissive

پس از اعمال تغییرات ، سرور را ریستارت و یا دستور زیر را اجرا کنید:

setenforce Permissive

در صورتی که سرویس Firewall فعال می‌باشد ، آن‌را به حالت غیرفعال تغییر دهید:

systemctl stop firewalld

systemctl disable firewalld

در صورتی که از Oracle Linux و یا UEK استفاده نمی‌کنید، نیاز است transparent huge pages را بصورت دستی غیرفعال کنید.
ساخت دایرکتوری‌هایی که می‌خواهیم Software اوراکل در آن‌ها نصب شود:

mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1

mkdir -p /u02/oradata

chown -R oracle:oinstall /u01 /u02

chmod -R 775 /u01 /u02

قرار دادن نقاط نصب مستقیماً در زیرمجموعه “/” و بدون تخصیص هارددیسک مجزا بهتر است انجام نشود و فضای “/” در اختیار سیستم عامل باشد.
در صورتی که از کنسول و یا ssh tunnelling استفاده نمی‌کنید، با استفاده از یوزر Root دستور زیر را اجرا کنید:

xhost +

در این‌جا ایجاد اسکریپت‌ها با استفاده از دستور cat انجام می‌شود، در صورتی که قصد ایجاد فایل‌ها را بصورت دستی بجای استفاده از دستور cat دارید، کاراکترهای “\” قبل از کاراکتر “$” را حذف کنید.
ساخت دایرکتوری “scripts” :

mkdir /home/oracle/scripts

ساخت فایل با نام “setEnv.sh”:

cat > /home/oracle/scripts/setEnv.sh <

Oracle Settings

export TMP=/tmp

export TMPDIR=\$TMP

export ORACLE_HOSTNAME=ol8-19.localdomain

export ORACLE_UNQNAME=cdb1

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=\$ORACLE_BASE/product/19.0.0/dbhome_1

export ORA_INVENTORY=/u01/app/oraInventory

export ORACLE_SID=cdb1

export PDB_NAME=pdb1

export DATA_DIR=/u02/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

سپس فایل “setEnv.sh” را به انتهای فایل “/home/oracle/.bash_profile” ارجاع دهید:
echo “. /home/oracle/scripts/setEnv.sh” >> /home/oracle/.bash_profile
ساخت اسکریپت “start_all.sh” و “stop_all.sh” به عنوان سرویس stop/start .دقت داشته باشید مالک و دسترسی فایل‌ها بدرستی تنظیم شوند:

cat > /home/oracle/scripts/start_all.sh <

!/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< p=””> </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

پس از اتمام عملیات نصب و انجام تنظیمات “/etc/oratab” ، باید امکان stop/start دیتابیس را با استفاده از یوزر “oracle” و از طریق اجرای دستورات زیر، داشته باشید:

~/scripts/start_all.sh

~/scripts/stop_all.sh

Creating Linux Services:
در این مثال فرض بر عدم استفاده از Oracle Restart می‌باشد.
ایجاد فایل مربوط به سرویس “/lib/systemd/system/dbora.service”:

[Unit]

Description=The Oracle Database Service

After=syslog.target network.target

[Service]

systemd ignores PAM limits, so set any necessary limits in the service.

Not really a bug, but a feature.

https://bugzilla.redhat.com/show_bug.cgi?id=754285

LimitMEMLOCK=infinity

LimitNOFILE=65535

Type=simple

idle: similar to simple, the actual execution of the service binary is delayed

until all jobs are finished, which avoids mixing the status output with shell output of services.

RemainAfterExit=yes

User=oracle

Group=oinstall

Restart=no

ExecStart=/bin/bash -c ‘/home/oracle/scripts/start_all.sh’

ExecStop=/bin/bash -c ‘/home/oracle/scripts/stop_all.sh’

[Install]

WantedBy=multi-user.target

در صورت استفاده از دیسک NFS نیاز است وابستگی‌های بین Oracle و NFS را شناسایی کنید:

[Unit]

Description=The Oracle Database Service

Requires=rpc-statd.service network.target nfs.service nfs-mountd.service local-fs.target remote-fs.target

After=syslog.target network.target nfs.service nfs-mountd.service local-fs.target rpc-statd.service remote-fs.target

[Service]

systemd ignores PAM limits, so set any necessary limits in the service.

Not really a bug, but a feature.

https://bugzilla.redhat.com/show_bug.cgi?id=754285

LimitMEMLOCK=infinity

LimitNOFILE=65535

Type=simple

idle: similar to simple, the actual execution of the service binary is delayed

until all jobs are finished, which avoids mixing the status output with shell output of services.

Type=idle

RemainAfterExit=yes

User=oracle

Group=oinstall

Restart=no

ExecStart=/bin/bash -c ‘/home/oracle/scripts/start_all.sh’

ExecStop=/bin/bash -c ‘/home/oracle/scripts/stop_all.sh’

[Install]

WantedBy=multi-user.target

اجرای دستور زیر بمنظور شناسایی سرویس جدید:

systemctl daemon-reload

استارت و فعال‌سازی سرویس دیتابیس:

systemctl start dbora.service

systemctl enable dbora.service

Installation:
در این مرحله با استفاده از کاربر اوراکل لاگین کرده و در صورت استفاده از شبیه ساز X اقدام به انجام تنظیمات متغییر DISPLAY کنید:

DISPLAY=:0.0; export DISPLAY

سپس در مسیر ORACLE_HOME اقدام به unzip نرم‌افزار اوراکل و با استفاده از یکی از دستورات زیر عملیات نصب شروع کنید. در حالت interactive mode رابط گرافیکی برای کاربر نمایش داده می‌شود ولی درsilent mode تمامی تنظیمات در خط فرمان وارد می‌شوند:

Unzip software.

cd $ORACLE_HOME

unzip -oq /path/to/software/LINUX.X64_193000_db_home.zip

Fake Oracle Linux 7.

export CV_ASSUME_DISTID=OEL7.6

Interactive mode.

./runInstaller

Silent mode.

./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 \

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

پس از آن و در زمان درخواست، اسکریپت‌های زیر را اجرا ‌کنید:

s 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

در این مرحله آماده ساخت دیتابیس هستیم ولی در صورت دارا بودن ساپورت اوراکل بهتر است اقدام به نصب patch بکنید.

Patch Installation (Optional):
عملیات نصب 19.3 بدون استفاده از Path قابل انجام می‌باشد. بمنظور دریافت patch نیاز به Oracle support CSI و دانلود از آن می‌باشد. در این مثال عملیات نصب Patch برای حالت standalone و بدون ASM قبل از ساخت دیتابیس می‌باشد:

export SOFTWARE_DIR=/u01/software

export PATH=${ORACLE_HOME}/OPatch:${PATH}

export OPATCH_FILE=”p6880880_190000_Linux-x86-64.zip”

export PATCH_FILE=”p30783543_190000_Linux-x86-64.zip”

export PATCH_TOP=${SOFTWARE_DIR}/30783543

export PATCH_PATH1=${PATCH_TOP}/30869156

export PATCH_PATH2=${PATCH_TOP}/30805684

Prepare opatch.

cd ${ORACLE_HOME}

unzip -oq ${SOFTWARE_DIR}/${OPATCH_FILE}

Unzip software.

cd ${SOFTWARE_DIR}

unzip -oq ${PATCH_FILE}

cd ${PATCH_PATH1}

opatch prereq CheckConflictAgainstOHWithDetail -ph ./

opatch apply -silent

cd ${PATCH_PATH2}

opatch prereq CheckConflictAgainstOHWithDetail -ph ./

opatch apply -silent

برای اعمال Patch در یک سیستم عملیاتی حتما نسبت به مظالعه توضیحات آن اقدام کنید.
Database Creation:
برای انجام عملیات ایجاد دیتابیس از Database Configuration Assistant (DBCA) استفاده می‌کنیم. در حالت interactive mode رابط گرافیکی برای کاربر نمایش داده می‌شود ولی درsilent mode تمامی تنظیمات در خط فرمان وارد می‌شوند:

Start the listener.

lsnrctl start

Interactive mode.

dbca

Silent mode.

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

Post Installation:
اعمال تغییرات درتنظیمات فایل “/etc/oratab” برای هر instance:

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

فعال سازی Oracle Managed Files (OMF) و انجام تنظیمات بمنظور استارت اتوماتیک PDB در زمان استارت instance:

sqlplus / as sysdba <<eof
alter system set db_create_file_dest=’${DATA_DIR}’;</eof

<eof

alter pluggable database ${PDB_NAME} save state;

exit;

EOF

</eof