Saturday, January 5, 2013

Install Oracle 11g R2 on Ubuntu 12.04 64 bit

Downloading Oracle 11g 64 bits for Linux

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.

Preparing the system

We will have to:
  • Create required users and groups accounts
  • Set required system parameters in /etc/sysctl.conf
  • Installing complementary packages

Creating system accounts

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

Updating kernel parameters

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:

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

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 

Installing additional packages

If not already done, update your distribution with the latest packages:
 sudo apt-get update
 
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
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 

Preventing from installation errors

  • 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 

  • To prevent from # /lib64/libgcc_s.so.1: File or directory does not exists, while creating lib/liborasdkbase.so.11.1 in ins_rdbms.mk, execute the command:
cd /lib64
sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 .

Now reboot your system to be sure these parameters will be taken in account for the next part of the installation.

Others configurations

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

Installing Oracle

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.

Once you will reach the "pre-reqs" screen, check "Ignore all" to continue the installation.


Then, you will encounter some issues here-

Solving compilation/link errors


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/app/oracle/product/11.2.0/dbhome_1
cd $ORACLE_HOME/lib
ln -s libclient11.a libagtsh.a

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/app/oracle/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

Finishing the installation

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/app/oracle/product/11.2.0/dbhome_1/root.sh 
 
You should be able to access database web interface through the URL https://localhost:1158/em

Before that, need to run the dbconsole from terminal-
#emctl start dbconsole

Now, add the following variable declaration in your oracle user .profile, .bashrc or .bash_profile scripts:
export ORACLE_HOME=/opt/oracle/app/oracle/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