مقدمه
راهاتدازی دیتابیس 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