<!doctype linuxdoc system>

<article>

<title>Oracle 8i for Linux Installation HOWTO
<author>Stephen Darlington, <tt>&lt;stephen at zx81 dot org dot uk&gt;</tt>
<date>v1.18, 19 July 2003

<abstract>
With this HOWTO, and a little luck, you will be able to get "Oracle 8i
Enterprise Edition for Linux" installed, create a database and connect
to it from a remote machine. The main focus of this guide is RedHat
Linux 6.0 and Oracle 8.1.5, although it should work well for other
recent distributions and more stable versions of Oracle.
</abstract>

<toc>

<sect>Introduction

<sect1>What's in here?
<p>
Linux is well known for being difficult and, generally, user
hostile. Being a bit of a Unix fan I'm not sure whether I agree with
that or not.

Oracle is similar I guess. Initially it's difficult to get to grips
with, but it's difficult to work with any other RDBMS when you're used
to it.

Combine the two, remember that 8i is only the second production
release, and you realise that this isn't going to be straight-forward,
even if you're familiar with both.

I am, but I had problems. Many problems were my own stupidity or
hubris, but I document them for completeness.

<sect1>Who is this HOWTO for?
<p>
Fundamentally this document is about installing Oracle 8i Version
8.1.5.0.0 on RedHat Linux 6.0, and any deviation from this
configuration may reduce your chances of success. (I originally tried
to write this guide for all types of Linux and all recent version of
Oracle, but the structure was unclear and it was less useful for just
about everyone.)

For later versions of Oracle, including 9i, you have two options. I
have some errata on <url
url="http://www.zx81.org.uk/computing/oracle/oracle-howto/" name="my
website">. You'll find that the process is very similar to that found
in this document although there are some 'gotchas' for each
version. Generally speaking, newer version of Oracle are much easier
to install than 8.1.5 and are recommended over it by just about
everyone, including Oracle themselves.

Or if you prefer there are also a number of other, more specific
guides at the Linux Documentation Project (in fact there seems to be a
new one there every time I check back!). If you're installing 8i on
RedHat 7.x, <url
url="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Oracle8-on-RH7X-HOWTO.html"
name="Krastio Atanassov and Luca Roversi's"> HOWTO might be useful. For
installing Oracle 9i on RedHat 8 or above, <url
url="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Oracle-9i-RH8-and-RH9-HOWTO.html"
name="Evgueni Tzvetanov's"> guide could well do the trick.

For different distributions of Linux chances of success are also good,
especially if they are RedHat-like, Mandrake for example. Again, my
web site may contain advice for certain troublesome distributions.

If you want to install 8.0, I recommend you try <url name="Linux
Journals guide"
url="http://www2.linuxjournal.com/lj-issues/issue67/3572.html">, and
if you want to install any of the previous versions you're going to
have to use the SCO version and follow Paul Haigh's <url name="Oracle
Database HOWTO"
url="http://www.tldp.org/HOWTO/Oracle-7-HOWTO.html">.

If you're trying to install the 'right' version, what level of
background knowledge will you need?

Perhaps the easiest way is if I explain a little of my background,
clearly if yours is similar we're going to be on the same
wave-length. I've used a lot of Unix and Oracle over the last few
years. At home I've been running Linux since 1994 and I've been using
Solaris and HP-UX on-and-off since 1992. I first came across Oracle in
1996 and have worked with versions 7, 8 and 8i. I'm mainly a
developer, but I have done DBA and sysadmin-type work.

In summary, I can find my way around a Unix box and I know much of the
Oracle terminology. You'll need both to brave the rest of this
document. But don't worry if you have a different background, follow
this guide closely and keep asking questions. The Linux community are
a helpful bunch, just don't expect an answer if you haven't at least
made an effort to solve the problem yourself.

<sect1>New versions of this document
<p>
Since RedHat Linux 6.x is no longer being supported and given that
there will be no new releases of Oracle 8i, you can probably assume
that this is the most up-to-date version of this document.

As discussed in the previous section, there are documents in <url
url="http://www.tldp.org" name="the LDP"> and extra sections on <url
url="http://www.zx81.org.uk/" name="my website"> that might help you
get more contemporary versions of Oracle installed on newer versions
on Linux.

<sect1>Disclaimer
<p>
You get what you pay for. I offer no warranty of any kind, implied or
otherwise.  I'll help you where I can but legally you're on your own.

<sect1>Credits and Thanks
<p>
This HOWTO has been written by Stephen Darlington. It couldn't have
been created without the constant stream of questions and answers on
the Oracle Technology Network website and the Usenet news-groups. So
thanks to the people that keep posting and sorry that I can't credit
you all individually!

Many people have emailed me directly with hints, updates and
corrections; this document would not be as useful as it is without
their contribution. So thanks go to the following people: Ton Haver,
Guy Cole, Iain Frerichs, Albert Braun, Steve Morando, Krill Kokoshka,
Brain Slesinsky, Galen G Burk, Bill Gathen and Veres Lajos.

I welcome any constructive feedback on this HOWTO and any general
Linux or Oracle issues. However, if you have questions it's probably
better that you ask on a newsgroup or the discussion forums on my
website where others can benefit from the solutions. Email me at <url
url="mailto:stephen at zx81 dot org dot uk" name="stephen at zx81 dot
org dot uk">.

