Since release 11.10 it is more difficult to install Oracle 64bits on Ubuntu.
If you need to run Oracle on a production environment, please install a supported Linux distribution.
So why installing Oracle on Ubuntu ?
Clearly, Oracle should officially support ubuntu linux !
Since version 11.10 of Ubuntu, installing Oracle as become much more complicated than already described in this previous Oracle installation guide on Ubunto 64bits how to.
This is due to, at least, the following points:
This how to is based on the following two others and many others contributions:
So, why writing my own ?
Because they were not so easy to found, and I had started my own article before solving all the encountered issues.
Because they do not all describe or explain all errors I've encoutered and because I suggest others solutions to solve parts of encoutered as for /dev/shm.
First, download Oracle 11gR2 Enterprise/Standard Edition for Linux x86-64 from Oracle website.
Then extract the downloaded file:
unzip linux.x64_11gR2_database_1of2.zip unzip linux.x64_11gR2_database_2of2.zip
A new folder named database will be extracted.
Second, read the HTML documentation of the quick install guide you can found in the extracted folder at this place: database/doc/install.112/e10860/toc.htm
For the rest of this howto, we suppose Oracle will be installed at /opt/oracle Root directory in a freshly newly installed Linux Ubuntu distribution.
We will have to:
Creating Oracle Inventory group:
sudo groupadd oinstall
Creating Oracle DBA group:
sudo groupadd dba
Creating Oracle user home and account:
sudo mkdir -p /opt/oracle sudo useradd -g oinstall -G dba -d /opt/oracle -s /bin/bash oracle sudo passwd oracle sudo chown -R oracle:oinstall /opt/oracle
For Oracle 10g, it was required to add nobody user group, this is no more required with 11g as it is no more described in 11g quick installation guide.
This is one of the longest task of this installation. Because you will have to check your current config.
Check commands in Oracle documentation for this, section 6 Configuring Kernel Parameters.
Then, edit the file /etc/sysctl.conf as described below:
sudo gedit /etc/sysctl.conf
Add the following lines to get minimal values required by Oracle, adjusting if required, depending of your configuration:
# # Oracle 11g # kernel.sem = 250 32000 100 128 kernel.shmall = 2097152 kernel.shmmni = 4096 # Replace kernel.shmmax with the half of your memory in bytes # if lower than 4Go minus 1 # 1073741824 is 1 GigaBytes kernel.shmmax=1073741824 # Try sysctl -a | grep ip_local_port_range to get real values net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 # Max value allowed, should be set to avoid IO errors fs.aio-max-nr = 1048576 # 512 * PROCESSES / what really means processes ? fs.file-max = 6815744 # To allow dba to allocate hugetlbfs pages # 1001 is your oinstall group, id. grep oinstall /etc/group will give this value vm.hugetlb_shm_group = 1001
About HUGE TLB.
Since Ubuntu Karmic (it was not required on Ubuntu Jaunty) kernel parameters have changed and this was required for 10g.
Without these parameters your Oracle instance won't be able to create shared memory segment and will refuse to start.
Not tested on Ubuntu 12.04 but this is now described in 11g documentation.
You have to replace the value of 1001 with the group ID of the oinstall group.
Read this great howto install Oracle on debian to know more about huge tlb parameter.
Then, run the command below to set these kernel parameters:
sudo sysctl -p
Now, update /etc/security/limits.conf:
sudo gedit /etc/security/limits.conf
And add the following parameters:
# Oracle oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240
Check that /etc/pam.d/login contains a line like this one:
session required pam_limits.so
Now, update /etc/profile:
sudo gedit /etc/profile
And add the following lines:
if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi
If not already done, update your distribution with the latest packages:
sudo apt-get update sudo apt-get dist-upgrade
Install the following additional packages:
sudo apt-get install alien sudo apt-get install autoconf sudo apt-get install automake sudo apt-get install autotools-dev sudo apt-get install binutils sudo apt-get install bzip2 sudo apt-get install doxygen sudo apt-get install elfutils sudo apt-get install expat sudo apt-get install gawk sudo apt-get install gcc sudo apt-get install gcc-multilib sudo apt-get install g++-multilib # This will help preventing prevent from runInstaller terrific ./runInstaller: line 54: ./install/.oui: No such file or directory error message sudo apt-get install ia32-libs sudo apt-get install ksh sudo apt-get install less sudo apt-get install lesstif2 sudo apt-get install lesstif2-dev sudo apt-get install lib32z1 sudo apt-get install libaio1 sudo apt-get install libaio-dev sudo apt-get install libc6-dev sudo apt-get install libc6-dev-i386 sudo apt-get install libc6-i386 sudo apt-get install libelf-dev sudo apt-get install libltdl-dev sudo apt-get install libmotif4 sudo apt-get install libodbcinstq4-1 libodbcinstq4-1:i386 sudo apt-get install libpth-dev sudo apt-get install libpthread-stubs0 sudo apt-get install libpthread-stubs0-dev sudo apt-get install libstdc++5 sudo apt-get install lsb-cxx sudo apt-get install make sudo apt-get install openssh-server sudo apt-get install pdksh sudo apt-get install rlwrap sudo apt-get install rpm sudo apt-get install sysstat sudo apt-get install unixodbc sudo apt-get install unixodbc-dev sudo apt-get install unzip sudo apt-get install x11-utils sudo apt-get install zlibc
To prevent from error genclntsh: Failed to link libclntsh.so.11.1 in make file for rdbms/lib/ins_rdbms.mk
beacause of missing library: /usr/bin/ld: cannot find /usr/lib64/libpthread_nonshared.a inside
we need to create a symlink for /usr/lib64:
sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
To help preventing from error lib//libagtsh.so: undefined reference to `nnfyboot' in make: rdbms/lib/dg4odbc] Error 1
sudo ln -sf /bin/bash /bin/sh sudo ln -s /usr/bin/awk /bin/awk sudo ln -s /usr/bin/rpm /bin/rpm sudo ln -s /usr/bin/basename /bin/basename
cd /lib64 sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 .
Oracle 11g also needs libstdc++5 in 32bits version that is not provided with Ubuntu Pangolin.
There are many ways to install it, I have followed this howto to install libstdc++5 on Ubuntu Karmic Below is the summary of this HOWTO:
mkdir /tmp/libstdc++5 cd /tmp/libstdc++5 wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.... wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.... sudo dpkg --force-architecture -i libstdc++5_3.3.6-17ubuntu1_i386.deb sudo mv /usr/lib/libstdc++.so.5* /usr/lib32/ sudo dpkg -i libstdc++5_3.3.6-17ubuntu1_amd64.deb
Now reboot your system to be sure these parameters will be taken in account for the next part of the installation.
Connect as Oracle user and set some default startup file
sudo su - oracle cd touch .bashrc ln -s .bashrc .bash_profile
Edit .bashrc file:
vi .bashrc
And add the following line:
umask 022
Execute the .bashrc file or restart a bash shell
source .bashrc
Now we can start the installation of the Oracle 10g archive.
Allow others users to connect to your X session, by entering in a bash shell:
xhost +
Then, login as oracle user:
su - oracle
Go in the extracted database folder and run the following commands:
export DISPLAY=:0 ./runInstaller
Then, Oracle installer should start in graphic mode.
For the rest of the installation, we suppose you will choose the following options:
Once you will reach the "pre-reqs" screen, check "Ignore all" to continue the installation.
Then, you will encounter issues.
Some issues should appear during installation.
If you have not created the symbolic links above, you will have to solve error lib//libagtsh.so: undefined reference to `nnfyboot' in make: rdbms/lib/dg4odbc] Error 1. For this, create the symbolic links and execute the commands:
export ORACLE_HOME=/opt/oracle/Oracle11gee/product/11.2.0/dbhome_1 cd $ORACLE_HOME/lib ln -s libclient11.a libagtsh.a $ORACLE_HOME/bin/genagtsh $ORACLE_HOME/lib/libagtsh.so 1.0
Now we will encounter many errors due to indirect library linking:
To solve error # libnnz11.so: could not read symbols: Invalid operation /sysman/lib/ins_emagent.mk, enter the command:
export ORACLE_HOME=/opt/oracle/Oracle11gee/product/11.2.0/dbhome_1 sed -i 's/^\(\s*\$(MK_EMAGENT_NMECTL)\)\s*$/\1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk
To solve error # nsglsn.c:(.text+0xc29): undefined reference to `ons_subscriber_close' /network/lib/ins_net_server.mk, enter the command:
sed -i 's/^\(TNSLSNR_LINKLINE.*\$(TNSLSNR_OFILES)\) \(\$(LINKTTLIBS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/network/lib/env_network.mk
To solve error # libocrutl11.so: undefined reference to `lfifcp' rdbms/lib/ins_rdbms.mk, enter the commands:
sed -i 's/^\(ORACLE_LINKLINE.*\$(ORACLE_LINKER)\) \(\$(PL_FLAGS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
You also need to execute the following commands to prevent from later errors:
sed -i 's/^\(\$LD \$LD_RUNTIME\) \(\$LD_OPT\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/bin/genorasdksh sed -i 's/^\(\s*\)\(\$(OCRLIBS_DEFAULT)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/srvm/lib/ins_srvm.mk
The install process will finally ask you to execute scripts as root user, just do so:
# sudo /opt/oracle/oraInventory/orainstRoot.sh sudo /opt/oracle/Oracle11gee/product/11.2.0/dbhome_1/root.sh
You should be able to access database web interface through the URL https://localhost:1158/em
Now, add the following variable declaration in your oracle user .profile, .bashrc or .bash_profile scripts:
export ORACLE_HOME=/opt/oracle/Oracle11gee/product/11.2.0/dbhome_1 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib export PATH=$PATH:$ORACLE_HOME/bin
Then start a new shell or execute one of the updated files:
source .bashrc
We should now be able to start Oracle database if you had choosed to create one during installation.
If you have not yet created any oracle instance and database use the $ORACLE_HOME/bin/dbca assistant to do so.
Starting up the database
Once your server have been restarted, your database may not start. To solve this issue, first check in /etc/oratab that it has the 'Y' flag, if not, set it.
sudo gedit /etc/oratab
And replace N by Y
orcl:/opt/oracle/Oracle11gee/product/11.2.0/dbhome_1:Y
Finally, to manually start Oracle, run these commands as oracle user
dbstart $ORACLE_HOME
Now, just try to connect to the freshly started database:
oracle@makina-oracle:~$ sqlplus system@orclSQL*Plus: Release 11.2.0.1.0 Production on Wed Aug 8 11:18:50 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select 'Oracle 11gee is running on Ubuntu 12.04 64 bits' as Welcome from dual;
WELCOME
-----------------------------------------------
Oracle 11gee is running on Ubuntu 12.04 64 bits
SQL>
Just entry the following commands with Oracle user:
dbshut $ORACLE_HOME
Excellent tutorial
Excellent!
i) Instructions regarding "Oracle 11g also needs libstdc++5 in 32bits version that is not provided with Ubuntu Pangolin." were not necessary.
ii) ulimit erros can be avoided if ssh is used to access oracle remote account (and making sure that UsePAM is set to yes in /etc/ssh/sshd_config
Thank you so much for sharing.
Regards,
Jorge Rocha
Portugal
Thanks for this comment
I had seen the errors on ulimit but never have taken the time to investigate it.
Indeed, 32bits libs seems not necessary with 12.04.
This is a backport from 11.10 howto not checked for in 12.04.
error before installation
last step before installation I get following error:-
export DISPLAY:=0
-su: export: 'DISPLAY:=0' : nor a valid identifier
Hello , First of all I want
Hello ,
First of all I want to thank you for this usefull article ... It 100% works
Second I wanna ask you If you can help me installing oracle forms and reports on ubuntu 12
I need your reply please.
And once again thanks a lot :)
Bob Keyrouz
Best Regards.
Yes, I will be pleased to try for you...
You can contact me at gael.pegliasco AT makina-corpus.com
Best regards,
Gaël,
Setting DISPLAY variable.
You will be able to find the correctly value that you can use to set DISPLAY using the following command: ps aux | grep X
export DISPLAY
Hi,
You may be using CSH or KSH shell.
export DISPLAY=:0 works for bash shell.
You may need to use this syntax: DISPLAY=localhost:0.0 ; export DISPLAY
See http://ubuntuforums.org/archive/index.php/t-1151324.html
Also, this command "export DISPLAY=:0" is not really required.
It depends of your server configuration and used user.
If the user you are using to do the installation is not the one connected to the X session, it may be required, depending of your X session configuration.
Else it is not required and you can launch ./runInstaller without being worried.
In fact it allows to display on your screen applications executed by others users.