This is all 32 bit, no 64 bit software will be covered here.
To get Oracle 10g in 2013 requires a support account of course. Only 11g is available now. Basically I needed Oracle 10 because its still quite heavily used in global business circles. My security testing software may run into Oracle 10 (in fact, already has several times).
After some considerable problems with library linking related failures with Oracle 10g and Ubuntu 12 (12.04.2), I decided to just save time by backdating and using more compatible libraries. The install with Ubuntu 10.04.4 Lucid Lynx. The install with this older version (this is only for dev work, trust me i wouldn’t dream of using this in production) went like a dream.
Java
Note that many install guides insist on installing Oracle’s Java or some other JVM. I found that this was not necessary.
Other Libraries
and then libstdc++5 will be required. I found it here eventually…
http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.6-17ubuntu1_i386.deb
and then …
dpkg -i libstdc++5_3.3.6-17ubuntu1_i386.deb
This process installs the library in the right place (at least where the installer for Oracle looks).
Users and Groups
sudo group add oinstall
sudo group add dba
sudo group add nobody
sudo user add -m oracle -g oinstall -G dba
sudo passwd oracle
Kernel Parameters
In /etc/sysctl.conf …
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
Reload to take effect…
root@vm-ubuntu-11:~# /sbin/sysctl -p
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
Change Limits
vi /etc/security/limits.conf
Add the following …
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
Change The System In A Suse Kinda Way
(Ubuntu isn’t a supported distro for Oracle DB and some subtle changes are needed)
sudo ln -s /usr/bin/awk /bin/awk
sudo ln -s /usr/bin/rpm /bin/rpm
sudoln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
sudo ln -s /usr/bin/basename /bin/basename
Oracle Base Directory
I went with more typical Oracle style directories here for some reason, but you can choose what’s best for you, as long as the ownership is set correctly (watch this space)…
sudo mkdir -p /u01/oracle
sudo chown -R oracle:oinstall /u01
sudo chmod -R 770 /u01
Update default profile
vi /etc/profile
Add the following …
export ORACLE_BASE=/u01/oracle
export ORACLE_HOME=/u01/oracle/product/10.2.0/db_1
export ORACLE_SID=orcl10
export PATH=$PATH:$ORACLE_HOME/bin
Convince Oracle that Ubuntu is Redhat
sudo vi /etc/redhat-release
Add this …
“Red Hat Enterprise Linux AS release 3 (Taroon)”
Run The Installer
The zip file from Oracle – you will have unzipped it, it can be anywhere on the system, lets say /opt.
So after unzipping you will see a /opt/database directory.
chown -R oracle:install /opt/database
Then what’s needed? Start up an X environment (su to Oracle and startx), open a Terminal and…
/opt/database/runInstaller
Installer Options
Do not select the “create starter database” here and selection of Enterprise Edition worked for me, with the Installation Type option.
The installer will ask you run 2 scripts as root. Its is wise to follow this advisory.
The install proceeded fast. I only had one error related to the RDBMS compliation (“Error in invoking target ‘all_no_orcl ihsodbc’ of makefile ‘/u01/oracle/product/10.2.0/db_1/rdbms/lib/ins_rdbms.mk'”), but this was because I had not installed the libstdc++5
Create a Listener
So what you have now is a database engine but with no database to serve, and no Listener to process client connections to said database.
Again. within the Oracle owned X environment…
netca
and default options will work here, just to get a database working. netca is in $ORACLE_HOME/bin and therefore in the shell $PATH. Easy.
Create A Database
First up you need to find the GID for the oinstall group you created earlier…
cat /etc/group | grep oinstall
In my case it was 1001.
As root (UID=0) hose this into the /proc hugetlb_shm_group thus…
echo "
Again, as oracle user, do this…
dbca
…and again, default options will work in most cases here.
The database name should match the ORACLE_SID environment variable you specified earlier.
Database Service Control
The install script created a oratab file under /etc.
It may look something similar to…
root@ubuntu:~# cat /etc/oratab
....[comments]
orcl10:/u01/oracle/product/10.2.0/db_1:Y
The last part of the stanza (the “Y”) implies “yes” please start this SID on system start. This is your choice of course.
dbstart is a shell script under $ORACLE_HOME/bin. One line needs to be changed here in most cases…this is a basic substitution of your $ORACLE_HOME in place of the “/ade/vikrkuma_new/oracle” in the line after the comment “Set this to bring up Oracle Net Listener”: “ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle”
# Set this to bring up Oracle Net Listener
ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
if [ ! $ORACLE_HOME_LISTNER ] ; then
echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener"
else
LOG=$ORACLE_HOME_LISTNER/listener.log
And that should be sufficient to just get a database up and running.
To shutdown the database, Oracle provides $ORACLE_HOME/bin/dbshut and this won’t require any editing.
“service” Control Under Linux
Personally I like to be able to control the Oracle database service with service binary as in:
service oracle start
and
service oracle stop
The script here to go under /etc/init.d was the same as my script for Oracle Database 11g…
root@ubuntu:~# cat /etc/init.d/oracle
#!/bin/bash
#
# Run-level Startup script for the Oracle Instance and Listener
#
### BEGIN INIT INFO
# Provides: Oracle
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Startup/Shutdown Oracle listener and instance
### END INIT INFO
ORA_HOME="/u01/oracle/product/10.2.0/db_1"
ORA_OWNR="oracle"
# if the executables do not exist -- display error
if [ ! -f $ORA_HOME/bin/dbstart -o ! -d $ORA_HOME ]
then
echo "Oracle startup: cannot start"
exit 1
fi
# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display
case "$1" in
start)
# Oracle listener and instance startup
echo -n "Starting Oracle: "
su - $ORA_OWNR -c "$ORA_HOME/bin/dbstart $ORA_HOME"
su - $ORA_OWNR -c "$ORA_HOME/bin/lsnrctl start"
#Optional : for Enterprise Manager software only
su - $ORA_OWNR -c "$ORA_HOME/bin/emctl start dbconsole"
touch /var/lock/oracle
echo "OK"
;;
stop)
# Oracle listener and instance shutdown
echo -n "Shutdown Oracle: "
#Optional : for Enterprise Manager software only
su - $ORA_OWNR -c "$ORA_HOME/bin/emctl stop dbconsole"
su - $ORA_OWNR -c "$ORA_HOME/bin/lsnrctl stop"
su - $ORA_OWNR -c "$ORA_HOME/bin/dbshut $ORA_HOME"
rm -f /var/lock/oracle
echo "OK"
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 start|stop|restart|reload"
exit 1
esac
exit 0
Most likely the only change required will be the ORA_HOME setting which obviously is your $ORACLE_HOME.
Quick Test
So after all this, how do we know our database is up and running?
Try a local test…as Oracle user…
sqlplus / as sysdba
This should drop you into the antiquated text based app and look something like…
oracle@ubuntu:~$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jun 21 07:57:43 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
Credits
This post is based to some extent the following two posts:
http://www.excession.org.uk/blog/installing-oracle-on-ubuntu-karmic-64-bit.html
and
http://sqlandplsql.com/2011/12/02/installing-oracle-11g-on-ubuntu/
Some parts of these posts didn’t work for me (I had lots of linking errors), but nonetheless thanks go out to the authors of those blogs.