Oracle 9i sotto Fedora Core 3 - Installazione HOWTO

Gaurav Prasad

   <gauravpd at gmail dot com>

   2005-06-27
   Revision History
   Revision v1.0      2005-06-22 Revised by: MG
   For inclusion in TLDP: Completed XML article structure with
   articleinfo, section IDs for cross-referencing; technical,
   language, grammar and spelling review.
   Revision v1.0-pre1 2005-04-01 Revised by: GP
   Added miscellaneous errors section.
   Revision v0.1      2005-03-25
   First publication.

   Questa guida descrive come installare Oracle 9i su Fedora Core
   3 o superiore.
     __________________________________________________________

   Table of Contents
   1. 1. Introduzione

        1.1. Cosa dovete sapere
        1.2. Riconoscimenti
        1.3. Disponibilità e Feedback
        1.4. Licensing Information and Liability

   2. Ottenere Oracle 9i

        2.1. Installazione tramite CD
        2.2. Scarico
        2.3. Installare

   3. Preparazione per la configurazione

        3.1. Creare gli utenti ed i gruppi
        3.2. Creare le directory

   4. Impostare le variabili d'ambiente
   5. Impostare i parametri del kernel

        5.1. Modificare /etc/sysctl.conf
        5.2. Modificare /etc/security/limits.conf

   6. Installare le librerie GCC 2.9 Compat

        6.1. Installare i pacchetti GCC 2.96 Compat
        6.2. Creare link simbolici

   7. Eseguire l'installatore

        7.1. Applicare la patch per libwait.c
        7.2. Configurare il Display
        7.3. Avviare l'installazione
        7.4. Correggere nodeinfo

   8. Creare uno script di avvio
   9. Errori varii

1. 1. Introduzione

1.1. Cosa dovete sapere

   Questa guida è 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 è
   abbastanza ben documentata ma è 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.

   Spero troverete utile questa breve guida.

   Se si deve installare Oracle 9i su FC3, si deve essere
   coscienti dei seguenti fatti:

    1. Fedora non è *supportato ufficialmente* da Oracle Corp.
    2. L'installazione di Oracle 9i su FC3 è difficile ma
       possibile.
    3. Di Oracle 9i NON SI PUÒ fare il link con le librerie usate
       da gcc 3.4. Su FC3 è necessario usare le librerie compatte
       GCC di FC2.
    4. Il metodo di installazione di Oracle 10 G NON FUNZIONA con
       9i.
    5. Questo HOWTO tratta prodotti RedHat >= 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
       http://www.puschitz.com/OracleOnLinux.shtml e
       http://oracle-base.com/.

   È da tenere presente anche che:

    1. Questo HOWTO mira solo a fornire assistenza. Non è un
       documento UFFICIALE di Oracle.
    2. Io non sono un DBA. Non contattatemi per questioni diverse
       dal contenuto di questo documento. Io non vi aiuterò a
       impostare il vostro database. Se avete bisogno di aiuto per
       quello, controllate i forum di Oracle.
    3. Il prossimo passo sarà probabilmente la scrittura di
       qualche script di Bash o in Perl per automatizzare
       completamente questo tedioso, noioso e frustrante processo
       manuale ma dipenderà dal tempo a mia disposizione. Le
       vostre idee sono benvenute.
     __________________________________________________________

1.2. Riconoscimenti

   Vorrei ringraziare Jean François per l'aiuto con le parti più
   difficoltose.
     __________________________________________________________

1.3. Disponibilità e Feedback

   Si può trovare la versione più recente presso
   http://www.pagux.com/oracle9ionfedora3.html.

   Mi affido a voi, lettori, per rendere questo HOWTO utile. Se
   avete qualsiasi domanda, correzione o commento, inviatemeli ed
   io cercherò di integrarli nella prossima revisione.
     __________________________________________________________

1.4. Licensing Information and Liability

   Copyright 2005 Gaurav Prasad

   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
   http://www.gnu.org/copyleft/fdl.html.

   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.

   Linux is a registered trademark of Linus Torvalds.

   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.
     __________________________________________________________

2. Ottenere Oracle 9i

2.1. Installazione tramite CD

   Se si ha Oracle 9i su un CD allora montare:

   mount -r -o loop=/dev/loop0 ora9id1.iso Disk1/
     __________________________________________________________

2.2. Scarico

   Altrimenti scaricarlo da
   http://www.oracle.com/technology/software/products/oracle9i/htd
   ocs/linuxsoft.html.
     __________________________________________________________

2.3. Installare

   Estrarre tutti e tre i seguenti file:

   gunzip ship_9204_linux_disk1.cpio.gz

   cpio -idmv -I ship_9204_linux_disk1.cpio

   Non si deve dimenticare l'opzione -I o si otterranno errori
   durante l'estrazione.

   Questo comando espanderà l'archivio cpio nella directory Disk1.
   Ripetete il processo per gli altri due archivi.
     __________________________________________________________

3. Preparazione per la configurazione

3.1. Creare gli utenti ed i gruppi

   Eseguire i seguenti comandi come root:
# groupadd oinstall
# groupadd dba
# groupadd oper
# groupadd apache
# useradd -g oinstall -G dba oracle
# passwd oracle

   Impostare la password per l'utente oracle.
     __________________________________________________________

3.2. Creare le directory

   La destinazione finale del software sarà :
# mkdir /u01 /u02
# chown oracle.dba /u01 /u02
# chmod 755 /u01 /u02
     __________________________________________________________

4. Impostare le variabili d'ambiente

   Fare il log in come utente di oracle:

   su - oracle

   Modificare .bash_profile nella directory home di oracle ed
   aggiungere quanto segue, per esempio utilizzando vim:
