تنظیمات preinstallation بر روی اوراکل لینوکس برای نصب اوراکل

در قسمت قبل پکیجهای مورد نیازمون رو نصب کردیم.

در قدم اول به سراغ تنظیم فایروال. راه راحت اینه که سرویس فایروال رو غیرفعال کنیم و بعدش stop کنیم. اما یه راه قشنگتر و سخت تر هست که میشه پورتهایی که میخوایم رو باز کنیم:

[root@vahiddb1922 ~]# firewall-cmd --permanent --add-port=1521/tcp

success

[root@vahiddb1922 ~]# firewall-cmd --reload

success

[root@vahiddb1922 ~]#

یادمون باشه که اگر این روش رو انتخاب کردیم باید به ازای هر کاری که نیاز به پورت جدید داشت هم به سراغ فایروال بیایم. مثلاً اگر میخوایم این دیتابیس رو به cloudcontrol  اضافه کنیم، باید پورت 3872 رو هم باز کنیم.

حالا به سراغ selinux  میریم و از حالت enforcing به permissive تغییرش میدیم.

[root@vahiddb1922 ~]# sestatus

SELinux status:                 enabled

SELinuxfs mount:                /sys/fs/selinux

SELinux root directory:         /etc/selinux

Loaded policy name:             targeted

Current mode:                   enforcing

Mode from config file:          enforcing

Policy MLS status:              enabled

Policy deny_unknown status:     allowed

Memory protection checking:     actual (secure)

Max kernel policy version:      33

[root@vahiddb1922 ~]# vi /etc/selinux/config

[root@vahiddb1922 ~]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=permissive

# SELINUXTYPE= can take one of these three values:

#     targeted - Targeted processes are protected,

#     minimum - Modification of targeted policy. Only selected processes are protected.

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted

حالا سیستم رو reboot می کنیم.

[root@vahiddb1922 ~]# sestatus

SELinux status:                 enabled

SELinuxfs mount:                /sys/fs/selinux

SELinux root directory:         /etc/selinux

Loaded policy name:             targeted

Current mode:                   permissive

Mode from config file:          permissive

Policy MLS status:              enabled

Policy deny_unknown status:     allowed

Memory protection checking:     actual (secure)

Max kernel policy version:      33

حالا به سراغ فایلی میریم که با توجه به اینکه rpm مربوط  به oracle database رو با dnf نصب کردیم، تنظیماتش انجام شده هست. فهم این فایل برای محیطهای عملیاتی اهمیت داره.

[root@vahiddb1922 ~]# cat /etc/sysctl.conf

# sysctl settings are defined through files in

# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.

#

# Vendors settings live in /usr/lib/sysctl.d/.

# To override a whole file, create a new file with the same in

# /etc/sysctl.d/ and put new settings there. To override

# only specific settings, add a file with a lexically later

# name in /etc/sysctl.d/ and put new settings there.

#

# For more information, see sysctl.conf(5) and sysctl.d(5).

# oracle-database-preinstall-21c setting for fs.file-max is 6815744

fs.file-max = 6815744

اوراکل در هر لحظه با تعداد زیادی فایل سر و کار دارد. به این مطلب اضافه کنیم که تمام اساس لینوکس فایل هست و همه چیز بصورت فایل دیده می شود. این پارامتر اجازه می دهد که file handler  به اندازه کافی در اختیار دیتابیس قرار بگیرد. برای اینکه وضعیت فعلی این مقدار را ببینیم می توانیم از دستور زیر استفاده کنیم:

[root@vahiddb1922 ~]# cat /proc/sys/fs/file-nr

1184    0       6815744

همانطور که می بینیم، عددی که تنظیم شده است برابر ماکزیمم عدد ممکن هست. عدد اول هم تعداد فایلی هست که در حال حاضر در سیستم عامل باز است.

# oracle-database-preinstall-21c setting for kernel.sem is '250 32000 100 128'

kernel.sem = 250 32000 100 128

برای دیدن مقادیر تنظیم شده در سیستم عامل می توانیم از دستور زیر استفاده کنیم.

[root@vahiddb1922 ~]# ipcs -l

------ Messages Limits --------

max queues system wide = 32000

max size of message (bytes) = 8192

default max size of queue (bytes) = 16384

------ Shared Memory Limits --------

max number of segments = 4096

max seg size (kbytes) = 4294967296

max total shared memory (kbytes) = 4294967296

