Search This Blog

Friday, June 18, 2021

Oracle 19c Preinstall-What does it actually do?

I set up a lot of systems, lately about a new RAC cluster a week.  We use a lot of automation and scripting, but if some of that can be done for you, that just makes it even easier. I love what the pre-install Oracle DB rpm provides.  How do you use it?

yum install oracle-database-preinstall-19c.x86_64 

About 30 seconds later, the system is 99% ready for a RAC install.  In a previous post <<click here>>, I detailed how to download the version 12 RPM and modify it to work with Redhat.  That's no longer necessary, the 19c version will install into RHEL...there's no longer a requirement on OEL.  You may still want to look at that post to see how to make modifications to the RPM (for instance, how to change the parameters, the UID's and GID's to match your environment.)

Recently I had an issue where I was getting different results on my test system than other people were getting, and I suspected it came down to the OS parameters that were being set.  I had used a minimal RHEL 7 install and added the pre-install rpm.  I knew roughly what that did, but not the details.  I looked up the Oracle documentation and all I found was this (for 12c):

When installed, the Oracle Preinstallation RPM does the following:

  • Automatically downloads and installs any additional RPM packages needed for installing Oracle Grid Infrastructure and Oracle Database, and resolves any dependencies
  • Creates an oracle user, and creates the oraInventory (oinstall) and OSDBA (dba) groups for that user
  • As needed, sets sysctl.conf settings, system startup parameters, and driver parameters to values based on recommendations from the Oracle RDBMS Pre-Install program
  • Sets hard and soft resource limits
  • Sets other recommended parameters, depending on your kernel version


Ok...that's not very detailed.  If you go to a sysadmin and say "I set other recommended parameters..." he'll have lots of follow up questions for you....

So...I once again tore open the RPM, found where the logs were sent and went through them.  This is what is ACTUALLY does:

When you install the RPM, it verifies several other rpms exist that are needed for Oracle (or installs them if they're missing).  If these rpms require rpms you don't have, yum will install those too.  Here's the list:

procps module-init-tools ethtool initscripts bind-utils nfs-utils util-linux-ng pam
xorg-x11-utils xorg-x11-xauth smartmontools
binutils glibc glibc-devel
ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel
make sysstat openssh-clients
psmisc net-tools unzip bc tar

...in addition, 

if you're on RHEL7, it'll also require compat-libcap1

if you're on RHEL8, it'll require both libnsl compat-openssl10

The next thing it does is add the required OS groups.  They are:

oinstall,dba,oper,backupdba,dgdba,kmdba,racdba

...and then creates the oracle OS user and puts it in those groups.

Next, it adjusts settings in 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

Be aware, it sets fs.aio-max-nr to a value *much* lower than you likely need.  See note 2229798.1 for details.

Next, on my system it set up user limits with these values.  I *think* the memlock setting was based on the amount of ram I had in my VM at the time...which was, not much:

Adding oracle soft nofile 1024
Adding oracle hard nofile 65536
Adding oracle soft nproc 16384
Adding oracle hard nproc 16384
Adding oracle soft stack 10240
Adding oracle hard stack 32768
Adding oracle hard memlock 134217728
Adding oracle soft memlock 134217728
Adding oracle soft data unlimited
Adding oracle hard data unlimited

Next, it adjusts the boot parameters:

Originally   : crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet

Changed to : crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet numa=off transparent_hugepage=never (which also disabled thp’s memory compaction)

Lastly, it edits /etc/sysconfig/network:

Adding NOZEROCONF=yes

You may need to adjust those settings for your environment if its large.  Sizing issues aside, after you install the rpm, within a few seconds you'll have a very stable system, ready for a RAC install.  There are still other recommended things you should do...for example, verifying the network is using jumbo packets for the interconnect and reserving hugepages for your SGA, but the RPM does a lot of the OS work for you.  

Hopefully this will help you better answer the question, "What does the Oracle Pre-install RPM do?"