<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

<article>
<articleinfo>
<title>Oracle 9i sotto Fedora Core 3 - Installazione HOWTO</title>
<author>
<firstname>Gaurav</firstname>
<surname>Prasad</surname>
<affiliation>
<address>
<email>gauravpd at gmail dot com</email>
</address>
</affiliation>
</author>

<pubdate>2005-06-27</pubdate>
<revhistory>
<revision>
<revnumber>v1.0</revnumber>
<date>2005-06-22</date>
<authorinitials>MG</authorinitials>
<revremark>For inclusion in TLDP: Completed XML article structure with articleinfo, section IDs for cross-referencing; technical, language, grammar and spelling review.</revremark>
</revision>
<revision>
<revnumber>v1.0-pre1</revnumber>
<date>2005-04-01</date>
<authorinitials>GP</authorinitials>
<revremark>Added miscellaneous errors section.</revremark>
</revision>
<revision>
<revnumber>v0.1</revnumber>
<date>2005-03-25</date>
<revremark>First publication.</revremark>
</revision>
</revhistory>

<abstract>

<para>Questa guida descrive come installare Oracle 9i su Fedora Core 3 o superiore.</para>
</abstract>

</articleinfo>

<sect1 id="sect_01">
<title>1. Introduzione</title>
<sect2 id="sect_01_01"><title>Cosa dovete sapere</title>
<para>Questa guida &egrave; stata scritta a causa della mia frustrazione durante l'installazione di Oracle 9i su FC3. Fondamentalmente l'installazione della 9i su RAS 1,2,3 RH 9, FC1, FC2 &egrave; abbastanza ben documentata ma &egrave; difficile trovare qualcosa di significativo su FC3; qualcuno ha addirittura suggerito che installare Oracle 9i su FC3 fosse impossibile. Questo HOWTO cerca di condensare tutta la mia esperienza e tutti i miei ritrovamenti con qualsiasi informazione particolare per FC3, che prima era sparsa per tutto il web, in un documento conciso ma utile.</para>
<para>Spero troverete utile questa breve guida.</para>
<para>Se si deve installare Oracle 9i su FC3, si deve essere coscienti dei seguenti fatti:</para>
<orderedlist>
<listitem>
<para>Fedora non &egrave; *supportato ufficialmente* da Oracle Corp.</para>
</listitem>
<listitem>
<para>L'installazione di Oracle 9i su FC3 &egrave; difficile ma possibile.</para>
</listitem>
<listitem>
<para>Di Oracle 9i NON SI PU&Ograve; fare il link con le librerie usate da gcc 3.4.  Su FC3 &egrave; necessario usare le librerie compatte GCC di FC2.</para>
</listitem>
<listitem>
<para>Il metodo di installazione di Oracle 10 G NON FUNZIONA con 9i.</para>
</listitem>
<listitem>
<para>Questo HOWTO tratta prodotti RedHat &gt;= FC3 o superiori o con versioni di gcc superiori a 2.9. Se si sta installando qualsiasi altro prodotto RedHat si possono leggere altre eccellenti guide, per esempio <ulink url="http://www.puschitz.com/OracleOnLinux.shtml">http://www.puschitz.com/OracleOnLinux.shtml</ulink> e <ulink url="http://oracle-base.com/">http://oracle-base.com/</ulink>.</para>
</listitem>
</orderedlist>
<para>&Egrave; da tenere presente anche che: </para>
<orderedlist>
<listitem>
<para>Questo HOWTO mira solo a fornire assistenza.  Non &egrave; un documento UFFICIALE di Oracle.</para>
</listitem>
<listitem>
<para>Io non sono un DBA.  Non contattatemi per questioni diverse dal contenuto di questo documento.  Io non vi aiuter&ograve; a impostare il vostro database.  Se avete bisogno di aiuto per quello, controllate i forum di Oracle.</para>
</listitem>
<listitem>
<para>Il prossimo passo sar&agrave; probabilmente la scrittura di qualche script di Bash o in Perl 
per automatizzare completamente questo tedioso, noioso e frustrante processo manuale  ma dipender&agrave; dal tempo a mia disposizione. Le vostre idee sono benvenute.</para>
		
</listitem>
</orderedlist>
</sect2>
<sect2 id="sect_01_02"><title>Riconoscimenti</title>
<para>Vorrei ringraziare Jean Fran&#231;ois per l'aiuto con le parti pi&ugrave;
difficoltose.</para>
</sect2>
<sect2 id="sect_01_03"><title>Disponibilit&agrave; e Feedback</title>
<para>Si pu&ograve; trovare la versione pi&ugrave; recente presso <ulink url="http://www.pagux.com/oracle9ionfedora3.html" />.</para>
<para>Mi affido a voi, lettori, per rendere questo HOWTO utile. Se avete qualsiasi 
domanda, correzione o commento, inviatemeli ed io cercher&ograve; di integrarli nella prossima revisione.</para>
</sect2>

<sect2 id="sect_01_04"><title>Licensing Information and Liability</title>
<para>Copyright 2005 Gaurav Prasad</para>
<para>This HOWTO is free documentation; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.   A copy of the license is available at <ulink url="http://www.gnu.org/copyleft/fdl.html" />.</para>
<para>This document is distributed in the hope that it will be useful,
but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.  No liability for the contents of this document can be accepted.
Use the concepts, examples and information at your own risk.
There may be errors and inaccuracies, that could be damaging to
your system.  Proceed with caution, and although accidents are highly
unlikely, the author(s) do not take any responsibility.
</para>
<para>Linux is a registered trademark of Linus Torvalds.</para>
<para>
All copyrights are held by their by their respective owners,
unless specifically noted otherwise.  Use of a term in this
document should not be regarded as affecting the validity of any
trademark or service mark.  Naming of particular products or
brands should not be seen as endorsements.
</para>
</sect2>
</sect1>

<sect1 id="sect_02"><title>Ottenere Oracle 9i</title>
<sect2 id="sect_02_01"><title>Installazione tramite CD</title>
<para>Se si ha Oracle 9i su un CD allora montare:</para>
<cmdsynopsis><command>mount <option>-r -o loop=/dev/loop0</option> <filename>ora9id1.iso Disk1/</filename></command></cmdsynopsis>
</sect2>
<sect2 id="sect_02_02"><title>Scarico</title>
<para>Altrimenti scaricarlo da <ulink url="http://www.oracle.com/technology/software/products/oracle9i/htdocs/linuxsoft.html" />.</para>
</sect2>
<sect2 id="sect_02_03"><title>Installare</title>
<para>Estrarre tutti e tre i seguenti file:</para>
<cmdsynopsis><command>gunzip <filename>ship_9204_linux_disk1.cpio.gz</filename></command></cmdsynopsis>
<cmdsynopsis><command>cpio <option>-idmv -I</option> <filename>ship_9204_linux_disk1.cpio</filename></command></cmdsynopsis>
<para>Non si deve dimenticare l'opzione <option>-I</option> o si otterranno errori durante l'estrazione.</para>
<para>Questo comando espander&agrave; l'archivio cpio nella directory <filename>Disk1</filename>.  Ripetete il processo per gli altri due archivi.</para>
</sect2>
</sect1>
<sect1 id="sect_03"><title>Preparazione per la configurazione</title>
<sect2 id="sect_03_01"><title>Creare gli utenti ed i gruppi</title>
<para>Eseguire i seguenti comandi come <emphasis>root</emphasis>:</para>
<screen>
# groupadd oinstall
# groupadd dba
# groupadd oper
# groupadd apache
# useradd -g oinstall -G dba oracle
# passwd oracle
</screen>
<para>Impostare la password per l'utente <emphasis>oracle</emphasis>.</para>
</sect2>
<sect2 id="sect_03_02"><title>Creare le directory</title>
<para>La destinazione finale del software sar&agrave; :</para>
<screen>
# mkdir /u01 /u02
# chown oracle.dba /u01 /u02
# chmod 755 /u01 /u02
</screen>
</sect2>
</sect1>
<sect1 id="sect_04"><title>Impostare le variabili d'ambiente</title>
<para>Fare il log in come utente di <emphasis>oracle</emphasis>:</para>
<cmdsynopsis><command>su <option>-</option> <parameter>oracle</parameter></command></cmdsynopsis>
<para>Modificare <filename>.bash_profile</filename> nella directory home di <emphasis>oracle</emphasis> ed aggiungere quanto segue, per esempio utilizzando <command>vim</command>:</para>
<screen>
########## Oracle Variables ##########
echo " Welcome to oracle";
ORACLE_BASE=/u01/app/oracle
ORACLE_OWNER=oracle; export ORACLE_OWNER
ORACLE_TERM=xterm; export ORACLE_TERM
ORACLE_HOME=/u01/app/oracle/product/9.2.0.1.0
ORACLE_SID=ORTD
LD_PRELOAD=$HOME/libcwait.so
export DISPLAY=172.28.66.39:0.0
PATH=$PATH:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/network/lib

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export CLASSPATH