min seg size (bytes) = 1

------ Semaphore Limits --------

max number of arrays = 128

max semaphores per array = 250

max semaphores system wide = 32000

max ops per semop call = 100

semaphore max value = 32767

مفهوم semaphore در قالب IPC که مخفف Inter-Process Communication تعریف می شود. این تکنیک برای مدیریت دسترسی پروسس ها به منابع مشترک استفاده می شود.

# oracle-database-preinstall-21c setting for kernel.shmmni is 4096

kernel.shmmni = 4096

# oracle-database-preinstall-21c setting for kernel.shmall is 1073741824 on x86_64

kernel.shmall = 1073741824

# oracle-database-preinstall-21c setting for kernel.shmmax is 4398046511104 on x86_64

kernel.shmmax = 4398046511104

سه گزینه بعدی را با هم بررسی می کنیم که kernel.shmmni = 4096 و kernel.shmall = 1073741824 و kernel.shmmax = 4398046511104  هستند. shm  که مخفف shared memory هست اجازه ارتباط بین پروسس ها با یکدیگر را در ناجیه هایی که به عنوان memory segment می دهد. در مورد اوراکل memory segment ها توسط sga استفاده می شود که دیتا و control information استفاده می شود. بصورت پیش فرض در لینوکس میزان shared memory pages به اندازه زیادی تنظیم شده است اما اندازه مناسب بستگی به سایز sga مجموع instanceهایی دارد که بر روی این سرور در حال اجراست. 

shmmax ماکزیمم سایزی است که با واحد bytes به هر segment از shared memory اختصاص می یابد. در صورتی که این عدد از sga ما کوچک تر باشد، باید چند segment متفاوت در مموری به آن اختصاص یابد.

shmall ماکزیمم تعداد pgae هاست که تنظیم می شود. نکته مهم در مورد تنظیم shmall این است  که همیشه باید کمتر از میزان کل رم و بیشتر یا مساوری مجموع sga ها باشد. در صورتی که این عدد درست تنظیم نشده باشد با خطای ora-27102 out of memory  مواجه می شویم. 

برای مشخص شدن این عدد فرض کنیم 6 گیگ رم داریم که میخواهیم 5 گیگ آن را به اوراکل بدهیم. اول این 5 گیگ را به byte تبدیل می کنیم و سپس تقسیم بر page_size می کنیم. برای اینکه بدانیم سایز page چقدر است از دستور زیر استفاده می کنیم:

[root@oracle12cr2 ~]# getconf PAGE_SIZE

4096

پارامتر بعدی shmmni است. این گزینه به معنی حداکثر تعداد memory segment است. برای اینکه این اعداد را ببینیم می توانیم باز از دستور ipcs -lm استفاده کنیم.

[root@oracle12cr2 ~]# ipcs -lm

------ Shared Memory Limits --------

max number of segments = 4096

max seg size (kbytes) = 4294967296

max total shared memory (kbytes) = 4294967296

min seg size (bytes) = 1

 

# oracle-database-preinstall-21c setting for kernel.panic_on_oops is 1 per Orabug 19212317

kernel.panic_on_oops = 1

این پارامتر در این جهت است که در صورتی که باگ یا مشکلی برای کرنل مشاهده شد، رفتار سیستم عامل به چه صورت باشد. در صورتی که برابر صفر باشد، با وجود مشکل ادامه کار می دهد ولی در صورتی که برابر غیر از صفر باشد، سیستم reboot خواهد شد.

# oracle-database-preinstall-21c setting for net.core.rmem_default is 262144

net.core.rmem_default = 262144

# oracle-database-preinstall-21c setting for net.core.rmem_max is 4194304

net.core.rmem_max = 4194304

# oracle-database-preinstall-21c setting for net.core.wmem_default is 262144

net.core.wmem_default = 262144

# oracle-database-preinstall-21c setting for net.core.wmem_max is 1048576

net.core.wmem_max = 1048576

قدم بعدی، کانفیگ پارامترهای مربوط به بافر شبکه هست. در اینجا ما چهار پارامتر رو داریم که به ترتیب به سراغشون میریم. از این چهار پارامتر ، دو پارامتر مربوطه به خواندن که با rmem نشون داده میشن و دو پارامتر مربوط به نوشتن که با wmem نوشته می شوند. همچنین هر کدوم از این دو قسمت به دو قسمت default و max میان که اسمشون گویای مطلب هست.