########## 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_PRELO
AD
########## End of Oracle variables ##########
     __________________________________________________________

5. Impostare i parametri del kernel

5.1. Modificare /etc/sysctl.conf

   Aggiungere le seguenti linee al file /etc/sysctl.conf:
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
     __________________________________________________________

5.2. Modificare /etc/security/limits.conf

   Si possono inoltre aggiungere le seguenti linee al file
   /etc/security/limits.conf:
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384

   L'aggiunta di queste linee richiede il riavvio prima che le
   nuove impostazioni abbiano effetto.
     __________________________________________________________

6. Installare le librerie GCC 2.9 Compat

6.1. Installare i pacchetti GCC 2.96 Compat

   Da Fedora Core DUE:

     * compat-libstdc++-7.3-2.96.126.i386.rpm
     * compat-libstdc++-devel-7.3-2.96.126.i386.rpm
     * compat-gcc-7.3-2.96.126.i386.rpm
     * compat-gcc-c++-7.3-2.96.126.i386.rpm

   Caution Non sovrascrivere i pacchetti esistenti


   Assicurarsi di mantenere l'installazione esistente di GCC,
   oppure una gran parte del software non funzionerà o non potrà
   essere più compilato. Nel caso questi pacchetti siano già
   installati sul sistema con numeri di versioni più recenti,
   usare rpm -i --force per installare i più vecchi al posto dei
   più nuovi.

   Dal sotto-albero di Fedora Core TRE, prendete il pacchetto
   compat-db.

   Se non si installano le librerie GCC compat come sopra si
   avranno un'infinità di errori di link.
     __________________________________________________________

6.2. Creare link simbolici

   Mettete prima gcc296 e g++296 nella variabile $PATH creando i
   seguenti link simbolici:
# 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++

   È da notare che se il sistema sarà già stato aggiornato, le
   versioni GCC potrebbero essere differenti.
     __________________________________________________________

7. Eseguire l'installatore

7.1. Applicare la patch per libwait.c

   Prima di eseguire l'installatore, allo scopo di evitare strani
   errori eseguire quanto segue:

     * In /home/oracle,creare un file chiamato libwait.c e
       compilare come descritto qui sotto:
Creare un file chiamato libcwait.c nella directory home dell'utente ora
cle per evitare di avere un errore quando si esegue l'installatore di O
racle. 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

       gcc -shared -o libcwait.so libcwait.c -fpic -O
     * Poi aggiungere questa libreria all'ambiente dell'utente del
       database:
       export LD_PRELOAD=/home/oracle/libcwait.so
       In precedenza è stata messa una linea simile in
       .bash_profile.
     __________________________________________________________

7.2. Configurare il Display

   Eseguire i seguenti comandi come utente oracle:
oracle@9iserver ~> xhost +localhost
oracle@9iserver ~> export DISPLAY=localhost:0.0

   Ora è possibile collegarsi al proprio desktop o volendo si può
   eseguire l'installazione da remoto, ad esempio usando VNC.
   Oppure, per esempio, si può eseguire l'installatore dal desktop
   di Windows
     __________________________________________________________

7.3. Avviare l'installazione

   Eseguire l'applicazione d'installazione grafica:

   /path/to/oracle/Disk1/runInstaller

   Ora proseguire con Graphical setup (se non si è sicuri
   scegliere Standard database). Da qui il resto del processo
   d'installazione è ovvio.
     __________________________________________________________

7.4. Correggere nodeinfo

   Ora l'installazione dovrebbe procedere senza alcun errore di
   link ma alla fine si avrà un errore:
Parameter "nodeinfo" = NO_VALUE
Agent Service Failed

   Per correggerlo, eseguire quanto segue per avviare la procedura
   guidata dopo che l'impostazione è finita:

   netca &

   Ora cambiare in $ORACLE_HOME ed eseguire ./lsnrctl start.

   Verificare che il processo sia in esecuzione:

   ps afx | grep LISTEN
     __________________________________________________________

8. Creare uno script di avvio

   Allo scopo di avviare il server Oracle automaticamente al
   momento dell'avvio del sistema, creare il file
   /etc/init.d/oracle come segue:
#!/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

   Ora eseguire chkconfig oracle per l'aggiornamento delle
   informazioni dei livelli di esecuzione.

   Provare ora service oracle start|stop|restart per verificare
   che tutto funzioni come atteso.

   Se si è arrivati a questo punto senza errori: congratulazioni.
   Altrimenti, verificare Section 9 per suggerimenti sulla
   soluzione dei problemi.
     __________________________________________________________

9. Errori varii

   ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory

   Questo errore capita quando si fa un riavvio e cercare di fare
   il login. Si ottengono molti errori quando l'istanza non è
   montata/avviata automaticamente.

   Soluzione:

    1. Controllare /etc/oratab ed assicurarsi che
       *:/opt/oracle/OraHome1 e ordb:/opt/oracle/OraHome1 siano
       impostati a "Y" (YES).
    2. Provare ad inizializzare il database:
       $ORACLE_HOME/bin/dbstart.

   ERROR:
No start entry for SID * at /opt/oracle/OraHome1 in /etc/oratab

   Potrebbe essere causato da un baco nello script dbstart che
   cerca il file sid nel posto sbagliato.

   Soluzione:

    1. cp $ORACLE_BASE/admin/$ORACLE_SID/pfile/init_*.ora \
       $ORACLE_HOME/dbs/init$ORACLE_SID.ora
    2. Come utente oracle:
$ sqlplus
SQL> create pfile from spfile;
SQL> exit

    3. Eseguire lo script dbstart: $ORACLE_HOME/bin/dbstart.