<sect1>Licence
<p>
This document is copyright 1999-2003 Stephen Darlington. You may use,
disseminate and reproduce it freely, provided you:

<itemize>
<item>Do not omit or alter this copyright notice.
<item>Do not omit or alter the version number and date.
<item>Do not omit or alter the document's pointer to the current WWW
version.
<item>Clearly mark any condensed, altered or versions as such.
</itemize>

These restrictions are intended to protect potential readers from
stale or mangled versions. If you think you have a good case for an
exception, ask me.

(This copyright notice has been lifted from Eric Raymond's Distribution
HOWTO.)

You do not need to ask me if you'd like to provide a translation,
although notification would be appreciated.

<sect>Starting off

<sect1>Overview
<p>
In this section, we'll set up Linux so that you're in a position to
get Oracle 8i from the CD that they sent you into your hard-disk. (If
they didn't send you a disc and you're working from a tar-ball that
you downloaded from the Internet, don't worry. The installation
process is identical.)

The Oracle installation process begins when you've built your PC,
installed Linux, configured it and connected it to your network.

<sect1>Prerequisites
<sect2>Your brain
<p>
This may sound like a very silly prerequisite, but I do mean it
although not necessarily in the same way you might be thinking just
now. There are two main problems.

Firstly, both Oracle and Linux change very frequently. This is a good
thing in that bugs and security holes gets fixed quickly and there are
always new and exciting enhancements to play with and, with luck,
solve the problems we're actually paid to solve. The bad news is that
no matter how much effort I put into this document it'll never be
completely up to date.

The onus is, therefore, on you to engage brain. Sometime Oracle change
small things. The dialog used to say "OK" but now says "Okay", or the
screens are in a slightly different order, or... well, it could be any
number of things. There's no way I can keep up on all the changes like
that, just like there's no way that I can provided detailed guides for
every version of Oracle running on every possible Linux distribution.

Or it could be the big, complex things, like when RedHat Linux 7 first
came out with new C libraries and a slightly non-standard C
compiler. You could apply the first point here, applying your brain,
reading the release notes, the RedHat website and Oracle Technet but
you'd be spending more time than you need to be. The reason is problem
number two: the culture clash.

In the case of Linux, newer is better. People frequently upgrade their
OS to the latest and greatest and it's certainly not unusual to add or
upgrade individual packages to something more familiar or more
powerful. This is not how things are done in the world of
Oracle. Companies are still running Oracle 6, software that has been
available for more than ten years. (Oracle have not supported this for
quite some time, so this isn't terribly smart.) People here value
stability and change, so loved by many Linux die-hards, is the
complete antithesis of it.

The trick to applying this to installing Oracle 8i on your Linux box
is to read the release notes. If they recommend RedHat Linux 6, as
they did for Oracle 8i 8.1.5, this is the distribution that you should
use unless there's a <it/very/ good reason to do otherwise. The same
for any other requirements they state: their hardware and software
requirements have, to date, been pretty accurate.

<sect2>Hardware
<p>
I think that the most important part of the prerequisites is not to
underestimate them. Oracle is a very big and complex application and
you won't get the best out of it if you skimp too much on the
hardware.

My biggest mistake was to assume that Oracle were joking when they
said that you need 128Mb of RAM. I've installed Oracle a couple of
times on Sun servers with that much, why would I need more on a CISC
machine?

Believe Oracle not my gut. My machine with 32Mb of Ram ground on for
less than half an hour before I realised that it was hopeless.

I was trying to use the bare minimum of hardware, and that's generally
a bad idea. If you can't afford the hardware you certainly won't be
able to afford the licences!

Things to look for on a production server are many disks, possibly
RAIDed, and fast CPU's. Database access is relatively easy to break
down into smaller parallel phases so having a number of processors
really does help.

On the other hand, any machine that can run Linux and that has enough
memory should be in with a chance. My other machine, the one I used
for the rest of this document, is fine as a development machine. It is
a Celeron 466Mhz with 128Mb of memory, an 8Gb hard disk, an Intel
graphics card and a DM9102 network card.

<sect1>Linux setup

<sect2>Choice of distribution
<p>
Oracle seem to have done most of their development on RedHat Linux
6.0. For a fuss-free installation, using RedHat is an excellent
idea. Using version 6.2 with all the patches will be the easiest. For
RedHat Linux 7 and later refer to my website. Depending on how you've
installed your operating system there may be extra steps required.

I've heard horror stories about trying to get it installed on other
distributions. However, as a general rule, anything <it/like/ RedHat
should also do the trick. A recent version of Mandrake should be fine
and SuSE, in fact, are fairly active in supporting Oracle and have a
<url url="http://www.suse.com/us/solutions/partners/oracle/" name="web
page"> dedicated to the task.

The further you get from RedHat the more problems you can expect.

<sect2>Distribution Setup
<p>
Now that you've decided on which RedHat-like distribution you're going
to use, you'll need to work out which options to set and which of the
vast number of packages need to be installed to make Oracle work.

Firstly you need two to three times the amount of memory you have for
your swap space. (You'll need around 200Mb of memory, real or virtual,
just to run the installer!) Note that contrary to popular opinion,
Linux swap partitions can be larger than 128Mb.

The arrangements of your other partitions can also be important. Make
sure that the Oracle software is on a different partition to your
operating system, and make sure that the Oracle data-files are on yet
another partition.  The idea here is to make sure that your data-files
do not get fragmented. (In a live environment, you're likely to have a
number of disk with Oracle spread across them. There are a number of
good books that you consult for more information on this.) Also, make
sure you have <it/at least/ 400Mb free in <tt>/tmp</tt> and that it's
not on the root filesystem.

As for the software, I took the easy option and installed just about
everything. You certainly need all the 'base' packages, X Windows (the
installation routine is a Java GUI) and the development tools
regardless of whether you intend doing any coding or not. Compared to
the size of Oracle and your databases a Linux distribution is tiny,
probably less than a gigabyte. It's worth installing it all for an
easy life!

<sect2>Kernel parameters
<p>
The documentation suggests that you make changes to the Linux kernel
so you can get more shared memory. Since I was only planning on
running a very small database, I assumed everything would be okay and
decided to go ahead with the installation anyway. The default RedHat
Linux settings worked, although you may have to change them for a
larger development or production system.

Note that some people have had to recompile the kernel to get Oracle
to work at all. I guess it must depend on the other software that
you're running on the same machine.

Follow the instructions in the Oracle documentation (on the
installation CD in HTML format) and the <url name="Linux Kernel HOWTO"
url="http://www.tldp.org/HOWTO/Kernel-HOWTO.html"> to build your
new kernel.

<sect2>Users and groups
<p>
Using LinuxConf (or whatever other method you feel comfortable with),
you need to add a new group called "dba" and a new user called
"oracle", which should belong to your newly created "dba" group.

You can make any other user a DBA by putting them in the DBA group. If
you have several DBA's this is probably a good idea for auditing
purposes.

<sect2>Installing the right Java Virtual Machine
<p>
Oracle were obviously stung by Java on their first release. All full
release of 8i since 8.1.6 have included their own virtual machine so
you don't need to get your own. In fact, make sure that you remove any
reference to Java you currently have (you don't need to delete it,
just remove it from your PATH and make sure that no other variable,
such as JAVA_HOME or CLASSPATH, are set). The installer is
temperamental enough without adding more variables.

If you're installing 8.1.5, read on:

If you check the official documentation, you'll find that Oracle
recommend the Blackdown Java Runtime Environment version 1.1.6v5.
That's what they mean. Don't think 'newer versions will be less buggy'
as the installer probably won't work. And don't think, 'I'll be
developing software so I'll just get the JDK,' as that won't work
either.

There is one caveat to using this version of the JRE: the Oracle
installer seems to be hard-coded to expect the JRE executable to be at
<tt>/usr/local/jre/bin/jre</tt>. While this is inconvenient, it does
not mean that you have to install it there.

I performed the following steps to get a working copy of the JRE:

<enum>
<item>Download the Java Runtime Environment from the <url
name="Blackdown website" url="http://www.blackdown.org">

<item>Move to where you want to install the JRE:

<verb>cd /usr/local</verb>

<item>Uncompress the archive:

<verb>bzip2 -d -c jre-1.1.6-v5-glibc-x86.tar.bz2 | tar xvf -</verb>

<item>Create a symbolic link between where Oracle thinks it is and
where it actually is: <verb>ln -s jre116_v5 jre</verb>

</enum>

<sect1>Starting off questions and answers

<sect2>Do I really need 128Mb RAM?
<p>
I would recommend that you do use 128Mb of RAM or more. I think it
would be difficult to get any serious work done with less.

However, if you disable the Java option and set all the shared memory
settings to be relatively small, there's no reason why it shouldn't
work. I've heard success stories with 64Mb. You're probably not going
to get away with 32Mb, though.

There is a caveat. You may only need half of what Oracle recommends to
run the thing, but to install it their number starts to make
sense. I've heard reports of the installer using 150Mb of memory and
I've seen it well over 120Mb myself. If you have 64Mb or less of
memory, make sure you have lots of swap space and patience.

An alternative if you absolutely can't add more memory: install Oracle
on another, bigger machine and copy across the <tt/$ORACLE_HOME/
directory. You'll need to make sure that you have all the same users
and groups (preferably with the same numeric codes) and take special
care with SUID executables like <tt>$ORACLE_HOME/bin/oracle</tt>.

<sect2>Does it work with Debian/SuSE/Mandrake/some other distribution?
<p>
Oracle specify the Linux kernel version 2.2 or above and GLIBC version
2.1 with any window manager. In theory, any distribution that meets
these requirements should work.

In practice, unless Oracle have certified you distribution they may
not support it and you may have more problems trying to complete the
installation. Unless you have a very good reason to do otherwise I
suggest you stick to RedHat Linux 6.x with all the patches you can get
hold of.

For the record, I've heard success stories will all those
distributions. Some, however, consistently cause problems, Slackware
being the main culprit.

<sect2>Does it work with GLIBC 2.2 distributions?
<p>
At the moment, RedHat Linux 7.x and other distributions based on GLIBC
2.2 are known to be fairly problematic. It is possible to make it
work, however. To avoid "clutter" in this document I've included the
details <url
url="http://www.zx81.org.uk/computing/oracle/oracle-howto/redhat7.html"
name="on my website">.

<sect2>Does it work with development kernels?
<p>
There's no obvious reason why it shouldn't work -- I used 2.3.19 for a
while because it supported my network card and the stable kernel at
the time didn't -- but unless there's a pressing need it's certainly
safest to stay well clear. I switched back to the stable series as
soon as the driver was included.

<sect2>Does it work with Linux 2.4?
<p>
The current stable kernel has a number of features and performance
improvements over the 2.2.x line that Oracle could benefit from. Can
you use it without risking disaster? The answer is definitely "yes."

Generally the kernel is upwardly compatible with 2.2.x and I've not
heard of any significant problems with any of the more recent 2.4
releases (although some of the early ones are almost certainly worth
avoiding).

<sect2>Does it work with Linux 2.5.x and 2.6?
<p>
At the time of writing, the 2.6 kernel is just enter its beta testing
phase, so the same advice as for previous development kernels applies
here too. Summary: no technical reason why you can't use them, but not
recommended especially in a live environment.

<sect2>Where do I get Oracle from?
<p>
Firstly, if you're brave, have a very fast Internet connection or
inexhaustible patience (and unmetered access) you can download it from
<url name="Oracle Technology Network"
url="http://otn.oracle.com/">. Beware: 8.1.5 is nearly 200Mb, and
8.1.7 is nearer 500Mb.

A better option is to get the CD. Oracle sometimes offer to send you a
free development CD when you join Technet. It's certainly worth
spending some time looking round their web site for
that. Alternatively, you can buy them from the Oracle Store for around
$40. It includes lots of other software too and comes on 15 discs.

<sect2>What if I just want to connect to an Oracle database?
<p>
If you have an Oracle database on another machine and just want to
connect to it from another Linux machine, the process is very similar
to that described here but with less of the complex stuff.

Oracle tend not to distribute an Oracle Client CD for anything other
than Windows. Instead you just use the same Oracle Enterprise CD and
select the "Oracle Client" or "Oracle Developer" (not to be confused
with the Oracle Developer product) when it asks what kind of
installation you want.

All the other advice, about using the correct version of Linux, the
Java distribution, etc, are all just as pertinent for the client
install as for the server, since the same installer is used.

<sect>The installer
<sect1>How?
<p>
Generally, following the documentation is a good idea. It's not that
bad and you'll get much better support from Oracle if you have. (I
ended up breaking things -- and knowing it would -- by following the
documentation for Oracle Applications. It was the only way to get
decent support.)

This document is going to give an overview, but you should still have
their documentation available.

<sect1>What do I tell the installation program?
<p>
As part of the installation Oracle will ask a number of
questions. Generally they're not too difficult but let's see what I
entered and why.

<enum>
<item>Many people make the mistake of following Oracle's documentation
and, therefore, fail at the first hurdle. Don't execute
<tt/runInstaller/ as it almost always fails. Instead move to
<tt>install/linux</tt> on the CD and run <tt/runIns.sh/ while logged
in as 'oracle'.

<item>It should show a title screen. Click 'Next.'

<item>It should ask you to enter the source directory of the
installation files ('jar' file) and your Oracle installation
directory. You should be able to leave the former alone. The Oracle
home directory is where you want to install the software. According to
the installation documentation is should be somewhere on
<tt>/u01</tt>, but I ignored that and put it in
<tt>/home/oracle</tt>. Oracles advice, in this respect, is usually
worth following. Click 'Next' when you've entered the details.

<item>Now it should ask you for the DBA group. This is the Unix group
you created in the last section and is probably 'dba'. Enter the
details and click 'Next.'

<item>This time it wants you to log in as 'root' and run
<tt>/tmp/OraInstall/orainstRoot.sh</tt>. Do as it says. (You may have
to run <tt/pdksh/ or <tt/bash/ in the 'Bourne compatibility mode' to
get it to complete successfully.) When you're done click 'Retry.'

<item>You're now given the option of what to install. Your best bet
here is 'Oracle Enterprise Edition,' as this includes just about
everything (table 3.1 in the Oracle documentation tells you exactly
what it installs).  Make sure the right radio button is selected and
click 'Next.'

<item>It should now allow you to choose what you install with much
finer granularity. Unless you're particularly constrained by disk
space or know exactly what you need, I'd recommend leaving it exactly
as it is and clicking 'Next.' The Universal Installer won't let you
make any silly choices so don't worry too much if you unselect
something. You can always add it back in later.

<item>For any products that you've asked it to install, the installer
will allow you to change where it puts them. Again, only if you have a
good reason to should you change it. Click 'Next' when you're done.

<item>It now goes away and installs all the pieces of software you
asked it to. This will probably take quite a while and will use far
more memory than is reasonable.

<item>It should ask you if you want to create a database. Select
'no'. There are two reasons for this: it often doesn't work and, even
when it does, it's very slow (it seems to fire up another JVM, leaving
X, the Oracle back-end and <it/two/ virtual machines in memory; not
good with 128Mb of memory).

<item>The installer should now ask you about the network protocols
that you want Oracle to support. The boxes all came up blank for me. I
don't know what's supposed to be in there, but I clicked 'Next' and
found that everything worked.

<item>All the hard stuff is complete now. All the products you want
should be installed and are ready to go. Congratulations.
</enum>

<sect1>Installing the patch
<p>
Unfortunately, the CD that Oracle sent you was probably version
8.1.5.0.0. As with almost all first releases there are problems with
that version (problems include empty files, so they're quite serious)
and a patch, to version 8.1.5.0.2 is essential. You'll certainly need
it to progress to the "Configuration" section of this HOWTO. The patch
described here is a cumulative patch, i.e., it includes all the files
required to move from version 8.1.5.0.0 to 8.1.5.0.2.

The file you need is on <url name="the Oracle web site"
url="http://technet.oracle.com/software/products/oracle8i/software_index.htm">
and is relatively easy to install.

<enum>
<item>This is probably the first of many patches, so create a
directory called "patches" somewhere convenient (mine is in
<tt/$ORACLE_HOME/).

<item>Download the file into it.

<item>Create somewhere to put the files:
<verb>mkdir /tmp/orapatch
cd /tmp/orapatch</verb>

<item>Uncompress the file:
<verb>tar zvxf $ORACLE_HOME/patches/linux815patches.tgz</verb>

<item>Run the shell script that's now in the current directory:
<verb>./linux_815patches.sh</verb>

</enum>

Note that it's important not to uncompress the file in the current
directory. The patch installer checks that the correct number of files
are present and fails if there are not the right number. Of course, if
it finds the patch archive it finds too many files!

<sect1>Setting up your environment
<p>
Add the following lines to your ".profile" (or whatever the equivalent
is for your shell):

<verb>
. oraenv
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
</verb>

Quite why the Oracle installer doesn't do this I have no idea.

If you see "<tt/[: integer expression expected before -lt/" the next
time you log in, it's because 'oraenv' is expecting your ULIMIT to be
an integer rather than the default 'unlimited.' I've seen no ill
effects by ignoring the error, but you can fix it by setting the
ULIMIT to something finite.

<sect1>Installations questions and answers

<sect2>The installation program exits with 'CreateOUIProcess()'
<p>
Firstly, make sure that you're running the right version of the JVM. I
don't know what Oracle do with their software, but it's very dependent
on the version you use.

Secondly, it might help if, instead of running <tt/runInstaller/ from
the root of the CD, you move into <tt>install/linux</tt> and run the
<tt/runInst.sh/ shell script instead.

This problem seems more common on RedHat Linux 6.1 than 6.0 and could
be something to do with a newer C library.

I've also heard reports that if you have the wrong version of Gnome's
usual window manager, Enlightenment, you might get this
problem. Upgrade or switch to another environment such as KDE or
Fvwm2.

<sect2>The installer just flashes on the screen and then vanishes
<p>
This is not an uncommon occurrence. Usually it means that you're
running an old version of Enlightenment. Upgrading or switching to
another environment should fix the problem.

A similar problem is the installation program vanishing at some later
point in the process, often around 80% of the way through. The
consensus seems to be that Oracle ran out of memory. You should
increase the amount of swap space your machine has, anything over
200Mb should be sufficient.

<sect2>Strange Java errors when I start the installation program?
<p>
Which version of the Java Virtual Machine are you using? People have
claimed success with other versions, but most of the problems that I
had disappeared when I downgraded to JRE 1.1.6v5, the one that Oracle
recommends in their documentation.

Two other things that are worth mentioning: make sure you use the JRE
and not the JDK and, secondly, you should be using "green"
threads. Unless you've set THREADS_FLAG to 'native' you almost
certainly have the correct setting.

<sect2>The installation program 'Segmentation Fault's
<p>
You do have GLIBC 2.1 don't you?

<sect2>Problems loading shared libraries
<p>
The error message that I'm talking about looks a bit like this:

<verb/error in loading shared libraries: libclntsh.so.8.0: cannot open
shared object file: No such file or directory/

This is the same as NT complaining that it can't find a DLL. It's very
easy to fix. Simply add the following line to the end of your
".profile" if you're using a Bourne-like shell (ask a local guru if
you don't know):

<verb>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib</verb>

Or use the following line if you're using a CSH-like shell:

<verb>setenv LD_LIBRARY_PATH "$LD_LIBRARY_PATH
$ORACLE_HOME/lib"</verb>

I don't use the C-Shell, so independent verification of this command
would be appreciated.

<sect2>Pro*C doesn't work
<p>
The answer to this took quite a bit of tracking down, although the
answer <it/is/ on the Oracle web site if you look hard enough.

The default configuration of Pro*C doesn't know where to find all its
libraries, so you need to tell it. After installation
<tt>$ORACLE_HOME/precomp/admin/pcscfg.cfg</tt> is empty, but it needs
to contain the following:

<verb>sys_include=(/home/oracle/precomp/public, /usr/include,
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/,
/usr/include, /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include,
/usr/include)
include=(/home/oracle/precomp/public) 
include=(/home/oracle/rdbms/demo) 
include=(/home/oracle/network/public) 
include=(/home/oracle/plsql/public)
ltype=short</verb>

(The first four lines above, from <tt/sys_include/ to <tt/include)/
should all be on the same line in the file.)

The Oracle documentation doesn't mention this, but you also need to
edit <tt>$ORACLE_HOME/precomp/lib/env_precomp.mk</tt>. On the line
that defines <tt/CCPSYSINCLUDE/, put the following:

<verb>CCPSYSINCLUDE=sys_include='($(ORACLE_HOME)/precomp/public,
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include,
/usr/include/g++-2, /usr/include)'</verb>

This works for RedHat Linux 6.0, but may need tweaking for other
distributions or later versions of RH.

<sect2>I installed the patch but it made things worse!
<p>
This is tricky, barely documented by Oracle and common across all
their products and installation programs. It's about time they did
something about it!

Often what happens is as follows: you install Oracle Enterprise
Edition and, as Oracle tells you, you dash off and install all the
available patches. Then you decide you need the pre-compilers and
install Oracle Programmer from the same CD.

Before you installed Pro*C your database worked, and now it doesn't.

The problem is that the versions of the pre-compilers that you
installed were not patched and some of the Oracle server code relies
on the fixes; Oracle's installer is so stupid that it will overwrite
newer version of the same code.

The solution is not pretty. Since you can't extract an individual file
from the CD you need to install the whole thing again, this time
adding Oracle Programmer before the patch.

<sect2>Oracle thinks I don't have enough disk space
<p>
There's something wrong with the installation program. Assuming you
<it/do/ have enough space it will install okay.

<sect>Creating a database
<sect1>Overview
<p>
Hopefully you followed the advice from the previous section and didn't
create a database.

For most people, I can probably outline the process in a couple of
words: "Run 'dbassist'." Unless this is the first time you've ever run
Oracle, none of the questions should really phase you.

For completeness, I'll document what I did but I'd best say what I was
aiming for first. Bottom line: this is neither a production system nor
a 'serious' (i.e., several people, full time) development box. I
installed 8i to play around and see what was new or different from 8
and older versions.

This means that when 'dbassist' offered an easy option I took it. And
when it suggested using a different disk, or at least a different
partition, I declined. My <tt/$ORACLE_HOME/ is
<tt>/home/oracle</tt>. All the data files and software are in there,
all on one partition.

<sect1>Step-by-step guide
<p>
<enum>
<item>Bring up a command prompt and type: <verb>dbassist</verb>

<item>My machine tells me that "JNLS Exception:
oracle.ntpg.jnls.JNLSException. Unable to find any National Character
Sets." According to Oracles 8i Patch FAQ, this is a known problem
(884001) and can safely be ignored.

<item>Select the "Create a database" radio button and press "Next"

<item>There are two options: Typical and Custom. If you knew exactly
what you were doing you probably wouldn't be reading this and could
comfortably select Custom. I'm not going to cover that. Instead I'll
assume you select "Typical" and press "Next"

<item>Next it asks whether you want to copy the database from your CD
or to create the data files. Whenever I tried the first option, Oracle
couldn't find my CD player (you just installed from it!). So I
recommend choosing the second option. It's not difficult, it probably
just takes longer

<item>It's probably safe to select 'Hybrid' when it asks you what
environment the database will operate in

<item>Now it asks you how many users will be using your database at
any given time. I put five.

<item>Next it asks you what products you want to install in your new
database. Again, you know what you want better than me!

<item>Oracle needs a "Global Database Name" and a "SID" now. The
database name is like a fully qualified domain name (but
different). If you're the Oracle guru you'll know what to put, if not
your organisation might have some conventions. I called mine 'dev1'
(both the SID and database name).

<item>Now, do you want to create the database 'now' or should you let
it save the information to a shell script? With 128Mb of RAM I found
the former option painful.

I created the shell script, quit out of X and anything else using a
lot of memory and then ran the script. Much more snappy.

<item>I didn't notice this in any of the documentation, but your
database won't work properly without it! The database that 'dbassist'
creates is fine, but by default the user rollback segments are left
off-line. (Read: non-system users can't perform any operation that
requires transactions.)

Type: <verb>cd $ORACLE_HOME/dbs</verb>

You now need to edit a file called "init&lt;SID&gt;.ora"
("initdev1.ora" in my case).

About half-way down the file is a commented out line looking something
like this:

<verb># rollback_segments = (r01, r02, r03, r04)</verb>

Uncomment this line (remove the hash), save the file and you're done.

<item>This is a kind of meta-step. You have a database and you should
be able to start it up, but you probably don't know what any of the
system passwords are!

There are two that you need to know. The first is the SYSTEM
password. This defaults to '<tt/MANAGER/'. (It seems to be
conventional to put Oracle passwords in uppercase. In fact passwords
are not case sensitive.) I recommend you change it straight away by
typing <tt/password/ at the SQL*Plus prompt. (For people expecting an
<tt/ALTER USER/ command, this is new to the version of SQL*Plus
supplied with 8i.)

The other password that you need to know is the one for SYS. It
defaults to '<tt/CHANGE_ON_INSTALL/' and you should do exactly what it
says!

<item>Final step. This one gets rid of the annoying 'no profile'
warnings you get when you log into SQL*Plus.

Log into SQL*Plus as user 'system' (<tt>sqlplus
system/&lt;password&gt;</tt>).  Then type:

<verb>@?/sqlplus/admin/pupbld.sql</verb>

The question-mark is an alias for the <tt/$ORACLE_HOME/ directory.

<item>This is an optional step used to define the default editor for
SQL*Plus (it defaults to <tt/ed/ so you do!). Open
<tt>$ORACLE_HOME/sqlplus/admin/glogin.sql</tt> in your favourite
editor and add <tt>define_editor=&lt;editor name&gt;</tt> to the end.

</enum>

And that's it. You should now have an operational database that you
can log into using SQL*Plus.

<sect1>Questions and answers
<sect2>Is it really that easy?
<p>
Yes and no. If you're just playing around, building a database for
yourself to learn the new features of 8i, then 'yes.' The database the
above instructions will build is complete and will work fine.

However, if you know anything about Oracle, you will quickly realise
that the default configuration is appallingly bad. If you're making a
serious, production system I recommend you use the "Custom" option.

Even for my toy system I did some tweaking. I increased the sizes of
most of the table-spaces and changed them so that they didn't grow
automatically (I hate software when it tries to be too clever).

<sect2>Is it really necessary to put all the files on different disks?
<p>
No and it will work fine if you don't, but I don't recommend putting
all your files on the same disk nevertheless.

Spreading the files over a number of disks, even it's just the data
files on one and the rollback segments on another, will have a
significant performance advantage. Read an Oracle DBA book if you need
further information.

<sect2>I can't start dbassist
<p>
Caused by several zero-length files in the initial
installation. Following the patch procedure will fix this problem.

<sect2>I get "ORA-01034: ORACLE not available"
<p>
To cut a long story short, your <tt/$ORACLE_SID/ is probably set
incorrectly or not at all. Make sure it's set to the same value you
gave 'dbassist' and that it's value is exported (i.e., <tt/export
ORACLE_SID/ in any Bourne compatible shell).

<sect2>I get "ORA-01012: Not logged in"
<p>
This is a very common error, and there are a number of different
things that cause it.

Firstly you'll want to make sure that you're not creating a Shared
Server configuration (sometimes known as MTS). Create a database using
Dedicated Server and convert it later.

