Since I want to give as many as possible examples in my blog I needed to install a Oracle database on my Ubuntu 14.04 operating system first. This seems to be a very good starting point for one of my first posts.
Although Linux users are used to very handy install processes by just typing sudo apt-get … commands the installation of an Oracle database is not as simple as that. The reason for this is that the Oracle database as an proprietary product is not provided in the public software repositories which the apt-get commands query.
The described installation is intended for testing or development, not production environments. Even the Express Edition is limited.
Prerequisites
- you need to be a sudo
- ubuntu libraries/packages need to be in place alien, libaio1, unixodbc
Installation
Before we can start with installation of the Oracle database, we need to ensure that a couple of additional Linux packages are installed. Prepare your system by installing the following package:
sudo apt-get install alien libaio1 unixodbcNext, you need to download the Linux x64 version of the Oracle Database 11g R2 Express Edition (link)
Unzipping
Navigate to your download folder and unzip the downloaded Oracle files. In my case this can be done by executing the following commands in your terminal.
cd ~/Downloadsand
unzip oracle-xe-*.x86_64.rpm.zipA new directory Disk1 is added to the Download folder. You can jump into this folder by typing:
cd Disk1Convert the *.rpm Binary
Since Oracle does not support officially Ubuntu as a target platform the installation scripts are not compatible with the operating system (core Debian). But the good thing is, there are commands we can use to make from the rpm package a dep package which fits our operating system’s requirements.
Alien is such a tool which can be used to convert a package format into another. The command generates from the rpm package a dep one:
sudo alien --scripts -d oracle-xe-11.2.0-1.0.x86_64.rpmDepending on your system’s performance the conversation can take a while. After several minutes (please, do not interrupt the process) you will find the oracle-xe-11.2.0-1.0.x86_64.dep package in the Disk1 folder.
You might think that you are able to install the Oracle databases now, but you would get problems by just executing the *.dep installation routine. Why? Because a common Red Hat package, the package format Oracle provides, demands the /sbin/chkconfig file which is not required by Ubuntu.
/sbin/chkconfigUbuntu does not use /sbin/chkconfig for installation. To install a converted .dep from an .rpm package, you may need to adjust or create this file.
We create and edit the chkconfig with the following commands:
sudo touch /sbin/chkconfig# .. you may chose your favorite editor (vi, leafpad, ...)sudo gedit /sbin/chkconfigCopy and paste the following lines into the editor save and close:
#!/bin/bash# Oracle 11gR2 XE installer chkconfig hack for Ubuntufile=/etc/init.d/oracle-xeif [[ ! `tail -n1 $file | grep INIT` ]]; thenecho >> $fileecho '### BEGIN INIT INFO' >> $fileecho '# Provides: OracleXE' >> $fileecho '# Required-Start: $remote_fs $syslog' >> $fileecho '# Required-Stop: $remote_fs $syslog' >> $fileecho '# Default-Start: 2 3 4 5' >> $fileecho '# Default-Stop: 0 1 6' >> $fileecho '# Short-Description: Oracle 11g Express Edition' >> $fileecho '### END INIT INFO' >> $filefiupdate-rc.d oracle-xe defaults 80 01#EOFThis “Ubuntu hack” defines how the Oracle database can be started or stopped. It declares how the service can be used and which parameters it requires. Now we have to give the file some execution privileges.
sudo chmod 755 /sbin/chkconfigYou can test whether you have set the privileges correctly by listing the altered file (notice the x for user, group and others).
ll /sbin/ch*-rwxr-xr-x 1 root root 553 Jul 30 12:38 /sbin/chkconfig*System Preconfigurations
There are several minor adjustments required before the installation/configuration of the Oracle database.
Adjust Kernel Parameters
The Oracle database requires a set of kernel parameters. Especially the maximum use of RAM, etc. These parameters will be configured in the 60-oracle.conf file. These files will be loaded during service startup. In this case when the Oracle database service starts.
sudo touch /etc/sysctl.d/60-oracle.confsudo gedit /etc/sysctl.d/60-oracle.confAdd the following lines:
# Oracle 11g XE kernel parametersfs.file-max=6815744net.ipv4.ip_local_port_range=9000 65000kernel.sem=250 32000 100 128kernel.shmmax=536870912Save and close the editor. Run the following command to apply the parameters:
sudo service procps startAdjust Path to Pattern Scanning and Text Processing Language (awk)
Although the awk command is installed in each default Ubuntu installation the configuration util of the Oracle database does not search in the correct directories for it. This will lead to some warnings/errors during the configure phase. It is not a big problem since we have only to point to the already installed binary by just creating a link.
sudo ln -s /usr/bin/awk /bin/awkThat’s it!
You might ask yourself why you will be faced this problem? Well, it is far easier than you think, Red Hat keeps the awk command under /bin and Ubuntu puts it under /usr/bin.
Adjustment in Mount Point
The Oracle database requires a separate mounting point which we can create with the following commands:
sudo rm -rf /dev/shmsudo mkdir /dev/shmsudo mount -t tmpfs shmfs -o size=2048m /dev/shmThis issue can occur if you do not configure a separate mount point for the Oracle database before the configuration phase.
Since the changes are only temporary for the current session they will be lost after system reboot. In order to make them permanent you can create a startup script for a specific run level. Lets add the prior steps to a file, make them executable and start them automatically while our system boots. This will ensure that the required mount point is accessible whenever we start the database manually.
We create first the file and open it with our favorite editor
sudo touch /etc/rc2.d/S10oracle-mountsudo gedit /etc/rc2.d/S10oracle-mountAdd the following lines:
#! /bin/sh### BEGIN INIT INFO# Provides: Creates Oracle mount point# Required-Start:# Required-Stop:# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Used for Oracle installation# Description: Used for Oracle installation### END INIT INFO
# Aktionencase "$1" in start) mkdir /var/lock/subsys 2>/dev/null touch /var/lock/subsys/listener rm /dev/shm 2>/dev/null mkdir /dev/shm 2>/dev/null mount -t tmpfs shmfs -o size=2048m /dev/shm ;; stop) ;; restart) ;;esacexit 0Save the file and make it executable:
sudo chmod 755 /etc/rc2.d/S10oracle-mountAdditional Adjustments
Please, create the following directories/files
sudo mkdir /var/lock/subsyssudo touch /var/lock/subsys/listenerPackage Installation and init
Now we are ready to start the installation of the generated oracle-xe_11.2.0-2_amd64.deb with the following commands:
cd ~/Downloads/Disk1sudo dpkg -i oracle-xe_11.2.0-2_amd64.debThe system will show you the following output:
Selecting previously unselected package oracle-xe.(Reading database ... 373958 files and directories currently installed.)Preparing to unpack oracle-xe_11.2.0-2_amd64.deb ...Unpacking oracle-xe (11.2.0-2) ...Setting up oracle-xe (11.2.0-2) ...Executing post-install steps... Adding system startup for /etc/init.d/oracle-xe ... /etc/rc0.d/K01oracle-xe -> ../init.d/oracle-xe /etc/rc1.d/K01oracle-xe -> ../init.d/oracle-xe /etc/rc6.d/K01oracle-xe -> ../init.d/oracle-xe /etc/rc2.d/S80oracle-xe -> ../init.d/oracle-xe /etc/rc3.d/S80oracle-xe -> ../init.d/oracle-xe /etc/rc4.d/S80oracle-xe -> ../init.d/oracle-xe /etc/rc5.d/S80oracle-xe -> ../init.d/oracle-xeYou must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.
Processing triggers for ureadahead (0.100.0-16) ...ureadahead will be reprofiled on next rebootProcessing triggers for gnome-menus (3.10.1-0ubuntu2) ...Processing triggers for desktop-file-utils (0.22-1ubuntu1) ...Processing triggers for bamfdaemon (0.5.1+14.04.20140409-0ubuntu1) ...Rebuilding /usr/share/applications/bamf-2.index...Processing triggers for mime-support (3.54ubuntu1) ...Processing triggers for libc-bin (2.19-0ubuntu6) ...The installation routine prompts you to run the following command to initiate/configure the database:
sudo /etc/init.d/oracle-xe configureYou can confirm all default port settings. In so far as the database is only for demonstration purposes I do not want to start it automatically on system startup. I answered the last question with N.
System Variables
Everyone who worked with Oracle products knows that Oracle uses a set of system/environment variables in order to configure or reference their software products. It is recommended to set the system variables for the user session. Since I do not want to configure these variables separately for all users who may work with my machine, I want to define them on system level and make them accessible for everyone.
The example defines Oracle environment variables for all users at system level.
We edit /etc/environment with sudo gedit /etc/environment and replace its content with the following lines:
/etc/environment restrictionsVariable expansion is not supported in /etc/environment.
Although, many developers uses the /etc/bash.bashrc I decided not to use this but the more appropriated /etc/environment. The reason for this decision was that variables defined in the bash.bashrc are only visible to programs started by shell. This seems to be a restriction I do not want to accept.
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/ local/games"
# .. oracle binaries added to the PATH!PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/u01/app/oracle/product/11.2.0/xe/bin"
ORACLE_HOME=/u01/app/oracle/product/11.2.0/xeORACLE_SID=XEORACLE_BASE=/u01/app/oracleLD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/xe/libSave the adjusted /etc/environment and close gedit.
/etc/environment is read automatically during desktop startup. The variables will not be available in the current session immediately after editing the file.
To solve this issue we must reboot to load our environment definitions. You can check if the system variables are present after reboot:
$ printenv | grep ORACLEORACLE_SID=XEORACLE_BASE=/u01/app/oracleORACLE_HOME=/u01/app/oracle/product/11.2.0/xeNow, we should have everything in place. The installation is completed!
Testing the Database
Lets see if we can start and connect to the database. We can start the database with:
sudo service oracle-xe startStarting Oracle Net Listener.Starting Oracle Database 11g Express Edition instance.Now lets try to login with the SYS and our entered password during configuration phase.
adam@adam-desktop:~$ sqlplus
SQL*Plus: Release 11.2.0.2.0 Production on Wed Jul 30 17:30:30 2014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter user-name: systemEnter password:
Connected to:Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit ProductionNow we can try to query a standard table of the database:
SQL> select * from v$version;
BANNER-----------------------------------------------------------------------------Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit ProductionPL/SQL Release 11.2.0.2.0 - ProductionCORE 11.2.0.2.0 ProductionTNS for Linux: Version 11.2.0.2.0 - ProductionNLSRTL Version 11.2.0.2.0 - ProductionWhen you get an output you have got a working Oracle Express database on your system. Congratulation!
Do not forget to start the database manually after reboot. It will not start automatically with system boot.