بصورت پیش فرض سایز rmem و wmem و همچنین میزانی که می تواند رشد کند، برای اوراکل کافی نیست. اوراکل پیشنهاد می کنه اعداد بالا رو برای اینکار تنظیم کنیم. نکته ای که وجود داره اینه که میزان فضای مورد نیاز اینها از طریق رم اختصاص داده میشه و برای برنامه هایی مثل dns کفایت میکنه . پس اگر این سوال براتون پیش میاد که چرا بصورت پیش فرض این عدد بالا نیست، برای این هست که برای برنامه هایی که ترافیک زیادی روی شبکه ندارند، عدد پیش فرض کافی هست.

# oracle-database-preinstall-21c setting for net.ipv4.conf.all.rp_filter is 2

net.ipv4.conf.all.rp_filter = 2

# oracle-database-preinstall-21c setting for net.ipv4.conf.default.rp_filter is 2

net.ipv4.conf.default.rp_filter = 2

دو پارامتر بعدی مربوط به rp_filter است که اول باید با مفهوم reverse path آشنا شویم.  زمانی که هکرها بخواهند ddos انجام دهند یا شیوه authentication شبکه ای را متوجه شوند، از یک آدرس fake برای ارسال پکتها استفاده می کنند به این کار ip address spoofing  می گویند. در لینوکس سیستمی مانند دستگاه شبکه ای وجود دارد که در صورتی که آدرس وارد شده قابل route شدن باشد، آن packet را قبول می کند و در غیر اینصورت آنرا drop  می کند. در صورتی که بخواهیم اصلا چنین چیزی چک نشود عدد 0، در صورتی که بخواهیم تنها از همان کارت شبکه قابل route باشد عدد 1 و در صورتی که بخواهیم از هر کارت شبکه ای قابل route  باشد عدد 2 را وارد می کنیم.

# oracle-database-preinstall-21c setting for fs.aio-max-nr is 1048576

fs.aio-max-nr = 1048576

برای پارامتر aio-max-nr اوراکل داکیومنت شماره 2229798.1 را ارائه کرده است. در این داکیومنت نحوه محاسبه این پارامتر را بصورت زیر بیان کرده است:

aio-max-nr =no of process per DB * no of databases * 4096

حالا این پارامتر چه کاری برای ما انجام می دهد؟ این پارامتر به پروسس اجازه می دهد که تا چندین i/o را استفاده کند بدون اینکه منتظر اتمام هر کدام از آنها باشد. این پارامتر ماکزیمم این تعداد را مشخص می کند.

# oracle-database-preinstall-21c setting for net.ipv4.ip_local_port_range is 9000 65500

net.ipv4.ip_local_port_range = 9000 65500

اما آخرین گزینه در sysctl‌ مربوطه به net.ipv4.ip_local_port_range است. این پارامتر محدوده آدرس پورتهای لوکال را برای انتخاب توسط پروسسها در پروتکلهای tcp و udp مشخص می کند.

میریم سراغ اتصال به ntp server. ما از سرویس chrony استفاده می کنیم. قدم اول فعال کردن این سرویس هست

systemctl enable chronyd

 systemctl restart chronyd

vi /etc/chrony.conf

 این تغییر رو ایجاد می کنیم و آدرس سرور ntp خودمون رو میزاریم.

systemctl restart chronyd

برای تست و صحت هم دستور زیر رو میزنیم:

chronyc sources

چون میخوایم گروه های مربوط به کاربر اوراکل رو بصورت کامل داشته باشیم، گروه های مربوط به grid infra رو هم اضافه میکنیم و در قدم بعد کاربر اوراکل رو جزو اون گروه ها هم قرار میدیم.

[root@vahiddb1922 ~]# id oracle

uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)

[root@vahiddb1922 ~]# groupadd -g 54327 asmdba

[root@vahiddb1922 ~]# groupadd -g 54328 asmoper

[root@vahiddb1922 ~]# groupadd -g 54329 asmadmin

[root@vahiddb1922 ~]# usermod  -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,asmoper,asmadmin,racdba oracle

[root@vahiddb1922 ~]# id oracle

uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba),54327(asmdba),54328(asmoper),54329(asmadmin)

لینک ویدئوی این قسمت:

https://youtu.be/JnsnsHkr0OU

تو قسمت بعد میریم برای کانفیگ afd  و اضافه کردن دیسک به ماشین مجازی .