If that's not it, check your <tt/NLS_LANG/ environment variable. The
easiest option is to unset it. If you really want to use it, make sure
that you have it exactly right. Make sure you don't transpose any '1's
(one's) for 'l's (the twelfth letter of the alphabet)!

<sect2>Can data-files only be 1Gb in size?
<p>
'dbassist' won't let you create a datafile bigger than 1Gb. I believe
this to be a bug as Linux has no problem with files up to 2Gb.

Note that does not limit the size of your database to 1Gb or less. A
database is made up of many table-spaces which can be made up of many
data-files. Talk to your friendly DBA for more information.

<sect2>Can I use raw files?
<p>
Recent versions of the Linux kernel allow applications to directly
access the disks. Oracle is able to use this facility and can
(sometimes) increase its performance.

Technically the answer is 'yes,' you can use raw files. But
realistically the answer is 'no.' The performance improvement you'll
get probably isn't worth the administrative overhead.

<sect>Configuration
<sect1>Overview
<p>
Congratulations, you have Oracle running on your Linux box. You have
created a database and can connect to it using SQL*Plus.

Of course, this is not the end of it. Ideally, you'd be able to
connect to it as another Unix user or from a completely different
machine. That is what this section is for.

<sect1>Connecting as another user
<p>
Some of the details in this section are a little sketchy as this is
not a configuration that I personally use. However, performing one of
the following steps should work:

<itemize>
<item><verb>. oraenv</verb> if you run a Bourne-like shell (like Bash
or pdksh)
<item><verb>source coraenv</verb> if you prefer the C-Shell
</itemize>

When running "oraenv" I get an error if I use 'bash', the default
Linux shell. It seems not to cause any problems so don't worry. You
can always use 'pdksh' if it <it/does/ worry you.

<sect1>Connecting from another machine
<p>
I remember this being very complex with earlier versions of Oracle,
but just seemed to work here. I'm sure that must mean that I did
something wrong, forgot something I did or that there's a massive
security hole.

This is what I remember doing:

<enum>
<item>Logging into Linux as user 'oracle'
<item>Make sure that "oraenv" has been executed (i.e., your
<tt/$ORACLE_HOME/ is set correctly)
<item>Type: <verb>lsnrctl start</verb>

</enum>

On your client machine all you need to do now is point it at the right
machine and database instance.

If you want more control over the process, the "Net8 Configuration
Assistant" ('netec') should be able to help.

<sect1>Connecting to another machine
<p>
This used to be very difficult in many earlier version of Oracle,
involving editing many text files, most of which had an fantastically
complex syntax.

But in 8i, if you've got your JVM working, then all you need is the
"Net8 Easy Config" program. Follow these steps to allow your machine
to connect to a database on another machine:

<enum>
<item>Start "Net8 Easy Config" by typing <tt/netec/ at the command
prompt while logged in as 'oracle.'

<item>After a short delay while Java gets its act together, the
welcome screen appears. It should be asking what you want to do. Leave
the radio buttons on the left alone (the default is 'create') and
enter the name of the database in the text box. Click 'Next' when
you're done.

<item>Select one of the protocols it offers. Unless you know
differently, this should probably be 'TCP/IP' which is the
default. Press 'Next.'

<item>Enter the hostname (or IP address) of the remote machine. The
port number probably doesn't need changing. Press 'Next.'

<item>Select the type of database (8i or other) using the radio
buttons and enter the name in the appropriate text box. Press 'Next.'

<item>You can now test that the information you've enter makes sense
to Oracle. I found that 'netec' has a tendency to crash if some of the
details are wrong. Press 'Next' when you're sure that it all
works. You can keep pressing the 'Back' button to go back and correct
any information.

<item>If you're happy with all the information you've entered, you can
press the 'Finish' button and that's it!

</enum>

If you want more control over the process, you may need to use the
"Net8 Assistant" -- a big window with many confusing options -- which
can be started with the <tt/netasst/ command.

<sect1>Questions and answers
<sect2>I can't start 'netasst'
<p>
The problem is with a couple of zero-length files. Installing the
patch should fix this problem.

<sect>Final Words
<sect1>Useful Software
<p>
Now that you've managed to get Oracle installed, you'll want to try
and use it. Although it's possible to do everything from your server
PC, it's generally best to user the client-server facilities and use
another machine to access your database.

Naturally Oracle have a large collection of, largely, pretty good
client software, however there's not much for Linux at this time. The
main useful piece of software, Oracle Enterprise Manager, usually
comes with Oracle.

But most of the best software comes from other places...

<itemize>
<item>Tool for Oracle Application Development (T.O.A.D.). This used to
be free but is now owned by <url url="http://www.quest.com"
name="Quest Software">. You can download a free version (if you're
prepared to do it every couple of months) or you can pay for it. When
I'm using Oracle on a daily basis, this is the program I choose if I
have to use a Windows desktop. It's not as polished as some, but it
does just about everything you need.

<item><url url="http://www.globecom.se/tora/" name="TOra">. This is
the closest you'll find to a TOAD for Linux. In fact, in some ways
it's better than TOAD! The Linux version is free, but you can also buy
a Windows version.

<item>SQLNavigator. Also by <url url="http://www.quest.com"
name="Quest Software">. I've not really used it but it's been highly
recommended by all who have.

<item><url url="http://www.orasoft.com" name="OraSoft">. These guys
produce applications for Oracle that actually run on Linux. I've not
used them in anger, but they look good.

<item><url url="http://www.tux.org/orac-dba/" name="Orac">. Another
that I've not used much, but has been described as a nice,
configurable DBA-tool by a number of people.

</itemize>

<sect1>Useful Books
<p>
I seem to get most of my Oracle information from colleagues and
books. I'm not able to give away my colleagues, but the books I
recommend are as follows:

<itemize>

<item><#if output=html><url
url="http://www.amazon.com/exec/obidos/ASIN/1565927087/zx81orguk00"
name="Oracle Essentials,"></#if> <#unless output=html>"Oracle
Essentials,"</#unless> Rick Greenwald, R. Stackowiak, Jonathan Stern,
O'Reilly and Associates, ISBN 1-56592-708-7.

<item><#if output=html><url
url="http://www.amazon.com/exec/obidos/ASIN/0072123648/zx81orguk00"
name="Oracle 8i: The Complete Reference,"></#if> <#unless
output=html>"Oracle 8i: The Complete Reference,"</#unless> Kevin Loney
and George Koch, Oracle Press, ISBN 0-07212-364-8.

<item><#if output=html><url
url="http://www.amazon.com/exec/obidos/ASIN/1565922379/zx81orguk00"
name="Oracle Performance Tuning,"></#if> <#unless output=html>"Oracle
Performance Tuning,"</#unless> Mark Gurry and Peter Corrigan, O'Reilly
and Associates, ISBN 1-56592-237-9.
 
<item><#if output=html><url
url="http://www.amazon.com/exec/obidos/ASIN/1565922689/zx81orguk00"
name="Oracle Design,"></#if> <#unless output=html>"Oracle
Design,"</#unless> Dave Ensor and Ian Stevenson, O'Reilly and
Associates, ISBN 1-56592-268-9.
 
<item><#if output=html><url
url="http://www.amazon.com/exec/obidos/ASIN/1565923359/zx81orguk00"
name="PL/SQL Programming,"></#if> <#unless output=html>"PL/SQL
Programming,"</#unless> Steven Feuerstein, O'Reilly and Associates,
ISBN 1-56592-335-9.
 
<item><#if output=html><url
url="http://www.amazon.com/exec/obidos/ASIN/1565923758/zx81orguk00"
name="PL/SQL Built-in Packages,"></#if> <#unless output=html>"PL/SQL
Built-in Packages,"</#unless> Steven Feuerstein, O'Reilly and
Associates, ISBN 1-56592-375-8.

</itemize>

You'll find some more book recommendations and reviews on my <url
url="http://www.zx81.org.uk/computing/opinion/" name="web site">.

<sect1>Useful Internet resources
<p>
There's a lot of useful stuff on the web.

<itemize>

<item><url name="Oracle Technet" url="http://otn.oracle.com">. This is
Oracle's public and free support website. Lot's of very useful
information there.

<item><url name="Oracle Metalink"
url="http://support.oracle.com">. Oracle's private (you need a support
contract) support website. Only slightly more useful than Technet!

<item>If this HOWTO hasn't worked for you, there are a couple of
other's that you might like to try: <url name="Jesus M. Salvo, Jr.'s"
url="http://homepages.tig.com.au/~jmsalvo/linux/oracle8i.html"> and
<url name="Tom Bissett's" url="http://jordan.fortwayne.com/oracle/">
slightly dated guide. Or there's a <url name="bulletin board"
url="http://cgi.zx81.org.uk/phpBB2/"> on my website if you still need
to ask questions.

<item><url name="OraFaq" url="http://www.orafaq.org">. A site full of
questions and answers regarding Oracle on all platforms.

<item>Oracle Linux mailing list (Send a mail to <url
url="mailto:ListGuru@fatcity.com" name="ListGuru@fatcity.com"> with
the words 'SUBSCRIBE ORACLE-LINUX-L' in the body.

</itemize>

</article>
