#!/usr/bin/env bash
# utils/oracle-11-2-x-xe-set-kernel-params
# =============================================================================
# The Kernel Parameters' Defaults Modifier. Version 1.0.0
# (To meet the needs of the Oracle Database 11.2.X XE instance binary.)
# =============================================================================
# This helper script automates adjusting some Kernel parameters
# which are required to be set to particular values in order
# that the Oracle Database instance binary will run properly.
#
# See the "src/data/docs/ubuntusrv/oracle-11-2-x-xe-on-ubuntu-16-04-x-lts.md"
# document for how to and when to run it.
# =============================================================================
# Written by Radislav (Radicchio) Golubtsov, 2018-2026
#

# Kernel parameters' defaults in Ubuntu Server 16.04.X LTS (x86-64):
#
#   $ sysctl fs.file-max
#   fs.file-max = 117228
#
#   $ sysctl net.ipv4.ip_local_port_range
#   net.ipv4.ip_local_port_range = 32768 60999
#
#   $ sysctl kernel.sem
#   kernel.sem = 32000 1024000000 500 32000
#
#   $ sysctl kernel.shmmax
#   kernel.shmmax = 18446744073692774399

# Helper constants.
declare -r EXIT_FAILURE=1 #    Failing exit status.
declare -r EXIT_SUCCESS=0 # Successful exit status.

# --- Debug output - Begin ----------------------------------------------------
echo
echo "=== Current values of Kernel parameters:"

sysctl fs.file-max                  && \
sysctl net.ipv4.ip_local_port_range && \
sysctl kernel.sem                   && \
sysctl kernel.shmmax
# --- Debug output - End ------------------------------------------------------

# Applying Oracle Database-effective Kernel requirements.
echo
echo "=== Set the new values for Kernel parameters:"

sysctl -w fs.file-max=6815744                       && \
sysctl -w net.ipv4.ip_local_port_range='9000 65000' && \
sysctl -w kernel.sem='250 32000 100 128'            && \
sysctl -w kernel.shmmax=536870912

echo

# If there is an error -- telling the OS about this.
if [ $? -eq ${EXIT_FAILURE} ]; then
    exit    ${EXIT_FAILURE}
fi

exit        ${EXIT_SUCCESS}

# vim:set nu et ts=4 sw=4:
