Installing Oracle 12c Revision 2 On Fedora 26

This writing is based on this article which I followed. However, the steps mentioned were somewhat not in order and some issues tackled were not described properly (at least to me). Please also note that these steps are very specific to Fedora 26. I don’t guaranteed that it will work on other distro or other Fedora or Oracle version.

1- First of all, download the installation files OTN: Oracle Database 12c Release 2 (12.2.0.1) Software (64-bit).

2- Create appropiate Linux groups and users. Set the password for Linux user oracle.

groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
sudo useradd -u 54321 -g oinstall -G dba,oper oracle
passwd oracle

3- Create the appropiate directories for Oracle. Note that the installation can be anywhere, but for simplicity sake, lets just use Oracle typical directory structure.

mkdir -p /u01/app/oracle/product/12.2.0.1/db_1
mkdir -p /u01/software
sudo chown -R oracle:oinstall /u01
sudo chmod -R 775 /u01

4- Unzip the installation files from (1) to folder “/u01/software/database”. This will be our installer folder.

unzip linuxx64_12201_database.zip database

5- Setup the host file. Edit the “/etc/hosts” file to add a fully qualified name to our machine. Note that keep everything in one line. For example, (a) below doesn’t work for me, but (b) does. Ensure the file is saved correctly by running hostname

(a)
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.56.141  fedora26.localdomain  fedora26

(b)
127.0.0.1   localhost 
127.0.0.1   localhost.localdomain 
127.0.0.1   fedora26.localdomain

6- Set the kernel parameters. Add the following lines to the “/etc/sysctl.conf” file.

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 this to apply the changes : /sbin/sysctl -p

Add the following lines to a file called “/etc/security/limits.d/oracle-database-server-12cR2-preinstall.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 

7- Stop and disable firewall

systemctl stop firewalld
systemctl disable firewalld 

8- Set SELinux to permissive by editing the “/etc/selinux/config” file, making sure the SELINUX flag is set as follows :

SELINUX=permissive

9- Now, reboot the machine to ensure all changes we made so far are applied.

10- Login as the Linux user oracle that we created in (2) : su - oracle

11- Ensure all packages needed are installed. Just copy and paste these on terminal and install them.

Package group

sudo dnf groupinstall "Development Tools" -y
sudo dnf groupinstall "Administration Tools" -y
sudo dnf groupinstall "System Tools" -y 

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

sudo dnf install binutils -y
sudo dnf install compat-libcap1 -y
sudo dnf install compat-libstdc++-33 -y
sudo dnf install compat-libstdc++-33.i686 -y
sudo dnf install glibc -y
sudo dnf install glibc.i686 -y
sudo dnf install glibc-devel -y
sudo dnf install glibc-devel.i686 -y
sudo dnf install ksh -y
sudo dnf install libaio -y
sudo dnf install libaio.i686 -y
sudo dnf install libaio-devel -y
sudo dnf install libaio-devel.i686 -y
sudo dnf install libX11 -y
sudo dnf install libX11.i686 -y
sudo dnf install libXau -y
sudo dnf install libXau.i686 -y
sudo dnf install libXi -y
sudo dnf install libXi.i686 -y
sudo dnf install libXtst -y
sudo dnf install libXtst.i686 -y
sudo dnf install libgcc -y
sudo dnf install libgcc.i686 -y
sudo dnf install libstdc++ -y
sudo dnf install libstdc++.i686 -y
sudo dnf install libstdc++-devel -y
sudo dnf install libstdc++-devel.i686 -y
sudo dnf install libxcb -y
sudo dnf install libxcb.i686 -y
sudo dnf install make -y
sudo dnf install nfs-utils -y
sudo dnf install net-tools -y
sudo dnf install smartmontools -y
sudo dnf install sysstat -y
sudo dnf install unixODBC -y
sudo dnf install unixODBC-devel -y 

12- Edit the release file. Edit the “/etc/redhat-release” file replacing the current release information “Fedora release 26 (Twenty Six)” with the following.

redhat release 7

13- Edit the bashrc file of the oracle user : vim ~/.bashrc. Ensure the hostname is according to what you set in (5).

export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=fedora26.localdomain
export ORACLE_UNQNAME=cdb1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1/db_1
export ORACLE_SID=cdb1
export PATH=/usr/sbin:$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 

14- There is a bug that requires us to relink some of the libraries used by Oracle. This is probably the cause of error that prompts “TNS : Lost contact” that is typically faced during Oracle installation.

cd $ORACLE_HOME/lib/stubs
mkdir BAK
mv libc* BAK/
$ORACLE_HOME/bin/relink all 

15- Run the installer in GUI mode. Ensure that you set the password for administator and jot it down.

cd /u01/software/database
./runInstaller 

If you’re faced with the error mentioned in 14, what you probably have is Oracle software installed, but database was not created. Moving forward, do again step 14 and afterwards, follow the next step. If you don’t face the error, skip the next step - you probably have database created successfully already.

16- Create database. Run : dbca

17- If you’re faced with not enough space error, delete the installation zip files downloaded in (1).

18- By now, the database should be succesfully installed. In short, there are 2 things that we need to check to ensure our Oracle database is running correctly, the first one is the Oracle database instance and the other one is the Oracle listener.

19- To ensure the Oracle database instance is running, check it using Sqlplus.

sqlplus / as sysdba
startup 

You should see something like this :

ORACLE instance started.

Total System Global Area 2483027968 bytes
Fixed Size		    8795808 bytes
Variable Size		  687868256 bytes
Database Buffers	 1778384896 bytes
Redo Buffers		    7979008 bytes
Database mounted.
Database opened. 

20- To ensure that the listener is running, run :

lsnrctl status

or you can restart the listener

lsnrctl stop
lsnrctl start

You should see something like this :

    LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 31-DEC-2017 21:22:40

	Copyright (c) 1991, 2016, Oracle.  All rights reserved.

	Starting /u01/app/oracle/product/12.2.0.1/db_1/bin/tnslsnr: please wait...


	LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 31-DEC-2017 21:22:15

	Copyright (c) 1991, 2016, Oracle.  All rights reserved.

	Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=fedora26.localdomain)(PORT=1521)))
	STATUS of the LISTENER
	------------------------
	Alias                     LISTENER
	Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
	Start Date                31-DEC-2017 19:52:50
	Uptime                    0 days 1 hr. 29 min. 26 sec
	Trace Level               off
	Security                  ON: Local OS Authentication
	SNMP                      OFF
	Listener Parameter File   /u01/app/oracle/product/12.2.0.1/db_1/network/admin/listener.ora
	Listener Log File         /u01/app/oracle/diag/tnslsnr/fedora26/listener/alert/log.xml
	Listening Endpoints Summary...
	  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=fedora26.localdomain)(PORT=1521)))
	  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
	  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=fedora26.localdomain)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/orcl/xdb_wallet))(Presentation=HTTP)(Session=RAW))
	Services Summary...
	Service "619541c6fa4e61e3e0530100007f47e3" has 1 instance(s).
	  Instance "orcl", status READY, has 1 handler(s) for this service...
	Service "orcl" has 1 instance(s).
	  Instance "orcl", status READY, has 1 handler(s) for this service...
	Service "orclXDB" has 1 instance(s).
	  Instance "orcl", status READY, has 1 handler(s) for this service...
	Service "orclpdb" has 1 instance(s).
	  Instance "orcl", status READY, has 1 handler(s) for this service...
	The command completed successfully 

21- I had some issues where the listener just couldn’t reach out the running database instance. To rectify this, shutdown the instance and restart it back using sqlplus

sqlplus / as sysdba
SQL> shutdown
SQL> startup 

Afterwards, check if the listener is picking up the instance by lsnrctl status

22- That’s it. You may want to create some tablespace, some new users to try out your local Oracle database using any database client. I use Dbeaver. Good luck!!