LD_ASSUME_KERNEL=2.4.1; export LD_ASSUME_KERNEL
THREADS_FLAG=native; export THREADS_FLAG
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH LD_PRELOAD
########## End of Oracle variables ##########
</screen>
</sect1>

<sect1 id="sect_05"><title>Impostare i parametri del kernel</title>
<sect2 id="sect_05_01"><title>Modificare /etc/sysctl.conf</title>
<para>Aggiungere le seguenti linee al file <filename>/etc/sysctl.conf</filename>:</para>
<screen>
kernel.shmmax = 2147483648
kernel.shmmni = 128
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
</screen>
</sect2>
<sect2 id="sect_05_02"><title>Modificare /etc/security/limits.conf</title>
<para>Si possono inoltre aggiungere le seguenti linee al file <filename>/etc/security/limits.conf</filename>:
</para>
<screen>
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
</screen>

<para>L'aggiunta di queste linee richiede il riavvio prima che le nuove impostazioni abbiano effetto.</para>
</sect2>
</sect1>
<sect1 id="sect_06"><title>Installare le librerie GCC 2.9 Compat</title>
<sect2 id="sect_06_01"><title>Installare i pacchetti GCC 2.96 Compat</title>
<para>Da Fedora Core DUE:</para>
<itemizedlist>
<listitem><para><filename>compat-libstdc++-7.3-2.96.126.i386.rpm</filename></para></listitem>
<listitem><para><filename>compat-libstdc++-devel-7.3-2.96.126.i386.rpm</filename></para></listitem>
<listitem><para><filename>compat-gcc-7.3-2.96.126.i386.rpm</filename></para></listitem>
<listitem><para><filename>compat-gcc-c++-7.3-2.96.126.i386.rpm</filename></para></listitem>
</itemizedlist>

<caution><title>Non sovrascrivere i pacchetti esistenti</title>
<para>Assicurarsi di mantenere l'installazione esistente di GCC, oppure una gran parte del software non funzioner&agrave; o non potr&agrave; essere pi&ugrave; compilato. Nel caso questi pacchetti siano gi&agrave; installati sul sistema con numeri di versioni pi&ugrave; recenti, usare <command>rpm <option>-i --force</option></command> per installare i pi&ugrave; vecchi al posto dei pi&ugrave; nuovi.</para>
</caution>

<para>Dal sotto-albero di Fedora Core TRE, prendete il pacchetto <application>compat-db</application>.</para>
<para>Se non si installano le librerie GCC compat come sopra si avranno 
        un'infinit&agrave; di errori di link.</para>

</sect2>
<sect2 id="sect_06_02"><title>Creare link simbolici</title>
<para>Mettete prima gcc296 e g++296 nella
        variabile $PATH creando i seguenti link simbolici:</para>
<screen>
# mv /usr/bin/gcc /usr/bin/gcc323
# mv /usr/bin/g++ /usr/bin/g++323
# ln -s /usr/bin/gcc296 /usr/bin/gcc
# ln -s /usr/bin/g++296 /usr/bin/g++
</screen>

<para>&Egrave; da notare che se il sistema sar&agrave; gi&agrave; stato aggiornato, le versioni GCC potrebbero essere differenti.</para>

</sect2>
</sect1>

<sect1 id="sect_07"><title>Eseguire l'installatore</title>
<sect2 id="sect_07_01"><title>Applicare la patch per libwait.c</title>
<para>Prima di eseguire l'installatore, allo scopo di evitare strani errori eseguire quanto segue:</para>
<itemizedlist>
<listitem><para>In <filename>/home/oracle</filename>,creare un file chiamato <filename>libwait.c</filename> e compilare come descritto qui sotto:</para>
<screen>Creare un file chiamato libcwait.c nella directory home dell'utente oracle per evitare di avere un errore quando si esegue l'installatore di Oracle. Il file libcwait.c dovrebbe contenere il seguente testo:
/*
gcc -O2 -shared -o $HOME/libcwait.so -fpic $HOME/libcwait.c
*/
#include
#include
#include
Deploying Oracle 9i on Red Hat Enterprise Linux AS 3
Page 11
#include
pid_t
__libc_wait (int *status)
{
int res;
asm volatile ("pushl %%ebx\n\t"
"movl %2, %%ebx\n\t"
"movl %1, %%eax\n\t"
"int $0x80\n\t"
"popl %%ebx"
: "=a" (res)
: "i" (__NR_wait4), "0" (WAIT_ANY), "c" (status), "d" (0), "S" (0));
return res;
}
Next, compile this file in the
oracle
user's home directory by executing the
following command:
gcc -02 -shared -o $HOME/libcwait.so -fpic $HOME/libwait.c
</screen>
<cmdsynopsis><command>gcc <option>-shared -o</option> <filename>libcwait.so libcwait.c</filename> <option>-fpic -O</option></command></cmdsynopsis>
</listitem>
<listitem><para>Poi aggiungere questa libreria all'ambiente dell'utente del database:</para>
<cmdsynopsis><command>export <varname>LD_PRELOAD</varname>=<filename>/home/oracle/libcwait.so</filename></command></cmdsynopsis>
<para>In precedenza &egrave; stata messa una linea simile in <filename>.bash_profile</filename>.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 id="sect_07_02"><title>Configurare il Display</title>
<para>Eseguire i seguenti comandi come utente oracle:</para>
<screen>
oracle@9iserver ~&gt; xhost +localhost
oracle@9iserver ~&gt; export DISPLAY=localhost:0.0
</screen>

<para>Ora &egrave; possibile collegarsi al proprio desktop o volendo si pu&ograve; eseguire l'installazione da remoto, ad esempio usando <application>VNC</application>. Oppure, per esempio, si pu&ograve; eseguire l'installatore dal desktop di Windows
</para>
</sect2>
<sect2 id="sect_07_03"><title>Avviare l'installazione</title>
<para>Eseguire l'applicazione d'installazione grafica:</para>
<cmdsynopsis><command>/path/to/oracle/Disk1/runInstaller</command></cmdsynopsis>
<para>Ora proseguire con Graphical setup (se non si &egrave; sicuri scegliere Standard database). Da qui il resto del processo d'installazione &egrave; ovvio.</para>
</sect2>
<sect2 id="sect_07_04"><title>Correggere nodeinfo</title>
<para>Ora l'installazione dovrebbe procedere senza alcun errore di link ma alla fine si avr&agrave; un errore:</para>
<screen>
Parameter "nodeinfo" = NO_VALUE
Agent Service Failed
</screen>
<para>Per correggerlo, eseguire quanto segue per avviare la procedura guidata dopo che l'impostazione &egrave; finita:</para>
<cmdsynopsis><command>netca &amp;</command></cmdsynopsis>
<para>Ora cambiare in <varname>$ORACLE_HOME</varname> ed eseguire <command>./lsnrctl <parameter>start</parameter></command>.</para>
<para>Verificare che il processo sia in esecuzione:</para>
<cmdsynopsis><command>ps <option>afx</option> | grep <parameter>LISTEN</parameter></command></cmdsynopsis>
</sect2>
</sect1>

<sect1 id="sect_08"><title>Creare uno script di avvio</title>
<para>Allo scopo di avviare il server Oracle automaticamente al momento dell'avvio del sistema, creare il file <filename>/etc/init.d/oracle</filename> come segue:</para>
<screen>
#!/bin/bash
#
# Run-level Startup script for the Oracle Instance and Listener
#
# chkconfig: 345 91 19
# description: Startup/Shutdown Oracle listener and instance

ORA_HOME="/u01/app/oracle/product/9.2.0.1.0"
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/lsnrctl start"
        su - $ORA_OWNR -c $ORA_HOME/bin/dbstart
        touch /var/lock/subsys/oracle
        echo "OK"
        ;;
    stop)
 	# Oracle listener and instance shutdown
        echo -n "Shutdown Oracle: "
        su - $ORA_OWNR -c "$ORA_HOME/bin/lsnrctl stop"
        su - $ORA_OWNR -c $ORA_HOME/bin/dbshut
        rm -f /var/lock/subsys/oracle
        echo "OK"
        ;;
    reload|restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 start|stop|restart|reload"
        exit 1
esac
exit 0
</screen>
<para>Ora eseguire <command>chkconfig <filename>oracle</filename></command> per l'aggiornamento delle informazioni dei livelli di esecuzione.</para>
<para>Provare ora <command>service <parameter>oracle start|stop|restart</parameter></command> per verificare che tutto funzioni come atteso.</para>
<para>Se si &egrave; arrivati a questo punto senza errori: congratulazioni. Altrimenti, verificare <xref linkend="sect_09" /> per suggerimenti sulla soluzione dei problemi.</para>
</sect1>

<sect1 id="sect_09"><title>Errori varii</title>
<para>ERROR:</para>
<screen>
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory 
</screen>
<para>Questo errore capita quando si fa un riavvio e cercare di fare il login. Si ottengono molti errori quando l'istanza non &egrave; montata/avviata automaticamente.</para>
<para>Soluzione:</para>
<orderedlist>
<listitem><para>Controllare <filename>/etc/oratab</filename> ed assicurarsi che <option>*:/opt/oracle/OraHome1</option> e <option>ordb:/opt/oracle/OraHome1</option> siano impostati a <quote>Y</quote> (YES).</para></listitem>
<listitem><para>Provare ad inizializzare il database: <command>$ORACLE_HOME/bin/dbstart</command>.</para></listitem>
</orderedlist>

<para>ERROR:</para>
<screen>
No start entry for SID * at /opt/oracle/OraHome1 in /etc/oratab
</screen>
<para>Potrebbe essere causato da un baco nello script dbstart che cerca il file sid nel posto sbagliato.</para>
<para>Soluzione:</para>
<orderedlist>
<listitem><para><command>cp <filename>$ORACLE_BASE/admin/$ORACLE_SID/pfile/init_*.ora</filename></command> \</para>
<para><filename>$ORACLE_HOME/dbs/init$ORACLE_SID.ora</filename></para>
</listitem>
<listitem><para>Come utente <emphasis>oracle</emphasis>:</para>
<screen>
$ sqlplus
SQL&gt; create pfile from spfile;
SQL&gt; exit
</screen>
</listitem>
<listitem><para>Eseguire lo script <filename>dbstart</filename>: <command>$ORACLE_HOME/bin/dbstart</command>.</para></listitem>
</orderedlist>
</sect1>

</article>

