Skip to content

Oracle Database 18c Installation On Oracle Linux 8

    Oracle Installation Prerequisites

    The automatic setup is not available for Oracle Linux 8 yet, so perform the Manual Setup and Additional Setup.

    Manual Setup

    Add the following lines to the “/etc/sysctl.conf” file, or in a file called “/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

    Run one of the following commands to change the current kernel parameters, depending on which file you edited.

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

    Add the following lines to a file called “/etc/security/limits.d/oracle-database-preinstall-18c.conf” file.

    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

    The following packages are listed as required, including the 32-bit version of some of the packages. Many of the packages should be installed already.

    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

    Create the new groups and users.

    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

    Uncomment the extra groups you require.

    Additional Setup

    Set the password for the “oracle” user.

    passwd oracle

    Set secure Linux to permissive by editing the “/etc/selinux/config” file, making sure the SELINUX flag is set as follows.

    SELINUX=permissive

    Once the change is complete, restart the server or run the following command.

    # setenforce Permissive

    # systemctl stop firewalld
    # systemctl disable firewalld

    mkdir -p /u01/app/oracle/product/18.0.0/dbhome_1
    mkdir -p /u02/oradata
    chown -R oracle:oinstall /u01 /u02
    chmod -R 775 /u01 /u02

    Putting mount points directly under root without mounting separate disks to them is typically a bad idea. It’s done here for simplicity, but for a real installation “/” storage should be reserved for the OS.

    Unless you are working from the console, or using SSH tunnelling, login as root and issue the following command.

    xhost +<machine-name>

     The scripts are created using the cat command, with all the “$” characters escaped. If you want to manually create these files, rather than using the cat command, remember to remove the “\” characters before the “$” characters.

    Create a “scripts” directory.

    mkdir /home/oracle/scripts

    Create an environment file called “setEnv.sh”.

    cat > /home/oracle/scripts/setEnv.sh <<EOF
    # Oracle Settings
    export TMP=/tmp
    export TMPDIR=\$TMP
    
    export ORACLE_HOSTNAME=ol8-183.localdomain
    export ORACLE_UNQNAME=cdb1
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=\$ORACLE_BASE/product/18.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

    Add a reference to the “setEnv.sh” file at the end of the “/home/oracle/.bash_profile” file.

    echo ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile
    

    Create a “start_all.sh” and “stop_all.sh” script that can be called from a startup/shutdown service. Make sure the ownership and permissions are correct.

    cat > /home/oracle/scripts/start_all.sh <<EOF
    #!/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
    #!/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

    Once the installation is complete and you’ve edited the “/etc/oratab”, you should be able to start/stop the database with the following scripts run from the “oracle” user.

    ~/scripts/start_all.sh
    ~/scripts/stop_all.sh

    Installation

    Log into the oracle user. If you are using X emulation then set the DISPLAY environmental variable.

    DISPLAY=<machine-name>:0.0; export DISPLAY

    Switch to the ORACLE_HOME directory, unzip the software directly into this path and start the Oracle Universal Installer (OUI) by issuing one of the following commands in the ORACLE_HOME directory. The interactive mode will display GUI installer screens to allow user input, while the silent mode will install the software without displaying any screens, as all required options are already specified on the command line.

    # Unzip software.
    cd $ORACLE_HOME
    unzip -oq /path/to/software/LINUX.X64_180000_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

    Run the root scripts when prompted.

    As a root user, execute the following script(s):
            1. /u01/app/oraInventory/orainstRoot.sh
            2. /u01/app/oracle/product/18.0.0/dbhome_1/root.sh

    You are now ready to create a database.

    Database Creation

    You create a database using the Database Configuration Assistant (DBCA). The interactive mode will display GUI screens to allow user input, while the silent mode will create the database without displaying any screens, as all required options are already specified on the command line.

    # 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

    Edit the “/etc/oratab” file setting the restart flag for each instance to ‘Y’.

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

    Enable Oracle Managed Files (OMF) and make sure the PDB starts when the instance starts.

    sqlplus / as sysdba <<EOF
    alter system set db_create_file_dest='${DATA_DIR}';
    alter pluggable database ${PDB_NAME} save state;
    exit;
    EOF