Install Oracle XE 11g R2 on Ubuntu 12.04

I’ve recently had a task of enabling Oracle database support for a JRuby on Rails application. To set up an Oracle database for use on a development environment, there were two preferred options – using Oracle DB on a virtual machine or installing Oracle XE locally.

1. Oracle DB on a virtual machine
Oracle kindly provide several VirtualBox images for download – I used the Database App Development VM, which comes with Enterprise Edition and SQL Developer, and it’s straightforward to get this running. The only catch is to enable a second network adapter (either Bridged or Host-only) in the VirtualBox settings so the VM is externally addressable. From there, keep in mind the the instance name is orcl, and sys and system passwords are oracle.

2. Installing Oracle XE locally
Oracle XE is officially supported on Windows and Red Hat Linux-based systems (the Developer Days VMs are Oracle Linux). Debian Linux-based systems don’t seem to be officially supported, but there have been efforts on installing Oracle XE on Ubuntu (my particular interest). I primarily followed Manish’s guide for the majority of the install process, but had to bring forward the step of setting environment variables. This is because Oracle XE starts immediately after the configuration step (oracle-xe configure). I also referred to another blog for guidance on setting kernel parameters. Here are my modified installation steps:

Download Oracle Database Express Edition 11g R2

Unzip archive:

unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip

Install the required packages (note I omitted unixodbc as I didn’t require it):

sudo apt-get install alien libaio1

Convert the RPM package to a DEB package:

cd Disk1
sudo alien --scripts oracle-xe-11.2.0-1.0.x86_64.rpm

Create a /sbin/chkconfig file with the following contents (requires root):

#!/bin/bash
# Oracle 11gR2 XE installer chkconfig hack for Ubuntu
file=/etc/init.d/oracle-xe
if [[ ! `tail -n1 $file | grep INIT` ]]; then
echo >> $file
echo '### BEGIN INIT INFO' >> $file
echo '# Provides: OracleXE' >> $file
echo '# Required-Start: $remote_fs $syslog' >> $file
echo '# Required-Stop: $remote_fs $syslog' >> $file
echo '# Default-Start: 2 3 4 5' >> $file
echo '# Default-Stop: 0 1 6' >> $file
echo '# Short-Description: Oracle 11g Express Edition' >> $file
echo '### END INIT INFO' >> $file
fi
update-rc.d oracle-xe defaults 80 01

Set execute privileges for the file:

sudo chmod 755 /sbin/chkconfig

Create a /etc/sysctl.d/60-oracle.conf file with the following contents (requires root):

# Oracle 11g XE kernel parameters
fs.file-max=6815744
kernel.sem=250 32000 100 128
kernel.shmmax=1073741824
net.ipv4.ip_local_port_range=9000 65000

Load the new kernel parameters:

sudo service procps start

Run the following commands:

sudo ln -s /usr/bin/awk /bin/awk
sudo mkdir /var/lock/subsys
sudo touch /var/lock/subsys/listener

To avoid MEMORY_TARGET errors:

sudo rm -rf /dev/shm
sudo mkdir /dev/shm
sudo mount -t tmpfs shmfs -o size=2048m /dev/shm

Create a /etc/rc2.d/S01shm_load file with the following contents (requires root):

#!/bin/sh
case "$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 ;;
*) echo error
   exit 1 ;;
esac

Set execute privileges for the file:

sudo chmod 755 /etc/rc2.d/S01shm_load

Install the Oracle XE package:

sudo dpkg --install oracle-xe_11.2.0-2_amd64.deb

Add the following environment variables to .bashrc:

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
export ORACLE_SID=XE
export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
export ORACLE_BASE=/u01/app/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH

Reload the bash profile:

source ~/.bashrc

Run the Oracle XE configuration:

sudo /etc/init.d/oracle-xe configure

Oracle XE should now be installed.

If anything goes wrong during installation, to uninstall:

sudo -s
/etc/init.d/oracle-xe stop
ps -ef | grep oracle | grep -v grep | awk '{print $2}' | xargs kill
dpkg --purge oracle-xe
rm -r /u01
rm /etc/default/oracle-xe
update-rc.d -f oracle-xe remove

I’ve used these instructions on two Ubuntu environments (my own VM and an Amazon EC2 instance) and Oracle XE is running happily.


Posted

in

by

Comments

11 responses to “Install Oracle XE 11g R2 on Ubuntu 12.04”

  1. Crischan Avatar
    Crischan

    On a freshly installed Ubuntu 12.04 I needed to install libaio1, otherwise the DB would not start.
    Starting would just say it couldn’t but
    /etc/init.d/oracle-xe status
    exposed the missing library.

    Thanks for the guide!

  2. javier Avatar
    javier

    Gracias!! thxs!!

  3. Raga Pinilih Avatar
    Raga Pinilih

    Very helpful…. Thank you…

  4. AlexHenke Avatar
    AlexHenke

    Thank You for yuor post!!!
    I was looking for this information for a long time

    Thanks a lot!

  5. Rodrigo Carmona Avatar

    Thanks for the post, i owe you a beer whenever you stop in Chile.
    Or a “Mote con Huesillos”, your choice.

    Greets

  6. Hassan Avatar
    Hassan

    Your article actually helped me alot, many thanks :)

  7. Pete Carlisle Avatar
    Pete Carlisle

    Thanks Avin. Simple straightforward instructions… and best of all… they work! God bless you!
    Pete

  8. Hasan Yousef Avatar
    Hasan Yousef

    Dear,
    I got this error:
    “mkdir: cannot create directory `oracle-xe-11.2.0′: File exists
    unable to mkdir oracle-xe-11.2.0: at /usr/share/perl5/Alien/Package.pm line 257”

    Can you help.

    Thanks

  9. Allan Avatar
    Allan

    Thanks man!

    That is great article! I have been trying to do this for weeks! Thanks a lot!

  10. […] Install Oracle XE 11g R2 on Ubuntu 12.04 […]

Leave a Reply

Your email address will not be published. Required fields are marked *